package aeusadmin import ( "context" "fmt" "git.nobla.cn/golang/aeus-admin/internal/logic" "git.nobla.cn/golang/aeus/pkg/cache" "git.nobla.cn/golang/rest" "git.nobla.cn/golang/rest/types" "gorm.io/gorm" ) type Formatter struct { db *gorm.DB user *logic.User department *logic.Department role *logic.Role menu *logic.Menu } func (f *Formatter) FormatUser(ctx context.Context, value, model any, scm *types.Schema) any { if values, err := f.user.GetLabels(ctx); err == nil { for _, row := range values { if row.Value == value { return fmt.Sprintf("%s(%s)", row.Label, row.Value) } } } return value } func (f *Formatter) FormatDepartment(ctx context.Context, value, model any, scm *types.Schema) any { if values, err := f.department.GetLabels(ctx); err == nil { for _, row := range values { if row.Value == value { return row.Label } } } return value } func (f *Formatter) FormatRole(ctx context.Context, value, model any, scm *types.Schema) any { if values, err := f.role.GetLabels(ctx); err == nil { for _, row := range values { if row.Value == value { return row.Label } } } return value } func (f *Formatter) FormatMenu(ctx context.Context, value, model any, scm *types.Schema) any { if values, err := f.menu.GetLabels(ctx); err == nil { for _, row := range values { if row.Value == value { return row.Label } } } return value } func (f *Formatter) Register() { rest.DefaultFormatter.Register("user", f.FormatUser) rest.DefaultFormatter.Register("department", f.FormatDepartment) rest.DefaultFormatter.Register("role", f.FormatRole) rest.DefaultFormatter.Register("menu", f.FormatMenu) } func NewFormatter(db *gorm.DB, ch cache.Cache) *Formatter { return &Formatter{ db: db, user: logic.NewUserLogic(db, ch), department: logic.NewDepartmentLogic(db, ch), role: logic.NewRoleLogic(db, ch), menu: logic.NewMenuLogic(db, ch), } }