Files
ai_dianshang/server/internal/model/comment.go
2025-11-17 14:11:46 +08:00

112 lines
4.1 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
import (
"encoding/json"
"time"
)
// Comment 商品评论
type Comment struct {
ID uint `json:"id" gorm:"primaryKey;autoIncrement"`
UserID uint `json:"user_id" gorm:"not null;index"`
ProductID uint `json:"product_id" gorm:"not null;index"`
OrderID uint `json:"order_id" gorm:"not null;index"`
OrderItemID uint `json:"order_item_id" gorm:"not null;index"`
Rating int `json:"rating" gorm:"not null;default:5"` // 评分 1-5星
Content string `json:"content" gorm:"type:text"` // 评论内容
Images string `json:"images" gorm:"type:text"` // 评论图片JSON格式存储
IsAnonymous bool `json:"is_anonymous" gorm:"default:false"` // 是否匿名评论
Status int `json:"status" gorm:"default:1"` // 状态1-正常2-隐藏3-删除
ReplyCount int `json:"reply_count" gorm:"default:0"` // 回复数量
LikeCount int `json:"like_count" gorm:"default:0"` // 点赞数量
CreatedAt time.Time `json:"created_at"`
UpdatedAt time.Time `json:"updated_at"`
// 关联数据
User User `json:"user,omitempty" gorm:"foreignKey:UserID"`
Product Product `json:"product,omitempty" gorm:"foreignKey:ProductID"`
Order Order `json:"order,omitempty" gorm:"foreignKey:OrderID"`
OrderItem OrderItem `json:"order_item,omitempty" gorm:"foreignKey:OrderItemID"`
Replies []CommentReply `json:"replies,omitempty" gorm:"foreignKey:CommentID"`
}
// MarshalJSON 自定义JSON序列化将Images字段从JSON字符串转换为数组
func (c Comment) MarshalJSON() ([]byte, error) {
type Alias Comment
// 解析Images字段
var images []string
if c.Images != "" {
if err := json.Unmarshal([]byte(c.Images), &images); err != nil {
// 如果解析失败,返回空数组
images = []string{}
}
} else {
images = []string{}
}
// 创建临时结构体用于序列化
return json.Marshal(&struct {
*Alias
Images []string `json:"images"`
}{
Alias: (*Alias)(&c),
Images: images,
})
}
// CommentReply 评论回复
type CommentReply struct {
ID uint `json:"id" gorm:"primaryKey;autoIncrement"`
CommentID uint `json:"comment_id" gorm:"not null;index"`
UserID uint `json:"user_id" gorm:"not null;index"`
Content string `json:"content" gorm:"type:text;not null"`
IsAdmin bool `json:"is_admin" gorm:"default:false"` // 是否管理员回复
Status int `json:"status" gorm:"default:1"` // 状态1-正常2-隐藏3-删除
CreatedAt time.Time `json:"created_at"`
UpdatedAt time.Time `json:"updated_at"`
// 关联数据
Comment Comment `json:"comment,omitempty" gorm:"foreignKey:CommentID"`
User User `json:"user,omitempty" gorm:"foreignKey:UserID"`
}
// CommentLike 评论点赞
type CommentLike struct {
ID uint `json:"id" gorm:"primaryKey;autoIncrement"`
CommentID uint `json:"comment_id" gorm:"not null;index"`
UserID uint `json:"user_id" gorm:"not null;index"`
CreatedAt time.Time `json:"created_at"`
// 关联数据
Comment Comment `json:"comment,omitempty" gorm:"foreignKey:CommentID"`
User User `json:"user,omitempty" gorm:"foreignKey:UserID"`
}
// TableName 指定表名
func (Comment) TableName() string {
return "ai_comments"
}
// TableName 指定表名
func (CommentReply) TableName() string {
return "ai_comment_replies"
}
// TableName 指定表名
func (CommentLike) TableName() string {
return "ai_comment_likes"
}
// CommentStats 评论统计
type CommentStats struct {
ProductID uint `json:"product_id"`
TotalCount int `json:"total_count"` // 总评论数
AverageRating float64 `json:"average_rating"` // 平均评分
Rating1Count int `json:"rating_1_count"` // 1星评论数
Rating2Count int `json:"rating_2_count"` // 2星评论数
Rating3Count int `json:"rating_3_count"` // 3星评论数
Rating4Count int `json:"rating_4_count"` // 4星评论数
Rating5Count int `json:"rating_5_count"` // 5星评论数
HasImagesCount int `json:"has_images_count"` // 带图评论数
}