package models import ( "time" "gorm.io/gorm" ) // Category 分类模型 type Category struct { ID uint `gorm:"primaryKey" json:"id"` Name string `gorm:"size:100;not null" json:"name"` Description string `gorm:"type:text" json:"description"` ParentID *uint `json:"parent_id"` Parent *Category `gorm:"foreignKey:ParentID" json:"parent,omitempty"` Children []Category `gorm:"foreignKey:ParentID" json:"children,omitempty"` Color string `gorm:"size:7;default:#3b82f6" json:"color"` CoverImage string `gorm:"size:500" json:"cover_image"` Sort int `gorm:"default:0" json:"sort"` IsActive bool `gorm:"default:true" json:"is_active"` PhotoCount int `gorm:"-" json:"photo_count"` CreatedAt time.Time `json:"created_at"` UpdatedAt time.Time `json:"updated_at"` DeletedAt gorm.DeletedAt `gorm:"index" json:"-"` } // TableName 返回分类表名 func (Category) TableName() string { return "categories" } // CreateCategoryRequest 创建分类请求 type CreateCategoryRequest struct { Name string `json:"name" binding:"required,max=100"` Description string `json:"description"` ParentID *uint `json:"parent_id"` Color string `json:"color" binding:"omitempty,hexcolor"` CoverImage string `json:"cover_image" binding:"omitempty,max=500"` Sort int `json:"sort"` } // UpdateCategoryRequest 更新分类请求 type UpdateCategoryRequest struct { Name *string `json:"name" binding:"omitempty,max=100"` Description *string `json:"description"` ParentID *uint `json:"parent_id"` Color *string `json:"color" binding:"omitempty,hexcolor"` CoverImage *string `json:"cover_image" binding:"omitempty,max=500"` Sort *int `json:"sort"` IsActive *bool `json:"is_active"` } // CategoryListParams 分类列表查询参数 type CategoryListParams struct { IncludeStats bool `form:"include_stats"` IncludeTree bool `form:"include_tree"` ParentID uint `form:"parent_id"` IsActive bool `form:"is_active"` } // CategoryResponse 分类响应 type CategoryResponse struct { *Category } // CategoryTreeNode 分类树节点 type CategoryTreeNode struct { ID uint `json:"id"` Name string `json:"name"` PhotoCount int `json:"photo_count"` Children []CategoryTreeNode `json:"children"` } // CategoryListResponse 分类列表响应 type CategoryListResponse struct { Categories []CategoryResponse `json:"categories"` Tree []CategoryTreeNode `json:"tree,omitempty"` Stats *CategoryStats `json:"stats,omitempty"` } // CategoryStats 分类统计 type CategoryStats struct { TotalCategories int `json:"total_categories"` MaxLevel int `json:"max_level"` FeaturedCount int `json:"featured_count"` }