79 lines
2.1 KiB
Go
79 lines
2.1 KiB
Go
package entities
|
||
|
||
import (
|
||
"time"
|
||
|
||
"github.com/google/uuid"
|
||
"gorm.io/gorm"
|
||
)
|
||
|
||
// Category 文章分类实体
|
||
// 用于对文章进行分类管理,支持层级结构和排序
|
||
type Category struct {
|
||
// 基础标识
|
||
ID string `gorm:"primaryKey;type:varchar(36)" json:"id" comment:"分类唯一标识"`
|
||
Name string `gorm:"type:varchar(100);not null" json:"name" comment:"分类名称"`
|
||
Description string `gorm:"type:text" json:"description" comment:"分类描述"`
|
||
SortOrder int `gorm:"default:0" json:"sort_order" comment:"排序"`
|
||
|
||
// 时间戳字段
|
||
CreatedAt time.Time `gorm:"autoCreateTime" json:"created_at" comment:"创建时间"`
|
||
UpdatedAt time.Time `gorm:"autoUpdateTime" json:"updated_at" comment:"更新时间"`
|
||
DeletedAt gorm.DeletedAt `gorm:"index" json:"-" comment:"软删除时间"`
|
||
|
||
// 关联关系
|
||
Articles []Article `gorm:"foreignKey:CategoryID" json:"articles,omitempty" comment:"分类下的文章"`
|
||
|
||
// 领域事件 (不持久化)
|
||
domainEvents []interface{} `gorm:"-" json:"-"`
|
||
}
|
||
|
||
// TableName 指定表名
|
||
func (Category) TableName() string {
|
||
return "article_categories"
|
||
}
|
||
|
||
// BeforeCreate GORM钩子:创建前自动生成UUID
|
||
func (c *Category) BeforeCreate(tx *gorm.DB) error {
|
||
if c.ID == "" {
|
||
c.ID = uuid.New().String()
|
||
}
|
||
return nil
|
||
}
|
||
|
||
// 实现 Entity 接口 - 提供统一的实体管理接口
|
||
// GetID 获取实体唯一标识
|
||
func (c *Category) GetID() string {
|
||
return c.ID
|
||
}
|
||
|
||
// GetCreatedAt 获取创建时间
|
||
func (c *Category) GetCreatedAt() time.Time {
|
||
return c.CreatedAt
|
||
}
|
||
|
||
// GetUpdatedAt 获取更新时间
|
||
func (c *Category) GetUpdatedAt() time.Time {
|
||
return c.UpdatedAt
|
||
}
|
||
|
||
// Validate 验证分类信息
|
||
// 检查分类必填字段是否完整,确保数据的有效性
|
||
func (c *Category) Validate() error {
|
||
if c.Name == "" {
|
||
return NewValidationError("分类名称不能为空")
|
||
}
|
||
|
||
// 验证名称长度
|
||
if len(c.Name) > 100 {
|
||
return NewValidationError("分类名称不能超过100个字符")
|
||
}
|
||
|
||
return nil
|
||
}
|
||
|
||
// SetSortOrder 设置排序
|
||
func (c *Category) SetSortOrder(order int) {
|
||
c.SortOrder = order
|
||
}
|