syntax = "v1"

info (
	title:   "菜单中心服务"
	desc:    "菜单中心服务"
	version: "v1"
)

@server (
	prefix: api/v1/admin/menu
	group:  admin_menu
	middleware: AdminAuthInterceptor
)
service main {
	@doc "获取菜单列表"
	@handler GetMenuList
	get /list (GetMenuListReq) returns ([]MenuListItem)

	@doc "获取菜单详情"
	@handler GetMenuDetail
	get /detail/:id (GetMenuDetailReq) returns (GetMenuDetailResp)

	@doc "创建菜单"
	@handler CreateMenu
	post /create (CreateMenuReq) returns (CreateMenuResp)

	@doc "更新菜单"
	@handler UpdateMenu
	put /update/:id (UpdateMenuReq) returns (UpdateMenuResp)

	@doc "删除菜单"
	@handler DeleteMenu
	delete /delete/:id (DeleteMenuReq) returns (DeleteMenuResp)

	@doc "获取所有菜单(树形结构)"
	@handler GetMenuAll
	get /all (GetMenuAllReq) returns ([]GetMenuAllResp)
}

type (
	// 列表请求
	GetMenuListReq {
		Name   string `form:"name,optional"`              // 菜单名称
		Path   string `form:"path,optional"`              // 路由路径
		Status int64  `form:"status,optional,default=-1"` // 状态：0-禁用，1-启用
		Type   string `form:"type,optional"`              // 类型
	}

	// 列表项
	MenuListItem {
		Id         int64                  `json:"id"`         // 菜单ID
		Pid        int64                  `json:"pid"`        // 父菜单ID
		Name       string                 `json:"name"`       // 路由名称
		Path       string                 `json:"path"`       // 路由路径
		Component  string                 `json:"component"`  // 组件路径
		Redirect   string                 `json:"redirect"`   // 重定向路径
		Meta       map[string]interface{} `json:"meta"`       // 路由元数据
		Status     int64                  `json:"status"`     // 状态：0-禁用，1-启用
		Type       string                 `json:"type"`       // 类型
		Sort       int64                  `json:"sort"`       // 排序
		CreateTime string                 `json:"createTime"` // 创建时间
		Children   []MenuListItem         `json:"children"`   // 子菜单
	}

	// 详情请求
	GetMenuDetailReq {
		Id int64 `path:"id"` // 菜单ID
	}

	// 详情响应
	GetMenuDetailResp {
		Id         int64                  `json:"id"`         // 菜单ID
		Pid        int64                  `json:"pid"`        // 父菜单ID
		Name       string                 `json:"name"`       // 路由名称
		Path       string                 `json:"path"`       // 路由路径
		Component  string                 `json:"component"`  // 组件路径
		Redirect   string                 `json:"redirect"`   // 重定向路径
		Meta       map[string]interface{} `json:"meta"`       // 路由元数据
		Status     int64                  `json:"status"`     // 状态：0-禁用，1-启用
		Type       string                 `json:"type"`       // 类型
		Sort       int64                  `json:"sort"`       // 排序
		CreateTime string                 `json:"createTime"` // 创建时间
		UpdateTime string                 `json:"updateTime"` // 更新时间
	}

	// 创建请求
	CreateMenuReq {
		Pid       int64                  `json:"pid,optional"`              // 父菜单ID
		Name      string                 `json:"name"`                      // 路由名称
		Path      string                 `json:"path,optional"`             // 路由路径
		Component string                 `json:"component,optional"`        // 组件路径
		Redirect  string                 `json:"redirect,optional"`         // 重定向路径
		Meta      map[string]interface{} `json:"meta"`                      // 路由元数据
		Status    int64                  `json:"status,optional,default=1"` // 状态：0-禁用，1-启用
		Type      string                 `json:"type"`                      // 类型
		Sort      int64                  `json:"sort,optional"`             // 排序
	}

	// 创建响应
	CreateMenuResp {
		Id int64 `json:"id"` // 菜单ID
	}

	// 更新请求
	UpdateMenuReq {
		Id        int64                  `path:"id"`                 // 菜单ID
		Pid       int64                  `json:"pid,optional"`       // 父菜单ID
		Name      string                 `json:"name"`               // 路由名称
		Path      string                 `json:"path,optional"`      // 路由路径
		Component string                 `json:"component,optional"` // 组件路径
		Redirect  string                 `json:"redirect,optional"`  // 重定向路径
		Meta      map[string]interface{} `json:"meta"`               // 路由元数据
		Status    int64                  `json:"status,optional"`    // 状态：0-禁用，1-启用
		Type      string                 `json:"type"`               // 类型
		Sort      int64                  `json:"sort,optional"`      // 排序
	}

	// 更新响应
	UpdateMenuResp {
		Success bool `json:"success"` // 是否成功
	}

	// 删除请求
	DeleteMenuReq {
		Id int64 `path:"id"` // 菜单ID
	}

	// 删除响应
	DeleteMenuResp {
		Success bool `json:"success"` // 是否成功
	}

	// 获取所有菜单请求
	GetMenuAllReq {
	}

	// 获取所有菜单响应
	GetMenuAllResp {
		Name      string                 `json:"name"`
		Path      string                 `json:"path"`
		Redirect  string                 `json:"redirect,omitempty"`
		Component string                 `json:"component,omitempty"`
		Sort      int64                  `json:"sort"`
		Meta      map[string]interface{} `json:"meta"`
		Children  []GetMenuAllResp       `json:"children"`
	}
)