31 lines
2.5 KiB
Go
31 lines
2.5 KiB
Go
// Package model 提供 meeting 模块的数据库模型
|
||
package model
|
||
|
||
import "time"
|
||
|
||
// MeetingRoom 会议房间模型,对应 meeting_rooms 表
|
||
// 记录会议的创建信息、主持人、容量、状态与生命周期时间点
|
||
// 对外使用 RoomCode(XXX-XXX-XXX)寻址,内部使用 ID(主键)寻址
|
||
type MeetingRoom struct {
|
||
ID int64 `json:"id" gorm:"primaryKey;autoIncrement"` // 会议房间唯一标识
|
||
RoomCode string `json:"room_code" gorm:"size:20;not null;uniqueIndex"` // 用户可见的会议号 XXX-XXX-XXX,全局唯一
|
||
Title string `json:"title" gorm:"size:200;not null"` // 会议标题
|
||
HostID int64 `json:"host_id" gorm:"not null;index:idx_meeting_rooms_host_status,priority:1"` // 主持人用户 ID
|
||
Type int `json:"type" gorm:"not null;default:1"` // 会议类型:1=即时,2=预约
|
||
PasswordHash *string `json:"-" gorm:"size:255"` // 入会密码 bcrypt 哈希,NULL 表示无密码;JSON 始终剥离
|
||
MaxMembers int `json:"max_members" gorm:"not null;default:50"` // 房间最大成员数
|
||
Status int `json:"status" gorm:"not null;default:0;index:idx_meeting_rooms_host_status,priority:2"` // 状态:0=未开始,1=进行中,2=已结束
|
||
ScheduledAt *time.Time `json:"scheduled_at" gorm:"type:timestamp(0)"` // 预约开始时间,即时会议为 NULL
|
||
StartedAt *time.Time `json:"started_at" gorm:"type:timestamp(0)"` // 实际开始时间
|
||
EndedAt *time.Time `json:"ended_at" gorm:"type:timestamp(0)"` // 实际结束时间
|
||
EndedReason *string `json:"ended_reason" gorm:"size:20"` // 结束原因:host_ended / empty_ttl / admin_force / system_error
|
||
Settings string `json:"settings" gorm:"type:jsonb;not null;default:'{}'"` // JSON 字符串,保存房间级开关
|
||
CreatedAt time.Time `json:"created_at" gorm:"not null;autoCreateTime;type:timestamp(0);index:idx_meeting_rooms_host_status,priority:3,sort:desc"` // 创建时间
|
||
UpdatedAt time.Time `json:"updated_at" gorm:"not null;autoUpdateTime;type:timestamp(0)"` // 更新时间
|
||
}
|
||
|
||
// TableName 指定数据库表名
|
||
func (MeetingRoom) TableName() string {
|
||
return "meeting_rooms"
|
||
}
|