chore: calculate total balance for space
This commit is contained in:
parent
b48fcbfaa6
commit
694b774986
6 changed files with 35 additions and 23 deletions
9
internal/db/migrations/00004_add_balance_to_accounts.sql
Normal file
9
internal/db/migrations/00004_add_balance_to_accounts.sql
Normal 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
|
||||||
|
|
@ -5,7 +5,6 @@ import (
|
||||||
"net/http"
|
"net/http"
|
||||||
|
|
||||||
"git.juancwu.dev/juancwu/budgit/internal/ctxkeys"
|
"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/service"
|
||||||
"git.juancwu.dev/juancwu/budgit/internal/ui"
|
"git.juancwu.dev/juancwu/budgit/internal/ui"
|
||||||
"git.juancwu.dev/juancwu/budgit/internal/ui/blocks"
|
"git.juancwu.dev/juancwu/budgit/internal/ui/blocks"
|
||||||
|
|
@ -14,11 +13,12 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
type spaceHandler struct {
|
type spaceHandler struct {
|
||||||
spaceService *service.SpaceService
|
spaceService *service.SpaceService
|
||||||
|
accountService *service.AccountService
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewSpaceHandler(spaceService *service.SpaceService) *spaceHandler {
|
func NewSpaceHandler(spaceService *service.SpaceService, accountService *service.AccountService) *spaceHandler {
|
||||||
return &spaceHandler{spaceService: spaceService}
|
return &spaceHandler{spaceService: spaceService, accountService: accountService}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (h *spaceHandler) SpacesPage(w http.ResponseWriter, r *http.Request) {
|
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 {
|
if err != nil {
|
||||||
slog.Error("failed to get space member count", "error", err, "space_id", sp.ID)
|
slog.Error("failed to get space member count", "error", err, "space_id", sp.ID)
|
||||||
memberCount = 0
|
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{
|
cards = append(cards, blocks.SpaceCardInfo{
|
||||||
ID: sp.ID,
|
ID: sp.ID,
|
||||||
Name: sp.Name,
|
Name: sp.Name,
|
||||||
MemberCount: memberCount,
|
MemberCount: memberCount,
|
||||||
TotalBalance: decimal.Zero,
|
TotalBalance: totalBalance,
|
||||||
Currency: currency.CAD,
|
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,8 +0,0 @@
|
||||||
package currency
|
|
||||||
|
|
||||||
type Currency string
|
|
||||||
|
|
||||||
const (
|
|
||||||
CAD Currency = "cad"
|
|
||||||
USD Currency = "usd"
|
|
||||||
)
|
|
||||||
|
|
@ -7,11 +7,12 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
type Account struct {
|
type Account struct {
|
||||||
ID string `db:"id"`
|
ID string `db:"id"`
|
||||||
Name string `db:"name"`
|
Name string `db:"name"`
|
||||||
SpaceID string `db:"space_id"`
|
SpaceID string `db:"space_id"`
|
||||||
CreatedAt time.Time `db:"created_at"`
|
Balance decimal.Decimal `db:"balance"`
|
||||||
UpdatedAt time.Time `db:"updated_at"`
|
CreatedAt time.Time `db:"created_at"`
|
||||||
|
UpdatedAt time.Time `db:"updated_at"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type TransactionType string
|
type TransactionType string
|
||||||
|
|
|
||||||
|
|
@ -9,8 +9,8 @@ import (
|
||||||
"git.juancwu.dev/juancwu/budgit/internal/app"
|
"git.juancwu.dev/juancwu/budgit/internal/app"
|
||||||
"git.juancwu.dev/juancwu/budgit/internal/handler"
|
"git.juancwu.dev/juancwu/budgit/internal/handler"
|
||||||
"git.juancwu.dev/juancwu/budgit/internal/middleware"
|
"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/router"
|
||||||
|
"git.juancwu.dev/juancwu/budgit/internal/routeurl"
|
||||||
)
|
)
|
||||||
|
|
||||||
func SetupRoutes(a *app.App) http.Handler {
|
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)
|
authH := handler.NewAuthHandler(a.AuthService, a.InviteService, a.SpaceService)
|
||||||
homeH := handler.NewHomeHandler()
|
homeH := handler.NewHomeHandler()
|
||||||
settingsH := handler.NewSettingsHandler(a.AuthService, a.UserService)
|
settingsH := handler.NewSettingsHandler(a.AuthService, a.UserService)
|
||||||
spaceH := handler.NewSpaceHandler(a.SpaceService)
|
spaceH := handler.NewSpaceHandler(a.SpaceService, a.AccountService)
|
||||||
redirectH := handler.NewRedirectHandler()
|
redirectH := handler.NewRedirectHandler()
|
||||||
|
|
||||||
r := router.New()
|
r := router.New()
|
||||||
|
|
|
||||||
|
|
@ -4,14 +4,12 @@ import "github.com/shopspring/decimal"
|
||||||
import "strings"
|
import "strings"
|
||||||
import "git.juancwu.dev/juancwu/budgit/internal/ui/components/icon"
|
import "git.juancwu.dev/juancwu/budgit/internal/ui/components/icon"
|
||||||
import "fmt"
|
import "fmt"
|
||||||
import "git.juancwu.dev/juancwu/budgit/internal/misc/currency"
|
|
||||||
|
|
||||||
type SpaceCardInfo struct {
|
type SpaceCardInfo struct {
|
||||||
ID string
|
ID string
|
||||||
Name string
|
Name string
|
||||||
MemberCount int
|
MemberCount int
|
||||||
TotalBalance decimal.Decimal
|
TotalBalance decimal.Decimal
|
||||||
Currency currency.Currency
|
|
||||||
}
|
}
|
||||||
|
|
||||||
templ SpaceCard(info SpaceCardInfo) {
|
templ SpaceCard(info SpaceCardInfo) {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue