package model import ( "time" ) // AssignmentPolicy represents a conversation assignment policy for an account. // Reference: Chatwoot app/models/assignment_policy.rb + M5 spec type AssignmentPolicy struct { ID uint `gorm:"primaryKey" json:"id"` AccountID uint `gorm:"not null;index;uniqueIndex:idx_account_policy_name" json:"account_id"` Name string `gorm:"size:255;not null;uniqueIndex:idx_account_policy_name" json:"name"` Description string `gorm:"type:text" json:"description"` AssignmentOrder int `gorm:"default:0" json:"assignment_order"` // 0=round_robin, 1=balanced (enterprise) ConversationPriority int `gorm:"default:0" json:"conversation_priority"` // 0=earliest_created, 1=longest_waiting FairDistributionLimit int `gorm:"default:100" json:"fair_distribution_limit"` FairDistributionWindow int `gorm:"default:3600" json:"fair_distribution_window"` Enabled bool `gorm:"default:true" json:"enabled"` CreatedAt time.Time `gorm:"autoCreateTime" json:"created_at"` UpdatedAt time.Time `gorm:"autoUpdateTime" json:"updated_at"` Account Account `gorm:"foreignKey:AccountID" json:"account,omitempty"` InboxAssignmentPolicies []InboxAssignmentPolicy `gorm:"foreignKey:AssignmentPolicyID" json:"inbox_assignment_policies,omitempty"` } func (AssignmentPolicy) TableName() string { return "assignment_policies" } // InboxAssignmentPolicy represents the join between Inbox and AssignmentPolicy. // Each Inbox can only be associated with one AssignmentPolicy. // Reference: Chatwoot app/models/inbox_assignment_policy.rb + M5 spec type InboxAssignmentPolicy struct { ID uint `gorm:"primaryKey" json:"id"` InboxID uint `gorm:"not null;uniqueIndex" json:"inbox_id"` AssignmentPolicyID uint `gorm:"not null;index" json:"assignment_policy_id"` CreatedAt time.Time `gorm:"autoCreateTime" json:"created_at"` UpdatedAt time.Time `gorm:"autoUpdateTime" json:"updated_at"` Inbox Inbox `gorm:"foreignKey:InboxID" json:"inbox,omitempty"` AssignmentPolicy AssignmentPolicy `gorm:"foreignKey:AssignmentPolicyID" json:"assignment_policy,omitempty"` } func (InboxAssignmentPolicy) TableName() string { return "inbox_assignment_policies" }