package dal import ( "database/sql" "log" "git.rosemyrtle.work/personal-finance/server/internal/entity" ) type DalImpl struct { Db *sql.DB } func (dal *DalImpl) Transaction(transactionId int64) (*entity.Transaction, error) { log.Printf("DAL::Transaction(%v)", transactionId) if dal.Db == nil { log.Panic("database not available") } rows, err := dal.Db.Query("SELECT t.id, t.date, t.description, t.amount FROM pfbudget.transactions t WHERE t.id = $1", transactionId) if err != nil { return nil, err } transactions := convert[entity.Transaction](rows) if len(transactions) == 0 { return nil, nil } return &transactions[0], nil } func (dal *DalImpl) Transactions() (entity.Transactions, error) { log.Print("DAL::Transactions") if dal.Db == nil { log.Panic("database not available") } rows, err := dal.Db.Query("SELECT t.id, t.date, t.description, t.amount FROM pfbudget.transactions t") if err != nil { return entity.Transactions{}, err } return convert[entity.Transaction](rows), nil } func (dal *DalImpl) Bank(bankId string) (*entity.Bank, error) { log.Printf("DAL::Bank(%v)", bankId) if dal.Db == nil { log.Panic("database not available") } rows, err := dal.Db.Query("SELECT b.name, b.name, n.requisition_id FROM pfbudget.banks b JOIN pfbudget.banks_nordigen n ON b.name = n.name WHERE b.name = $1", bankId) if err != nil { return nil, err } banks := convert[entity.Bank](rows) if len(banks) == 0 { return nil, nil } return &banks[0], nil } func (dal *DalImpl) Banks() (entity.Banks, error) { log.Print("DAL::Banks") if dal.Db == nil { log.Panic("database not available") } rows, err := dal.Db.Query("SELECT b.name, b.name, n.requisition_id FROM pfbudget.banks b JOIN pfbudget.banks_nordigen n ON b.name = n.name") if err != nil { return entity.Banks{}, err } return convert[entity.Bank](rows), nil }