Luís Murta 26302b78d4
Implements /bank/{id} GET method
The API had to change, the ID of a bank is its shortform name, so it's
a string.

Issue #15
2024-05-18 23:39:58 +01:00

81 lines
1.8 KiB
Go

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(%d)", 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) {
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.Print("DAL::Bank")
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.Printf("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
}