package models import "time" type TemplateConfig struct { ID uint `gorm:"primaryKey;comment:主键ID" json:"id"` // 旧版 MySQL 的 JSON 列不能带 DEFAULT,空值由业务层回落为 {} ConfigData string `gorm:"type:json;column:config_data;not null;comment:请柬配置JSON" json:"config_data"` UpdatedAt time.Time `gorm:"column:updated_at;comment:更新时间" json:"updated_at"` } func (TemplateConfig) TableName() string { return "template_configs" } type PosterConfig struct { ID uint `gorm:"primaryKey;comment:主键ID" json:"id"` ConfigData string `gorm:"type:json;column:config_data;not null;comment:海报配置JSON" json:"config_data"` UpdatedAt time.Time `gorm:"column:updated_at;comment:更新时间" json:"updated_at"` } func (PosterConfig) TableName() string { return "poster_configs" } type UploadConfig struct { ID uint `gorm:"primaryKey;comment:主键ID" json:"id"` Provider string `gorm:"column:provider;size:20;not null;default:local;comment:上传方式 local|oss" json:"provider"` AccessKeyID string `gorm:"column:access_key_id;size:255;not null;default:'';comment:OSS AccessKeyId" json:"accessKeyId"` AccessKeySecret string `gorm:"column:access_key_secret;type:text;comment:OSS AccessKeySecret" json:"-"` Bucket string `gorm:"column:bucket;size:255;not null;default:'';comment:OSS Bucket" json:"bucket"` Folder string `gorm:"column:folder;size:255;not null;default:'';comment:上传目录前缀" json:"folder"` Domain string `gorm:"column:domain;size:255;not null;default:'';comment:访问域名" json:"domain"` Region string `gorm:"column:region;size:100;not null;default:'';comment:OSS Region" json:"region"` Endpoint string `gorm:"column:endpoint;size:255;not null;default:'';comment:OSS Endpoint" json:"endpoint"` UpdatedAt time.Time `gorm:"column:updated_at;comment:更新时间" json:"updated_at"` } func (UploadConfig) TableName() string { return "upload_configs" } // MediaAsset 已上传图片资源(图库选图) type MediaAsset struct { ID uint `gorm:"primaryKey;comment:主键ID" json:"id"` // url 索引长度受 InnoDB utf8mb4 限制(≤768 字符),过长会导致建表失败 URL string `gorm:"column:url;size:768;not null;index;comment:访问地址" json:"url"` Name string `gorm:"column:name;size:255;not null;default:'';comment:原始文件名" json:"name"` Provider string `gorm:"column:provider;size:20;not null;default:local;comment:来源 local|oss" json:"provider"` CreatedAt time.Time `gorm:"column:created_at;not null;index;comment:上传时间" json:"created_at"` } func (MediaAsset) TableName() string { return "media_assets" } type Rsvp struct { ID uint `gorm:"primaryKey;comment:主键ID" json:"id"` Name string `gorm:"column:name;size:50;not null;default:'';comment:宾客姓名" json:"name"` GuestCount string `gorm:"column:guest_count;size:20;not null;default:1;comment:出席人数标识" json:"guest_count"` Wishes string `gorm:"column:wishes;type:text;comment:祝福语" json:"wishes"` CreatedAt time.Time `gorm:"column:created_at;not null;comment:提交时间" json:"created_at"` } func (Rsvp) TableName() string { return "rsvps" } type Danmaku struct { ID uint `gorm:"primaryKey;comment:主键ID" json:"id"` Name string `gorm:"column:name;size:50;not null;default:'';comment:发送者姓名" json:"name"` Content string `gorm:"column:content;type:text;not null;comment:祝福内容" json:"content"` Color string `gorm:"column:color;size:32;not null;default:champagne;comment:弹幕颜色key" json:"color"` Source string `gorm:"column:source;size:20;not null;default:danmaku;comment:来源 danmaku|rsvp" json:"source"` RsvpID *uint `gorm:"column:rsvp_id;comment:关联回执ID" json:"rsvp_id"` Status string `gorm:"column:status;size:20;not null;default:pending;index;comment:审核状态 pending|approved|rejected" json:"status"` CreatedAt time.Time `gorm:"column:created_at;not null;comment:创建时间" json:"created_at"` } func (Danmaku) TableName() string { return "danmakus" } type SiteLike struct { ID uint `gorm:"primaryKey;comment:主键ID" json:"id"` ClientID string `gorm:"column:client_id;size:64;not null;default:'';index;comment:客户端标识" json:"client_id"` CreatedAt time.Time `gorm:"column:created_at;not null;comment:点赞时间" json:"created_at"` } func (SiteLike) TableName() string { return "site_likes" } // SiteGift 站点礼物记录 type SiteGift struct { ID uint `gorm:"primaryKey;comment:主键ID" json:"id"` GiftType string `gorm:"column:gift_type;size:32;not null;index;comment:礼物类型" json:"gift_type"` Name string `gorm:"column:name;size:50;not null;default:'';comment:送礼人姓名" json:"name"` ClientID string `gorm:"column:client_id;size:64;not null;default:'';index;comment:客户端标识" json:"client_id"` Cost int64 `gorm:"column:cost;not null;default:0;comment:兑换消耗的点赞数" json:"cost"` CreatedAt time.Time `gorm:"column:created_at;not null;comment:送礼时间" json:"created_at"` } func (SiteGift) TableName() string { return "site_gifts" } // GiftConfig 礼物兑换配置(各礼物所需点赞数) type GiftConfig struct { ID uint `gorm:"primaryKey;comment:主键ID" json:"id"` CostsData string `gorm:"type:json;column:costs_data;not null;comment:礼物代价JSON map" json:"costs_data"` UpdatedAt time.Time `gorm:"column:updated_at;comment:更新时间" json:"updated_at"` } func (GiftConfig) TableName() string { return "gift_configs" } // AiModerationCache 缓存 AI 审核通过/失败结果 type AiModerationCache struct { ID uint `gorm:"primaryKey;comment:主键ID" json:"id"` Content string `gorm:"column:content;type:text;not null;comment:姓名+祝福原文" json:"content"` ContentHash string `gorm:"column:content_hash;size:64;not null;index:idx_ai_mod_type_hash,priority:2;comment:content的SHA256" json:"content_hash"` Type string `gorm:"column:type;size:20;not null;index:idx_ai_mod_type_hash,priority:1;comment:类型 danmaku|rsvp" json:"type"` Status string `gorm:"column:status;size:20;not null;default:rejected;comment:审核状态 approved|rejected" json:"status"` Reason string `gorm:"column:reason;size:255;not null;default:'';comment:拒绝原因" json:"reason"` CreatedAt time.Time `gorm:"column:created_at;not null;comment:创建时间" json:"created_at"` } func (AiModerationCache) TableName() string { return "ai_moderation_caches" } // CashGift 礼金记录 type CashGift struct { ID uint `gorm:"primaryKey;comment:主键ID" json:"id"` Name string `gorm:"column:name;size:50;not null;default:'';index;comment:宾客姓名" json:"name"` Amount int `gorm:"column:amount;not null;default:0;comment:礼金金额(元)" json:"amount"` Note string `gorm:"column:note;size:255;not null;default:'';comment:备注" json:"note"` CreatedAt time.Time `gorm:"column:created_at;not null;index;comment:登记时间" json:"created_at"` UpdatedAt time.Time `gorm:"column:updated_at;comment:更新时间" json:"updated_at"` } func (CashGift) TableName() string { return "cash_gifts" } // CashGiftConfig 礼金备注快捷选项等配置 type CashGiftConfig struct { ID uint `gorm:"primaryKey;comment:主键ID" json:"id"` NotesData string `gorm:"type:json;column:notes_data;not null;comment:备注快捷选项JSON数组" json:"notes_data"` ViewPass string `gorm:"column:view_pass;size:64;not null;default:'';comment:前台查看全部口令" json:"view_pass"` EntryPass string `gorm:"column:entry_pass;size:64;not null;default:'';comment:前台记账登记口令" json:"entry_pass"` UpdatedAt time.Time `gorm:"column:updated_at;comment:更新时间" json:"updated_at"` } func (CashGiftConfig) TableName() string { return "cash_gift_configs" } // HotelWelcomePoster 酒店迎宾海报(原图 + 文字图层配置) type HotelWelcomePoster struct { ID uint `gorm:"primaryKey;comment:主键ID" json:"id"` Name string `gorm:"column:name;size:100;not null;index;comment:图片名称" json:"name"` ImageURL string `gorm:"column:image_url;size:768;not null;comment:原图地址" json:"image_url"` Template string `gorm:"column:template;size:40;not null;default:banner-bottom;comment:易拉宝排版模板" json:"template"` ConfigData string `gorm:"type:json;column:config_data;not null;comment:文字图层等JSON" json:"config_data"` CreatedAt time.Time `gorm:"column:created_at;not null;index;comment:创建时间" json:"created_at"` UpdatedAt time.Time `gorm:"column:updated_at;comment:更新时间" json:"updated_at"` } func (HotelWelcomePoster) TableName() string { return "hotel_welcome_posters" }