81 lines
4.0 KiB
Go
81 lines
4.0 KiB
Go
|
|
/**
|
|||
|
|
* CMS文章数据模型
|
|||
|
|
* @Author: david.yan@qq.com
|
|||
|
|
* @Date: 2021-11-29 15:16:26
|
|||
|
|
* @LastEditors: david.yan@qq.com
|
|||
|
|
* @LastEditTime: 2021-12-08 15:59:00
|
|||
|
|
* @Description: 定义文章相关的数据结构和数据库映射
|
|||
|
|
*/
|
|||
|
|
package models
|
|||
|
|
|
|||
|
|
import (
|
|||
|
|
"time"
|
|||
|
|
|
|||
|
|
"git.apinb.com/bsm-sdk/core/database"
|
|||
|
|
"git.apinb.com/bsm-sdk/core/types"
|
|||
|
|
)
|
|||
|
|
|
|||
|
|
// CmsPost CMS文章数据模型
|
|||
|
|
// 包含文章的基本信息、统计数据、关联数据等
|
|||
|
|
type CmsPost struct {
|
|||
|
|
types.Std_IICUDS // 标准IICUDS字段(Identity、CreatedAt、UpdatedAt等)
|
|||
|
|
types.Std_Owner // 标准所有者字段
|
|||
|
|
SiteIdentity string `gorm:"column:site_identity;type:varchar(36);index;" json:"site_identity"`
|
|||
|
|
|
|||
|
|
// 基本信息
|
|||
|
|
Types int32 `gorm:"column:types;type:varchar(255);default:'';" json:"types"` // 文章类型
|
|||
|
|
Title string `gorm:"column:title;type:varchar(255);default:'';" json:"title"` // 文章标题
|
|||
|
|
Hash string `gorm:"column:hash;type:varchar(255);uniqueIndex;" json:"hash"` // 文章唯一键值,用于URL等
|
|||
|
|
Description string `gorm:"column:description;type:varchar(255);default:'';" json:"description"` // 文章描述/摘要
|
|||
|
|
CoverPath string `gorm:"column:cover_path;type:varchar(255);default:'';" json:"cover_path"` // 封面图片路径
|
|||
|
|
Content string `gorm:"column:content;type:text;default:'';" json:"content"` // 文章正文内容
|
|||
|
|
Lang string `gorm:"type:varchar(20);"` // 语言
|
|||
|
|
TargetUrl string `gorm:"column:target_url;type:varchar(255);default:''" json:"target_url"` // 目标链接
|
|||
|
|
Rights string `gorm:"column:rights;type:varchar(255);default:''" json:"rights"` // 权限
|
|||
|
|
|
|||
|
|
// 作者信息
|
|||
|
|
Author string `gorm:"column:author;type:varchar(255);default:''" json:"author"` // 作者姓名
|
|||
|
|
AuthorIdentity string `gorm:"column:author_identity;type:varchar(36);default:'';" json:"author_identity"` // 作者唯一标识
|
|||
|
|
|
|||
|
|
// 来源方
|
|||
|
|
SourceOrigin string `gorm:"type:varchar(255);"` // 简称
|
|||
|
|
SourceUrl string `gorm:"column:source_url;type:varchar(255);default:''" json:"source_url"` // 源链接
|
|||
|
|
|
|||
|
|
// 统计数据
|
|||
|
|
Hits int64 `gorm:"column:hits;default:0" json:"hits"` // 点击量/浏览量
|
|||
|
|
LikeHits int64 `gorm:"column:like_hits;default:0" json:"like_hits"` // 点赞数量
|
|||
|
|
UnlikeHits int64 `gorm:"column:unlike_hits;default:0" json:"unlike_hits"` // 踩赞数量
|
|||
|
|
CommentHits int64 `gorm:"column:comment_hits;default:0" json:"comment_hits"` // 评论数量
|
|||
|
|
|
|||
|
|
// 其他属性
|
|||
|
|
HasAccessory bool `gorm:"column:has_accessory;type:bool;default:false" json:"has_accessory"` // 是否有附件
|
|||
|
|
|
|||
|
|
// 关联数据标识(不存储到数据库,仅用于数据传输)
|
|||
|
|
CategoryIdentityArray []string `gorm:"-" json:"category_identity_array"` // 关联的分类标识列表
|
|||
|
|
TagsIdentityArray []string `gorm:"-" json:"tags_identity_array"` // 关联的标签标识列表
|
|||
|
|
AccessoryIdentityArray []string `gorm:"-" json:"accessory_identity_array"` // 关联的附件标识列表
|
|||
|
|
|
|||
|
|
// 关联数据对象(通过外键关联)
|
|||
|
|
Accessories []*CmsAccessory `gorm:"foreignkey:PostId;references:ID"` // 文章附件列表
|
|||
|
|
Categories []*CmsRelateCategory `gorm:"foreignkey:PostIdentity;references:Identity"` // 文章分类关联列表
|
|||
|
|
Tags []*CmsRelateTags `gorm:"foreignkey:PostIdentity;references:Identity"` // 文章标签关联列表
|
|||
|
|
|
|||
|
|
ExtendUrl string // 扩展:URL
|
|||
|
|
ExtendData string // 扩展:数据
|
|||
|
|
ExtendImg string // 扩展:图片
|
|||
|
|
ExtendDesc string // 扩展:描述
|
|||
|
|
|
|||
|
|
Published time.Time // 事件发生时间
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// init 初始化函数,将模型注册到数据库迁移表
|
|||
|
|
func init() {
|
|||
|
|
database.MigrateTables = append(database.MigrateTables, &CmsPost{})
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// TableName 指定数据库表名
|
|||
|
|
// 返回: 数据库表名
|
|||
|
|
func (table *CmsPost) TableName() string {
|
|||
|
|
return "cms_post"
|
|||
|
|
}
|