From 276fdb4ade4eb1ebb03cd22a4ddb53df6e6b6015 Mon Sep 17 00:00:00 2001 From: Jan Bader Date: Thu, 2 Dec 2021 20:56:49 +0000 Subject: [PATCH] Also display account & payee --- http/budget.go | 2 +- postgres/conn.go | 14 ++++++++++++++ postgres/queries/transactions.sql | 7 +++++-- postgres/transactions.sql.go | 26 +++++++++++++++++++------- web/budget.html | 6 ++++++ 5 files changed, 45 insertions(+), 10 deletions(-) diff --git a/http/budget.go b/http/budget.go index 5116e7d..54fcd63 100644 --- a/http/budget.go +++ b/http/budget.go @@ -11,7 +11,7 @@ import ( type BudgetData struct { Budget *postgres.Budget - Transactions []postgres.Transaction + Transactions []postgres.GetTransactionsForBudgetRow } func (h *Handler) budget(c *gin.Context) { diff --git a/postgres/conn.go b/postgres/conn.go index ecc2196..291d49d 100644 --- a/postgres/conn.go +++ b/postgres/conn.go @@ -48,3 +48,17 @@ func (tx Transaction) GetPositive() bool { amount := tx.GetAmount() return amount >= 0 } + +func (tx GetTransactionsForBudgetRow) GetAmount() float64 { + var amount float64 + err := tx.Amount.AssignTo(&amount) + if err != nil { + panic(err) + } + return amount +} + +func (tx GetTransactionsForBudgetRow) GetPositive() bool { + amount := tx.GetAmount() + return amount >= 0 +} diff --git a/postgres/queries/transactions.sql b/postgres/queries/transactions.sql index d9bd199..abefa78 100644 --- a/postgres/queries/transactions.sql +++ b/postgres/queries/transactions.sql @@ -5,8 +5,11 @@ VALUES ($1, $2, $3, $4, $5) RETURNING *; -- name: GetTransactionsForBudget :many -SELECT transactions.* FROM transactions -LEFT JOIN accounts ON accounts.id = transactions.account_id +SELECT transactions.id, transactions.date, transactions.memo, transactions.amount, + accounts.name as account, payees.name as payee +FROM transactions +INNER JOIN accounts ON accounts.id = transactions.account_id +INNER JOIN payees ON payees.id = transactions.payee_id WHERE accounts.budget_id = $1 ORDER BY transactions.date DESC LIMIT 200; diff --git a/postgres/transactions.sql.go b/postgres/transactions.sql.go index 26805a0..26e49d3 100644 --- a/postgres/transactions.sql.go +++ b/postgres/transactions.sql.go @@ -81,29 +81,41 @@ func (q *Queries) GetTransactionsForAccount(ctx context.Context, accountID uuid. } const getTransactionsForBudget = `-- name: GetTransactionsForBudget :many -SELECT transactions.id, transactions.date, transactions.memo, transactions.amount, transactions.account_id, transactions.payee_id FROM transactions -LEFT JOIN accounts ON accounts.id = transactions.account_id +SELECT transactions.id, transactions.date, transactions.memo, transactions.amount, + accounts.name as account, payees.name as payee +FROM transactions +INNER JOIN accounts ON accounts.id = transactions.account_id +INNER JOIN payees ON payees.id = transactions.payee_id WHERE accounts.budget_id = $1 ORDER BY transactions.date DESC LIMIT 200 ` -func (q *Queries) GetTransactionsForBudget(ctx context.Context, budgetID uuid.UUID) ([]Transaction, error) { +type GetTransactionsForBudgetRow struct { + ID uuid.UUID + Date time.Time + Memo string + Amount pgtype.Numeric + Account string + Payee string +} + +func (q *Queries) GetTransactionsForBudget(ctx context.Context, budgetID uuid.UUID) ([]GetTransactionsForBudgetRow, error) { rows, err := q.db.Query(ctx, getTransactionsForBudget, budgetID) if err != nil { return nil, err } defer rows.Close() - var items []Transaction + var items []GetTransactionsForBudgetRow for rows.Next() { - var i Transaction + var i GetTransactionsForBudgetRow if err := rows.Scan( &i.ID, &i.Date, &i.Memo, &i.Amount, - &i.AccountID, - &i.PayeeID, + &i.Account, + &i.Payee, ); err != nil { return nil, err } diff --git a/web/budget.html b/web/budget.html index e2205d6..79b16ed 100644 --- a/web/budget.html +++ b/web/budget.html @@ -16,6 +16,12 @@ {{range .Transactions}} {{.Date}} + + {{.Account}} + + + {{.Payee}} + {{.Memo}}