package admin import ( "context" adminv1 "service.xpcool.com/api/admin/v1" "service.xpcool.com/internal/model/dto" "service.xpcool.com/internal/service" ) // ProfileController exposes the logged-in admin's own profile endpoints // (login-only, no X-Permission required). Bind behind AdminAuthOnly. type ProfileController struct{} // NewProfile creates the profile controller. func NewProfile() *ProfileController { return &ProfileController{} } // Info returns the current administrator profile. func (c *ProfileController) Info(ctx context.Context, req *adminv1.InfoReq) (res *adminv1.InfoRes, err error) { info, err := service.AdminAuth().Info(ctx, adminID(ctx)) if err != nil { return nil, err } return &adminv1.InfoRes{AdminID: info.AdminID, Username: info.Username, Nickname: info.Nickname, Roles: info.Roles}, nil } // Codes returns the button-level permission codes of the current administrator. func (c *ProfileController) Codes(ctx context.Context, req *adminv1.CodesReq) (res *adminv1.CodesRes, err error) { codes, err := service.AdminAuth().Codes(ctx, adminID(ctx)) if err != nil { return nil, err } return &adminv1.CodesRes{Codes: codes}, nil } // Routes returns the current administrator's visible menu tree as vben routes. func (c *ProfileController) Routes(ctx context.Context, req *adminv1.MenuRoutesReq) (res *adminv1.MenuRoutesRes, err error) { routes, err := service.AdminMenu().Routes(ctx, adminID(ctx)) if err != nil { return nil, err } out := make([]*adminv1.RouteItem, 0, len(routes)) for _, r := range routes { out = append(out, toV1Route(r)) } return &adminv1.MenuRoutesRes{Routes: out}, nil } // toV1Route converts a dto route tree into the v1 API shape. func toV1Route(r *dto.RouteItem) *adminv1.RouteItem { item := &adminv1.RouteItem{ Name: r.Name, Path: r.Path, Component: r.Component, Meta: adminv1.RouteMeta{ Title: r.Meta.Title, Icon: r.Meta.Icon, Order: r.Meta.Order, Authority: r.Meta.Authority, HideInMenu: r.Meta.HideInMenu, }, } for _, c := range r.Children { item.Children = append(item.Children, toV1Route(c)) } return item }