Files
backend_v2/internal/model/favorite.go
toom1996 ffe84efc4c update
2026-09-03 00:32:52 +08:00

31 lines
1.9 KiB
Go
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package model
// Favorite 用户收藏(服务端持久化,按用户隔离)。
//
// 存储「对外编码 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 | 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 指定表名。
func (Favorite) TableName() string { return "favorites" }