package logic import ( "context" "fmt" "git.nobla.cn/golang/aeus-admin/models" "git.nobla.cn/golang/aeus-admin/pkg/dbcache" "git.nobla.cn/golang/aeus/pkg/cache" "git.nobla.cn/golang/rest" "git.nobla.cn/golang/rest/types" "gorm.io/gorm" ) type Menu struct { db *gorm.DB cache cache.Cache sqlDependency *dbcache.SqlDependency } func (u *Menu) GetMenus(ctx context.Context) (values []*models.Menu, err error) { return dbcache.TryCache(ctx, "menus", func(tx *gorm.DB) ([]*models.Menu, error) { var items []*models.Menu err = tx.Order("`position`,`id` ASC").Find(&items).Error return items, err }, dbcache.WithDB(u.db), dbcache.WithCache(u.cache), dbcache.WithDependency(u.sqlDependency), ) } func (u *Menu) GetLabels(ctx context.Context) (values []*types.TypeValue[string], err error) { return dbcache.TryCache(ctx, fmt.Sprintf("menu:labels"), func(tx *gorm.DB) ([]*types.TypeValue[string], error) { return rest.ModelTypes[string](ctx, tx, &models.Menu{}, "", "label", "name") }, dbcache.WithDB(u.db), dbcache.WithCache(u.cache), dbcache.WithDependency(u.sqlDependency), ) } func NewMenuLogic(db *gorm.DB, ch cache.Cache) *Menu { return &Menu{ db: db, cache: ch, sqlDependency: dbcache.NewSqlDependency("SELECT MAX(`updated_at`) FROM menus"), } }