201 lines
7.7 KiB
Go
201 lines
7.7 KiB
Go
package model
|
||
|
||
import (
|
||
"time"
|
||
|
||
"spark-server/internal/module/moment/entity"
|
||
)
|
||
|
||
// Post maps table moment_posts.
|
||
type Post struct {
|
||
ID int64 `gorm:"column:id;primaryKey;comment:Snowflake 帖 id,Feed/相册游标"`
|
||
UserID int64 `gorm:"column:user_id;comment:作者 users.id"`
|
||
Kind int16 `gorm:"column:kind;comment:1纯文 2图 3视频"`
|
||
Text string `gorm:"column:text;comment:正文,可空;与媒体至少有一项"`
|
||
Content []byte `gorm:"column:content;type:blob;comment:图/视频 JSON 字节,不存媒体二进制"`
|
||
POILat float64 `gorm:"column:poi_lat;comment:地点纬度,无地点为 0"`
|
||
POILng float64 `gorm:"column:poi_lng;comment:地点经度,无地点为 0"`
|
||
POIName string `gorm:"column:poi_name;comment:地点名称"`
|
||
POIAddress string `gorm:"column:poi_address;comment:地点地址"`
|
||
Visibility int16 `gorm:"column:visibility;comment:0好友公开 1私密 2白名单 3黑名单"`
|
||
Status int16 `gorm:"column:status;comment:0正常 1已删"`
|
||
LikeCount int `gorm:"column:like_count;comment:点赞数,与 moment_likes 同事务维护"`
|
||
CommentCount int `gorm:"column:comment_count;comment:未删评论数,与 moment_comments 同事务维护"`
|
||
CreatedAt time.Time `gorm:"column:created_at;comment:发帖时间,visible_days 按此裁剪"`
|
||
}
|
||
|
||
func (Post) TableName() string { return "t_moment_posts" }
|
||
|
||
func (r *Post) Entity() *entity.Post {
|
||
if r == nil {
|
||
return nil
|
||
}
|
||
return &entity.Post{
|
||
ID: r.ID, UserID: r.UserID, Kind: entity.Kind(r.Kind), Text: r.Text, Content: r.Content,
|
||
POI: entity.POI{Lat: r.POILat, Lng: r.POILng, Name: r.POIName, Address: r.POIAddress},
|
||
Visibility: entity.Visibility(r.Visibility), Status: entity.Status(r.Status),
|
||
LikeCount: r.LikeCount, CommentCount: r.CommentCount, CreatedAtMS: r.CreatedAt.UnixMilli(),
|
||
}
|
||
}
|
||
|
||
func postFrom(p *entity.Post) *Post {
|
||
if p == nil {
|
||
return nil
|
||
}
|
||
row := &Post{
|
||
ID: p.ID, UserID: p.UserID, Kind: int16(p.Kind), Text: p.Text, Content: p.Content,
|
||
POILat: p.POI.Lat, POILng: p.POI.Lng, POIName: p.POI.Name, POIAddress: p.POI.Address,
|
||
Visibility: int16(p.Visibility), Status: int16(p.Status),
|
||
LikeCount: p.LikeCount, CommentCount: p.CommentCount,
|
||
}
|
||
if p.CreatedAtMS > 0 {
|
||
row.CreatedAt = time.UnixMilli(p.CreatedAtMS)
|
||
}
|
||
return row
|
||
}
|
||
|
||
// Audience maps table moment_audience.
|
||
type Audience struct {
|
||
ID int64 `gorm:"column:id;primaryKey;autoIncrement;comment:行 id,表内自增,仅内部用;业务唯一键是 (post_id, peer_id)"`
|
||
PostID int64 `gorm:"column:post_id;comment:帖 id"`
|
||
PeerID int64 `gorm:"column:peer_id;comment:白名单能看 / 黑名单不能看 的好友 uid"`
|
||
}
|
||
|
||
func (Audience) TableName() string { return "t_moment_audience" }
|
||
|
||
// Like maps table moment_likes.
|
||
type Like struct {
|
||
ID int64 `gorm:"column:id;primaryKey;autoIncrement;comment:行 id,表内自增,仅内部用;业务唯一键是 (post_id, user_id)"`
|
||
PostID int64 `gorm:"column:post_id;comment:帖 id"`
|
||
UserID int64 `gorm:"column:user_id;comment:点赞人"`
|
||
CreatedAt time.Time `gorm:"column:created_at;comment:点赞时间"`
|
||
}
|
||
|
||
func (Like) TableName() string { return "t_moment_likes" }
|
||
|
||
func (r *Like) Entity() *entity.Like {
|
||
if r == nil {
|
||
return nil
|
||
}
|
||
return &entity.Like{PostID: r.PostID, UserID: r.UserID, CreatedAtMS: r.CreatedAt.UnixMilli()}
|
||
}
|
||
|
||
// Comment maps table moment_comments.
|
||
type Comment struct {
|
||
ID int64 `gorm:"column:id;primaryKey;comment:Snowflake 评论 id"`
|
||
PostID int64 `gorm:"column:post_id;comment:帖 id"`
|
||
UserID int64 `gorm:"column:user_id;comment:评论人"`
|
||
ReplyToID int64 `gorm:"column:reply_to_id;comment:父评论 id,0 表示直接评帖"`
|
||
ReplyToUID int64 `gorm:"column:reply_to_uid;comment:被回复用户,0 表示直接评帖"`
|
||
Text string `gorm:"column:text;comment:评论文本"`
|
||
Status int16 `gorm:"column:status;comment:0正常 1已删"`
|
||
CreatedAt time.Time `gorm:"column:created_at;comment:评论时间"`
|
||
}
|
||
|
||
func (Comment) TableName() string { return "t_moment_comments" }
|
||
|
||
func (r *Comment) Entity() *entity.Comment {
|
||
if r == nil {
|
||
return nil
|
||
}
|
||
return &entity.Comment{
|
||
ID: r.ID, PostID: r.PostID, UserID: r.UserID, ReplyToID: r.ReplyToID, ReplyToUID: r.ReplyToUID,
|
||
Text: r.Text, Status: entity.Status(r.Status), CreatedAtMS: r.CreatedAt.UnixMilli(),
|
||
}
|
||
}
|
||
|
||
func commentFrom(c *entity.Comment) *Comment {
|
||
if c == nil {
|
||
return nil
|
||
}
|
||
row := &Comment{
|
||
ID: c.ID, PostID: c.PostID, UserID: c.UserID, ReplyToID: c.ReplyToID, ReplyToUID: c.ReplyToUID,
|
||
Text: c.Text, Status: int16(c.Status),
|
||
}
|
||
if c.CreatedAtMS > 0 {
|
||
row.CreatedAt = time.UnixMilli(c.CreatedAtMS)
|
||
}
|
||
return row
|
||
}
|
||
|
||
// Notice maps table moment_notices.
|
||
type Notice struct {
|
||
ID int64 `gorm:"column:id;primaryKey;comment:Snowflake 通知 id,列表游标"`
|
||
ToUserID int64 `gorm:"column:to_user_id;comment:接收人"`
|
||
FromUserID int64 `gorm:"column:from_user_id;comment:动作发起人"`
|
||
Kind int16 `gorm:"column:kind;comment:1赞 2评论 3回复"`
|
||
PostID int64 `gorm:"column:post_id;comment:帖 id"`
|
||
CommentID int64 `gorm:"column:comment_id;comment:评论 id,赞为 0"`
|
||
ReadAt *time.Time `gorm:"column:read_at;comment:已读时间,空表示未读"`
|
||
CreatedAt time.Time `gorm:"column:created_at;comment:通知时间"`
|
||
}
|
||
|
||
func (Notice) TableName() string { return "t_moment_notices" }
|
||
|
||
func (r *Notice) Entity() *entity.Notice {
|
||
if r == nil {
|
||
return nil
|
||
}
|
||
n := &entity.Notice{
|
||
ID: r.ID, ToUserID: r.ToUserID, FromUserID: r.FromUserID, Kind: entity.NoticeKind(r.Kind),
|
||
PostID: r.PostID, CommentID: r.CommentID, CreatedAtMS: r.CreatedAt.UnixMilli(),
|
||
}
|
||
if r.ReadAt != nil {
|
||
n.ReadAtMS = r.ReadAt.UnixMilli()
|
||
}
|
||
return n
|
||
}
|
||
|
||
// Setting maps table moment_settings.
|
||
type Setting struct {
|
||
ID int64 `gorm:"column:id;primaryKey;autoIncrement;comment:行 id,表内自增,仅内部用;业务唯一键是 user_id"`
|
||
UserID int64 `gorm:"column:user_id;comment:用户 users.id"`
|
||
CoverKey string `gorm:"column:cover_key;comment:封面 object_key,空表示未设"`
|
||
VisibleDays int16 `gorm:"column:visible_days;comment:允许朋友查看范围:0全部 3/30/180 天"`
|
||
LastReadPostID int64 `gorm:"column:last_read_post_id;comment:发现页红点水位,只增不减"`
|
||
UpdatedAt time.Time `gorm:"column:updated_at;comment:最近更新时间"`
|
||
}
|
||
|
||
func (Setting) TableName() string { return "t_moment_settings" }
|
||
|
||
func (r *Setting) Entity() *entity.Settings {
|
||
if r == nil {
|
||
return nil
|
||
}
|
||
return &entity.Settings{
|
||
UserID: r.UserID, CoverKey: r.CoverKey, VisibleDays: entity.VisibleDays(r.VisibleDays),
|
||
LastReadPostID: r.LastReadPostID, UpdatedAtMS: r.UpdatedAt.UnixMilli(),
|
||
}
|
||
}
|
||
|
||
func settingFrom(s *entity.Settings) *Setting {
|
||
if s == nil {
|
||
return nil
|
||
}
|
||
row := &Setting{
|
||
UserID: s.UserID, CoverKey: s.CoverKey, VisibleDays: int16(s.VisibleDays), LastReadPostID: s.LastReadPostID,
|
||
}
|
||
if s.UpdatedAtMS > 0 {
|
||
row.UpdatedAt = time.UnixMilli(s.UpdatedAtMS)
|
||
}
|
||
return row
|
||
}
|
||
|
||
// Hide maps table moment_hides.
|
||
type Hide struct {
|
||
ID int64 `gorm:"column:id;primaryKey;autoIncrement;comment:行 id,表内自增,仅内部用;业务唯一键是 (user_id, peer_id)"`
|
||
UserID int64 `gorm:"column:user_id;comment:设置方"`
|
||
PeerID int64 `gorm:"column:peer_id;comment:对方"`
|
||
HideHim bool `gorm:"column:hide_him;comment:1=不看他(Feed 去掉对方)"`
|
||
HideMe bool `gorm:"column:hide_me;comment:1=不让他看"`
|
||
}
|
||
|
||
func (Hide) TableName() string { return "t_moment_hides" }
|
||
|
||
func (r *Hide) Entity() *entity.Hide {
|
||
if r == nil {
|
||
return nil
|
||
}
|
||
return &entity.Hide{UserID: r.UserID, PeerID: r.PeerID, HideHim: r.HideHim, HideMe: r.HideMe}
|
||
}
|