package model import ( "encoding/json" ) // Category represents a help center category. // Reference: Chatwoot Category model + P2B M9 spec type Category struct { Base AccountID uint `gorm:"index;not null" json:"account_id"` PortalID uint `gorm:"index;not null" json:"portal_id"` Name string `gorm:"size:255;not null" json:"name"` Slug string `gorm:"size:255;not null;index" json:"slug"` Description string `gorm:"type:text" json:"description"` Icon string `gorm:"size:255;default:''" json:"icon"` Position int `gorm:"default:0" json:"position"` Locale string `gorm:"size:10;default:'en';not null" json:"locale"` ParentID *uint `gorm:"index" json:"parent_id,omitempty"` AssociatedCategoryID *uint `gorm:"index" json:"associated_category_id,omitempty"` // cross-locale link CustomAttributes json.RawMessage `gorm:"type:jsonb;serializer:json" json:"custom_attributes"` Portal Portal `gorm:"foreignKey:PortalID" json:"portal,omitempty"` Parent *Category `gorm:"foreignKey:ParentID" json:"parent,omitempty"` AssociatedCategory *Category `gorm:"foreignKey:AssociatedCategoryID" json:"associated_category,omitempty"` Articles []Article `gorm:"foreignKey:CategoryID" json:"articles,omitempty"` Folders []Folder `gorm:"foreignKey:CategoryID" json:"folders,omitempty"` RelatedCategories []RelatedCategory `gorm:"foreignKey:CategoryID" json:"related_categories,omitempty"` } func (Category) TableName() string { return "categories" }