package model import ( "strconv" "time" "carrot_bbs/internal/pkg/utils" "gorm.io/gorm" ) type GroupJoinRequestType string const ( GroupJoinRequestTypeInvite GroupJoinRequestType = "invite" GroupJoinRequestTypeJoinApply GroupJoinRequestType = "join_apply" ) type GroupJoinRequestStatus string const ( GroupJoinRequestStatusPending GroupJoinRequestStatus = "pending" GroupJoinRequestStatusAccepted GroupJoinRequestStatus = "accepted" GroupJoinRequestStatusRejected GroupJoinRequestStatus = "rejected" GroupJoinRequestStatusCancelled GroupJoinRequestStatus = "cancelled" GroupJoinRequestStatusExpired GroupJoinRequestStatus = "expired" ) // GroupJoinRequest 统一保存邀请入群和主动加群申请 type GroupJoinRequest struct { ID string `gorm:"primaryKey;size:20" json:"id"` Flag string `gorm:"size:64;uniqueIndex;not null" json:"flag"` GroupID string `gorm:"not null;index;index:idx_gjr_group_target_type_status_created,priority:1" json:"group_id"` InitiatorID string `gorm:"type:varchar(36);not null;index" json:"initiator_id"` TargetUserID string `gorm:"type:varchar(36);not null;index;index:idx_gjr_group_target_type_status_created,priority:2" json:"target_user_id"` RequestType GroupJoinRequestType `gorm:"size:20;not null;index;index:idx_gjr_group_target_type_status_created,priority:3" json:"request_type"` Status GroupJoinRequestStatus `gorm:"size:20;not null;index;index:idx_gjr_group_target_type_status_created,priority:4" json:"status"` Reason string `gorm:"size:500" json:"reason"` ReviewerID string `gorm:"type:varchar(36);index" json:"reviewer_id"` ReviewedAt *time.Time `json:"reviewed_at"` ExpireAt *time.Time `json:"expire_at"` CreatedAt time.Time `gorm:"index:idx_gjr_group_target_type_status_created,priority:5,sort:desc" json:"created_at"` UpdatedAt time.Time `json:"updated_at"` } func (r *GroupJoinRequest) BeforeCreate(tx *gorm.DB) error { if r.ID == "" { id, err := utils.GetSnowflake().GenerateID() if err != nil { return err } r.ID = strconv.FormatInt(id, 10) } return nil } func (GroupJoinRequest) TableName() string { return "group_join_requests" }