Files
go-receipt-tracker/models/items.go
2025-02-03 17:49:29 -05:00

80 lines
1.9 KiB
Go

package models
import (
"context"
"github.com/uptrace/bun"
)
type Item struct {
bun.BaseModel `bun:"table:items"`
ItemID int64 `bun:",pk,autoincrement" json:"item_id" yaml:"item_id"`
ReceiptID int64 `json:"receipt_id" yaml:"receipt_id"`
Title string `bun:"item,type:text" json:"item" yaml:"item"`
Quantity float64 `bun:"quantity" json:"quantity" yaml:"quantity"`
Price float64 `bun:"price" json:"price" yaml:"price"`
Category string `bun:"category" json:"category" yaml:"category"`
}
type Items []*Item
var _ bun.AfterCreateTableHook = (*Item)(nil)
func (*Item) AfterCreateTable(ctx context.Context, query *bun.CreateTableQuery) error {
_, err := query.DB().NewCreateIndex().Model((*Item)(nil)).Index("idx_items_item").Column("item").Exec(ctx)
if err != nil {
return err
}
_, err = query.DB().NewCreateIndex().Model((*Item)(nil)).Index("idx_items_category").Column("category").Exec(ctx)
if err != nil {
return err
}
return nil
}
// Add .
func (i *Item) Add(db *bun.DB, ctx context.Context) error {
_, err := db.NewInsert().Model(i).Exec(ctx)
if err != nil {
return err
}
return nil
}
// Update .
func (i *Item) Update(db *bun.DB, ctx context.Context) error {
_, err := db.NewUpdate().Model(i).WherePK().Exec(ctx)
if err != nil {
return err
}
return nil
}
// Add .
func (i *Items) Add(db *bun.DB, ctx context.Context) error {
_, err := db.NewInsert().Model(i).Exec(ctx)
if err != nil {
return err
}
return nil
}
// List .
func (i *Items) List(db *bun.DB, ctx context.Context, r int) (Items, error) {
var items Items
_, err := db.NewSelect().Model(&items).Where("receipt_id = ?", r).ScanAndCount(ctx)
if err != nil {
return nil, err
}
return items, nil
}
// Remove .
func (i *Items) Remove(db *bun.DB, ctx context.Context) error {
_, err := db.NewDelete().Model(i).WherePK().Exec(ctx)
if err != nil {
return err
}
return nil
}