entity
例1
go
type InvitationCode struct {
BaseModel
Code string `gorm:"column:code;size:64;not null;uniqueIndex"`
// 类型:长期有效、指定时间、一次性
Type types.InvitationType `gorm:"column:type;type:varchar(20);not null;default:'one_time'"`
Status types.InvitationStatus `gorm:"column:status;type:varchar(20);not null;default:'active'"`
ExpiredAt time.Time `gorm:"column:expired_at;type:timestamp;default:null"`
UserGroupID uint `gorm:"column:user_group_id;not null;index"`
UserGroup UserGroup `gorm:"foreignKey:UserGroupID;references:ID"`
UsedByID *uint `gorm:"column:used_by_id;index"`
UsedBy User `gorm:"foreignKey:UsedByID;references:ID"`
}go
type UserGroup struct {
BaseModel
Name string `gorm:"column:name;size:64;not null;uniqueIndex"`
Description string `gorm:"column:description;size:255"`
Apps []App `gorm:"many2many:user_group_link_apps;joinForeignKey:UserGroupID;JoinReferences:AppID"`
}go
type User struct {
BaseModel
Account string `gorm:"column:account;size:64;not null;uniqueIndex"`
Email string `gorm:"column:email;size:255;not null;uniqueIndex"`
Phone string `gorm:"column:phone;size:255;not null;uniqueIndex"`
Nickname string `gorm:"column:nickname;size:255;not null"`
}go
type InvitationType string
const (
InvitationPermanent InvitationType = "permanent" // 长期有效
InvitationTimeLimited InvitationType = "time_limited" // 指定时间
InvitationOneTime InvitationType = "one_time" // 一次性
)
type InvitationStatus string
const (
InvitationActive InvitationStatus = "active"
InvitationUsed InvitationStatus = "used"
InvitationExpired InvitationStatus = "expired"
InvitationRevoked InvitationStatus = "revoked"
)UserGroupID 使用 uint,因为是确定的,必须有。
UsedByID 使用 *uint,因为 UserByID 可能为空。