80 lines
1.9 KiB
Go
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
|
|
}
|