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 | |||
|  | } |