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

51 lines
1.7 KiB
Go

package models
import (
"context"
"time"
"github.com/uptrace/bun"
)
type CreditCard struct {
bun.BaseModel `bun:"table:credit_cards"`
CreditCardID int64 `bun:",pk,autoincrement" json:"credit_card_id" yaml:"credit_card_id"`
UserID int64 `json:"user_id" yaml:"user_id"`
Title string `bun:"title,type:text" json:"title,omitempty" yaml:"title,omitempty"`
Bank string `bun:"bank,type:text" json:"bank,omitempty" yaml:"bank,omitempty"`
Type string `bun:"type,type:text" json:"type,omitempty" yaml:"type,omitempty"`
Digits string `bun:"digits,type:text,unique" json:"digits,omitempty" yaml:"digits,omitempty"`
Created time.Time `bun:",nullzero,notnull,default:current_timestamp" json:"created" yaml:"created"`
Updated time.Time `json:"updated" yaml:"updated"`
}
type CreditCards []*CreditCard
var _ bun.AfterCreateTableHook = (*CreditCard)(nil)
func (*CreditCard) AfterCreateTable(ctx context.Context, query *bun.CreateTableQuery) error {
_, err := query.DB().NewCreateIndex().Model((*CreditCard)(nil)).Index("idx_credit_card_title").Column("title").Exec(ctx)
if err != nil {
return err
}
_, err = query.DB().NewCreateIndex().Model((*CreditCard)(nil)).Index("idx_credit_card_type").Column("type").Exec(ctx)
if err != nil {
return err
}
_, err = query.DB().NewCreateIndex().Model((*CreditCard)(nil)).Index("idx_credit_card_digits").Column("digits").Exec(ctx)
if err != nil {
return err
}
return nil
}
// Add .
func (cc *CreditCard) Add(db *bun.DB, ctx context.Context) error {
_, err := db.NewInsert().Model(cc).On("CONFLICT (digits) DO UPDATE").Set("updated = EXCLUDED.updated").Exec(ctx)
if err != nil {
return err
}
return nil
}