Skip to content

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 可能为空。