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 }