Skip to main content

User VIP Status Log

Unified audit log recording every VIP level change — both tier-ups (promotions) and tier-downs (demotions). Provides a complete history of a player's VIP journey.

Table Comment

Unified audit log for all VIP level changes (tier-ups and tier-downs)

Relationships

  • Belongs to players via player_id
  • Belongs to brands via brand_id
  • Belongs to companies via company_id
  • References vip_levels via previous_level_id and new_level_id

Columns

ColumnTypeNullableDefaultDescription
iduuidNOgen_random_uuid()Primary key
player_iduuidNOFK to players. The player whose level changed.
brand_iduuidNOFK to brands. Brand context.
company_iduuidNOFK to companies. Parent company.
change_typevarchar(20)NOType of change: tier_up (promoted) or tier_down (demoted)
previous_level_idintegerYESFK to vip_levels. NULL for first-time VIP assignment.
previous_level_rankintegerYESSnapshot of previous level's rank at time of change
previous_level_namevarchar(50)YESSnapshot of previous level's name at time of change
new_level_idintegerNOFK to vip_levels. The new VIP level.
new_level_rankintegerNOSnapshot of new level's rank at time of change
new_level_namevarchar(50)NOSnapshot of new level's name at time of change
vip_pointsnumeric(18)YESPlayer's VIP points at time of change
days_at_previous_levelintegerYESNumber of days the player spent at their previous level
change_reasonvarchar(100)YESHuman-readable reason (e.g., "Reached 5000 VIP points", "60-day inactivity demotion")
metadatajsonbYES'{}'Additional context data
created_attimestamptzYESCURRENT_TIMESTAMPWhen the change occurred

Key Indexes

IndexColumnsNotes
user_vip_status_log_pkeyidPrimary key
idx_user_vip_status_log_playerplayer_idPlayer's VIP history
idx_user_vip_status_log_player_createdplayer_id, created_at DESCPlayer history ordered by time
idx_user_vip_status_log_brandbrand_idBrand-level reporting
idx_user_vip_status_log_change_typechange_typeFilter tier-ups vs tier-downs
idx_user_vip_status_log_createdcreated_atTime-based reporting

Business Rules

  • Level name and rank are snapshotted at the time of change — this ensures historical accuracy even if VIP levels are later renamed or reordered
  • previous_level_id is NULL for the initial VIP level assignment (when a new player is first assigned to the lowest VIP tier)
  • Tier-up entries are created automatically by the update_vip_points_and_level trigger on transactions when points cross a threshold
  • Tier-down entries are typically created by a scheduled job that evaluates the 60-day inactivity rule from user_vip_status.current_level_acquired_at
  • The days_at_previous_level field enables analysis of VIP progression velocity