From 694b7749860d8391e58c1ce8232c01676bd73249 Mon Sep 17 00:00:00 2001 From: juancwu Date: Sat, 11 Apr 2026 17:57:41 +0000 Subject: [PATCH] chore: calculate total balance for space --- .../00004_add_balance_to_accounts.sql | 9 +++++++ internal/handler/space.go | 24 ++++++++++++++----- internal/misc/currency/currency.go | 8 ------- internal/model/financial_management.go | 11 +++++---- internal/routes/routes.go | 4 ++-- internal/ui/blocks/space_card.templ | 2 -- 6 files changed, 35 insertions(+), 23 deletions(-) create mode 100644 internal/db/migrations/00004_add_balance_to_accounts.sql delete mode 100644 internal/misc/currency/currency.go diff --git a/internal/db/migrations/00004_add_balance_to_accounts.sql b/internal/db/migrations/00004_add_balance_to_accounts.sql new file mode 100644 index 0000000..1bdbcb4 --- /dev/null +++ b/internal/db/migrations/00004_add_balance_to_accounts.sql @@ -0,0 +1,9 @@ +-- +goose Up +-- +goose StatementBegin +ALTER TABLE accounts ADD COLUMN balance TEXT NOT NULL DEFAULT '0.00'; +-- +goose StatementEnd + +-- +goose Down +-- +goose StatementBegin +ALTER TABLE accounts DROP COLUMN balance; +-- +goose StatementEnd diff --git a/internal/handler/space.go b/internal/handler/space.go index 0f71ac4..e785756 100644 --- a/internal/handler/space.go +++ b/internal/handler/space.go @@ -5,7 +5,6 @@ import ( "net/http" "git.juancwu.dev/juancwu/budgit/internal/ctxkeys" - "git.juancwu.dev/juancwu/budgit/internal/misc/currency" "git.juancwu.dev/juancwu/budgit/internal/service" "git.juancwu.dev/juancwu/budgit/internal/ui" "git.juancwu.dev/juancwu/budgit/internal/ui/blocks" @@ -14,11 +13,12 @@ import ( ) type spaceHandler struct { - spaceService *service.SpaceService + spaceService *service.SpaceService + accountService *service.AccountService } -func NewSpaceHandler(spaceService *service.SpaceService) *spaceHandler { - return &spaceHandler{spaceService: spaceService} +func NewSpaceHandler(spaceService *service.SpaceService, accountService *service.AccountService) *spaceHandler { + return &spaceHandler{spaceService: spaceService, accountService: accountService} } func (h *spaceHandler) SpacesPage(w http.ResponseWriter, r *http.Request) { @@ -41,14 +41,26 @@ func (h *spaceHandler) SpacesPage(w http.ResponseWriter, r *http.Request) { if err != nil { slog.Error("failed to get space member count", "error", err, "space_id", sp.ID) memberCount = 0 + err = nil + } + + accounts, err := h.accountService.GetAccountsForSpace(sp.ID) + if err != nil { + slog.Error("failed to get space accounts", "error", err, "space_id", sp.ID) + accounts = nil + err = nil + } + + totalBalance := decimal.Zero + for _, acc := range accounts { + totalBalance = totalBalance.Add(acc.Balance) } cards = append(cards, blocks.SpaceCardInfo{ ID: sp.ID, Name: sp.Name, MemberCount: memberCount, - TotalBalance: decimal.Zero, - Currency: currency.CAD, + TotalBalance: totalBalance, }) } diff --git a/internal/misc/currency/currency.go b/internal/misc/currency/currency.go deleted file mode 100644 index 0b9ebfe..0000000 --- a/internal/misc/currency/currency.go +++ /dev/null @@ -1,8 +0,0 @@ -package currency - -type Currency string - -const ( - CAD Currency = "cad" - USD Currency = "usd" -) diff --git a/internal/model/financial_management.go b/internal/model/financial_management.go index 56668f9..07320da 100644 --- a/internal/model/financial_management.go +++ b/internal/model/financial_management.go @@ -7,11 +7,12 @@ import ( ) type Account struct { - ID string `db:"id"` - Name string `db:"name"` - SpaceID string `db:"space_id"` - CreatedAt time.Time `db:"created_at"` - UpdatedAt time.Time `db:"updated_at"` + ID string `db:"id"` + Name string `db:"name"` + SpaceID string `db:"space_id"` + Balance decimal.Decimal `db:"balance"` + CreatedAt time.Time `db:"created_at"` + UpdatedAt time.Time `db:"updated_at"` } type TransactionType string diff --git a/internal/routes/routes.go b/internal/routes/routes.go index 8a56b89..96868d2 100644 --- a/internal/routes/routes.go +++ b/internal/routes/routes.go @@ -9,8 +9,8 @@ import ( "git.juancwu.dev/juancwu/budgit/internal/app" "git.juancwu.dev/juancwu/budgit/internal/handler" "git.juancwu.dev/juancwu/budgit/internal/middleware" - "git.juancwu.dev/juancwu/budgit/internal/routeurl" "git.juancwu.dev/juancwu/budgit/internal/router" + "git.juancwu.dev/juancwu/budgit/internal/routeurl" ) func SetupRoutes(a *app.App) http.Handler { @@ -19,7 +19,7 @@ func SetupRoutes(a *app.App) http.Handler { authH := handler.NewAuthHandler(a.AuthService, a.InviteService, a.SpaceService) homeH := handler.NewHomeHandler() settingsH := handler.NewSettingsHandler(a.AuthService, a.UserService) - spaceH := handler.NewSpaceHandler(a.SpaceService) + spaceH := handler.NewSpaceHandler(a.SpaceService, a.AccountService) redirectH := handler.NewRedirectHandler() r := router.New() diff --git a/internal/ui/blocks/space_card.templ b/internal/ui/blocks/space_card.templ index b2b559a..88de9ec 100644 --- a/internal/ui/blocks/space_card.templ +++ b/internal/ui/blocks/space_card.templ @@ -4,14 +4,12 @@ import "github.com/shopspring/decimal" import "strings" import "git.juancwu.dev/juancwu/budgit/internal/ui/components/icon" import "fmt" -import "git.juancwu.dev/juancwu/budgit/internal/misc/currency" type SpaceCardInfo struct { ID string Name string MemberCount int TotalBalance decimal.Decimal - Currency currency.Currency } templ SpaceCard(info SpaceCardInfo) {