package entities import ( "time" "github.com/google/uuid" "gorm.io/gorm" ) // InvitationStatus 邀请状态 type InvitationStatus string const ( InvitationStatusPending InvitationStatus = "pending" InvitationStatusConsumed InvitationStatus = "consumed" InvitationStatusRevoked InvitationStatus = "revoked" ) // SubordinateInvitation 主账号邀请记录(存 token 哈希) type SubordinateInvitation struct { ID string `gorm:"primaryKey;type:varchar(36)" json:"id" comment:"唯一标识"` ParentUserID string `gorm:"type:varchar(36);not null;index" json:"parent_user_id" comment:"主账号用户ID"` TokenHash string `gorm:"type:varchar(64);not null;uniqueIndex" json:"-" comment:"邀请码的SHA256(十六进制)"` ExpiresAt time.Time `gorm:"not null;index" json:"expires_at" comment:"过期时间"` Status InvitationStatus `gorm:"type:varchar(20);not null;default:pending" json:"status" comment:"状态"` ConsumedByUserID *string `gorm:"type:varchar(36);index" json:"consumed_by_user_id,omitempty" comment:"核销后的子账号用户ID"` ConsumedAt *time.Time `json:"consumed_at,omitempty" comment:"核销时间"` CreatedAt time.Time `gorm:"autoCreateTime" json:"created_at"` UpdatedAt time.Time `gorm:"autoUpdateTime" json:"updated_at"` DeletedAt gorm.DeletedAt `gorm:"index" json:"-"` } // TableName 表名 func (SubordinateInvitation) TableName() string { return "subordinate_invitations" } // BeforeCreate 生成ID func (i *SubordinateInvitation) BeforeCreate(tx *gorm.DB) error { if i.ID == "" { i.ID = uuid.New().String() } return nil }