This commit is contained in:
toom1996
2026-09-03 00:32:52 +08:00
parent 1fd9c48f58
commit ffe84efc4c
9 changed files with 143 additions and 39 deletions

View File

@ -2,18 +2,28 @@ package model
// Favorite 用户收藏(服务端持久化,按用户隔离)。
//
// 存储「对外编码 uid」(如 runway 的 r= 前缀串、street 的 s= 前缀串)而非数字主键,
// 这样无需 decode 即可与前端卡片的 it.id 直接对齐,取消收藏时也只靠该串匹配。
// title / cover / brand 为收藏时的快照,供个人中心直接渲染,不必回查原表。
// 存储「对外编码 uid」而非数字主键,这样无需 decode 即可与前端卡片的 id 直接对齐,
// 取消收藏时也只靠该串匹配。两种粒度共用一张表,由 kind 区分:
// - kind=gallery(默认):收藏整篇图集,target_uid 是图集 uid(r/s 前缀),
// title / cover / brand 为收藏时的快照,供个人中心直接渲染,不必回查原表;
// - kind=image:收藏单张图片,target_uid 是图片自身的编码 id(i/j 前缀),
// image_url 存这张图,parent_uid 指向所属图集(用于从收藏回跳原图集)。
//
// 两种粒度的 uid 前缀互不冲突(图集 r/s,图片 i/j),因此唯一键 (user_id, target_uid)
// 无需调整即可同时约束两种收藏。
type Favorite struct {
ID uint32 `gorm:"primaryKey;column:id" json:"id"`
CreatedAt uint32 `gorm:"column:created_at" json:"created_at"`
UserID uint32 `gorm:"column:user_id;index:idx_user;not null" json:"user_id"`
TargetType string `gorm:"column:target_type;size:16;not null" json:"target_type"` // runway | street
TargetType string `gorm:"column:target_type;size:16;not null" json:"target_type"` // runway | street | runway_image | snap_image
TargetUID string `gorm:"column:target_uid;size:64;not null;uniqueIndex:uniq_user_target" json:"target_uid"`
Title string `gorm:"column:title;size:255" json:"title"`
Cover string `gorm:"column:cover;size:512" json:"cover"`
Brand string `gorm:"column:brand;size:255" json:"brand"`
Kind string `gorm:"column:kind;size:16;not null;default:gallery" json:"kind"` // gallery | image
ImageURL string `gorm:"column:image_url;size:512" json:"image_url"` // kind=image 时:这一张图
ParentUID string `gorm:"column:parent_uid;size:64" json:"parent_uid"` // kind=image 时:所属图集 uid
}
// TableName 指定表名。