package system import ( "context" "time" ) type MenuRepository interface { Initialize(ctx context.Context) error Create(ctx context.Context, obj *Menu) (*Menu, error) Update(ctx context.Context, obj *Menu) error Get(ctx context.Context, id int32) (*Menu, error) GetByUrl(ctx context.Context, url string) (*Menu, error) All(ctx context.Context) ([]*Menu, error) RebuildParentPath(ctx context.Context) error } type Menu struct { ID int32 `json:"id" gorm:"primaryKey;autoIncrement;not null"` Name string `json:"name" gorm:"type:varchar(200);not null;uniqueIndex"` DisplayName string `json:"display_name" gorm:"type:varchar(200);not null;uniqueIndex"` Url string `json:"url" gorm:"type:varchar(200);not null;"` Type string `json:"type" gorm:"type:varchar(50);not null;"` ParentID int32 `json:"parent_id" gorm:"type:int;not null;"` ParentPath string `json:"parent_path" gorm:"type:varchar(500);not null;"` Avatar string `json:"avatar" gorm:"type:varchar(100);not null;"` Style string `json:"style" gorm:"type:varchar(100);not null;"` Visible bool `json:"visible" gorm:"type:boolean;not null;"` IsList bool `json:"is_list" gorm:"type:boolean;not null;"` Status int32 `json:"status" gorm:"type:int;not null;default:0;"` Sort int32 `json:"sort" gorm:"type:int;not null;default:0;"` CreatedAt time.Time `json:"created_at" gorm:"type:timestamptz;not null;default:'now()'"` UpdatedAt time.Time `json:"updated_at" gorm:"type:timestamptz;not null;default:'0001-01-01 00:00:00+8';"` } func (Menu) TableName() string { return "sys_menu" }