/**
 * CMS分类数据模型
 * @Author: david.yan@qq.com
 * @Date: 2021-11-29 15:16:26
 * @LastEditors: david.yan@qq.com
 * @LastEditTime: 2021-11-30 17:40:50
 * @Description: 定义分类相关的数据结构和数据库映射，支持层级分类
 */
package models

import (
	"git.apinb.com/bsm-sdk/core/database"
	"git.apinb.com/bsm-sdk/core/types"
	"gorm.io/gorm"
)

// CmsCategory CMS分类数据模型
// 支持层级分类结构，每个分类可以有父分类和子分类
type CmsCategory struct {
	gorm.Model                // GORM基础模型（ID、CreatedAt、UpdatedAt、DeletedAt）
	types.Std_Identity        // 标准身份标识字段
	SiteIdentity       string `gorm:"column:site_identity;type:varchar(36);index;" json:"site_identity"`

	// 分类基本信息
	CategoryKey string `gorm:"column:category_key;type:varchar(255);not null;uniqueIndex;" json:"category_key"` // 分类唯一键值
	Title       string `gorm:"column:title;type:varchar(255);not null" json:"title"`                            // 分类标题
	CoverPath   string `gorm:"column:cover_path;type:varchar(255);default:''" json:"cover_path"`                // 分类封面图片路径
	Intro       string `gorm:"column:intro;type:text;default:''" json:"intro"`                                  // 分类介绍/描述

	// 层级关系
	ParentId uint          `gorm:"column:parent_id;index;" json:"parent_id"` // 父级分类ID，0表示顶级分类
	Children []CmsCategory `gorm:"foreignkey:ParentId;references:ID"`        // 子分类列表
}

// init 初始化函数，将模型注册到数据库迁移表
func init() {
	database.MigrateTables = append(database.MigrateTables, &CmsCategory{})
}

// TableName 指定数据库表名
// 返回: 数据库表名
func (c *CmsCategory) TableName() string {
	return "cms_category"
}
