chore: calculate total balance for space

This commit is contained in:
juancwu 2026-04-11 17:57:41 +00:00
commit 694b774986
6 changed files with 35 additions and 23 deletions

View file

@ -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

View file

@ -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"
@ -15,10 +14,11 @@ import (
type spaceHandler struct {
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,
})
}

View file

@ -1,8 +0,0 @@
package currency
type Currency string
const (
CAD Currency = "cad"
USD Currency = "usd"
)

View file

@ -10,6 +10,7 @@ type Account struct {
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"`
}

View file

@ -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()

View file

@ -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) {