This commit is contained in:
toom1996
2026-09-16 00:56:15 +08:00
parent 5e4803b97f
commit 7dd3fda73c
10 changed files with 184 additions and 54 deletions

View File

@ -4,13 +4,15 @@ package model
//
// 存储「对外编码 uid」而非数字主键,这样无需 decode 即可与前端卡片的 id 直接对齐,
// 取消收藏时也只靠该串匹配。两种粒度共用一张表,由 kind 区分:
// - kind=gallery(默认):收藏整篇图集,target_uid 是图集 uid(r/s 前缀),
// - kind=gallery(默认):收藏整篇图集,target_uid 是图集 uid(类型由 TargetType 决定),
// title / cover / brand 为收藏时的快照,供个人中心直接渲染,不必回查原表;
// - kind=image:收藏单张图片,target_uid 是图片自身的编码 id(i/j 前缀),
// image_url 存这张图,parent_uid 指向所属图集(用于从收藏回跳原图集)。
// - kind=image:收藏单张图片,target_uid 是图片自身的编码 id,parent_uid 指向所属图集
// (用于从收藏回跳原图集)。
//
// 两种粒度的 uid 前缀互不冲突(图集 r/s,图片 i/j),因此唯一键 (user_id, target_uid)
// 无需调整即可同时约束两种收藏。
// 编码:新写入用 hashid.EncodeWithType(类型进密码、无前缀);历史行可能仍是带 r/s/i/j 前缀的
// 旧 EncodeTyped 串,后端详情 handler 有向后兼容回退,故旧 uid 仍可正常解析。类型以 TargetType
// 列为准(runway | street | runway_image | snap_image),不再靠串前缀区分。
// 两种粒度的 uid 因类型进密码、串值不同互不冲突,唯一键 (user_id, target_uid) 无需调整。
type Favorite struct {
ID uint32 `gorm:"primaryKey;column:id" json:"id"`
CreatedAt uint32 `gorm:"column:created_at" json:"created_at"`

View File

@ -4,8 +4,8 @@ package model
//
// 2026-09-02 收敛为「文章级」记录:点开某篇走秀/街拍详情(/item/xxx)时记一条,
// 进入列表页不再记。仅存三要素:user_id + target_uid + viewed_at。
// target_uid 为带类型前缀的对外编码串(runway r=xxx / street s=xxx,见 hashid.EncodeTyped),
// 前缀本身携带类型,无需 kind / target_type 列;title/cover/brand 快照也已移除,
// target_uid 为对外编码串(类型进密码、无前缀,见 hashid.EncodeWithType);类型由账户页
// 存储的 kind / target_type 或回查详情接口决定,串本身不含类型字母。title/cover/brand 快照已移除,
// 账户页展示时按 target_uid 回查公开详情接口(保持表最简、数据新鲜)。
// 唯一键 (user_id, target_uid) 保证同一篇文章反复打开只刷新 viewed_at、不新增行。
type History struct {