50 lines
1.1 KiB
Go
50 lines
1.1 KiB
Go
package model
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"lyra/internal/cache"
|
|
|
|
sq "github.com/Masterminds/squirrel"
|
|
"github.com/jmoiron/sqlx"
|
|
)
|
|
|
|
type Category struct {
|
|
ID int64 `db:"id"`
|
|
Slug string `db:"slug"`
|
|
Title string `db:"title"`
|
|
Sort int `db:"sort"`
|
|
}
|
|
|
|
type CategoryModel interface {
|
|
FindAll(ctx context.Context) ([]*Category, error)
|
|
}
|
|
type defaultCategoryModel struct {
|
|
db *sqlx.DB
|
|
cache *cache.Cache
|
|
}
|
|
|
|
func NewCategoryModel(db *sqlx.DB, cache *cache.Cache) CategoryModel {
|
|
return &defaultCategoryModel{db: db, cache: cache}
|
|
}
|
|
func (m *defaultCategoryModel) FindAll(ctx context.Context) ([]*Category, error) {
|
|
|
|
query, args, err := sq.
|
|
Select("id", "slug", "title", "sort").
|
|
From("public.categories").
|
|
Where(sq.GtOrEq{"sort": 1}).
|
|
OrderBy("sort ASC", "id ASC").
|
|
Limit(10).
|
|
PlaceholderFormat(sq.Dollar).
|
|
ToSql()
|
|
if err != nil {
|
|
return nil, fmt.Errorf("squirrel 出错: %w", err)
|
|
}
|
|
rows := make([]*Category, 0)
|
|
err = m.db.SelectContext(ctx, &rows, query, args...)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("数据库查询出错: %w", err)
|
|
}
|
|
return rows, err
|
|
}
|