refactored view package

This commit is contained in:
2026-02-09 19:30:47 +11:00
parent fa3b8e3982
commit 0b3301f921
47 changed files with 653 additions and 490 deletions

View File

@@ -8,39 +8,27 @@ import (
"github.com/uptrace/bun"
)
type ListFilter struct {
filters []Filter
}
func NewListFilter() *ListFilter {
return &ListFilter{[]Filter{}}
}
func (f *ListFilter) Add(field string, value any) {
f.filters = append(f.filters, Filter{field, value})
}
type fieldgetter[T any] struct {
q *bun.SelectQuery
field string
value any
model *T
}
func (g *fieldgetter[T]) get(ctx context.Context) (*T, error) {
if g.field == "id" && (g.value).(int) < 1 {
return nil, errors.New("invalid id")
}
model := new(T)
err := g.q.
Where("? = ?", bun.Ident(g.field), g.value).
Scan(ctx, model)
Scan(ctx)
if err != nil {
if errors.Is(err, sql.ErrNoRows) {
return nil, nil
}
return nil, errors.Wrap(err, "bun.SelectQuery.Scan")
}
return model, nil
return g.model, nil
}
func (g *fieldgetter[T]) GetFirst(ctx context.Context) (*T, error) {
@@ -68,10 +56,12 @@ func GetByField[T any](
field string,
value any,
) *fieldgetter[T] {
model := new(T)
return &fieldgetter[T]{
tx.NewSelect().Model((*T)(nil)),
tx.NewSelect().Model(model),
field,
value,
model,
}
}