package models import ( "database/sql/driver" "encoding/json" "fmt" "strings" "time" "github.com/rotisserie/eris" ) type Member2 struct { UserId string `json:"user_id"` // UserId 用户ID Identity uint `json:"identity"` // Identity 身份 } type MembersJson json.RawMessage func (j MembersJson) Value() (driver.Value, error) { if len(j) == 0 { return nil, nil } return json.RawMessage(j).MarshalJSON() } func (j *MembersJson) Scan(value any) error { bytes, ok := value.([]byte) if !ok { return eris.New(fmt.Sprint("Failed to unmarshal JSONB value:", value)) } (*j) = MembersJson(bytes) return nil } func (j *MembersJson) ToSlice() []Member2 { var ms []Member2 _ = json.Unmarshal(*j, &ms) return ms } func NewMembers(ms []Member2) MembersJson { j, _ := json.Marshal(ms) return j } type SessionGroup struct { ID string `gorm:"column:id;primary_key"` ChildId string `gorm:"column:child_id;NOT NULL"` // 孩子ID IsFamilyGroup *int `gorm:"column:is_family_group;default:1;NOT NULL"` // 是否是家庭群 1:默认(是)-1:否 Members MembersJson `gorm:"column:members"` // 成员信息 CreatedAt time.Time `gorm:"column:created_at;default:CURRENT_TIMESTAMP;NOT NULL"` UpdatedAt time.Time `gorm:"column:updated_at;default:CURRENT_TIMESTAMP;NOT NULL"` // 更新时间 } func (m *SessionGroup) TableName() string { return "tb_session_group" } func IsSessionGroup(id string) bool { return strings.Contains(id, "GROUP_") }