From 08f806e40586237b614b3f36167e11265586fe1e Mon Sep 17 00:00:00 2001 From: juancwu Date: Sat, 11 Apr 2026 17:41:23 +0000 Subject: [PATCH] feat: fetch user spaces for list --- internal/handler/space.go | 39 +++++++++++++++++++++++++++++++++------ 1 file changed, 33 insertions(+), 6 deletions(-) diff --git a/internal/handler/space.go b/internal/handler/space.go index e6f1312..db01624 100644 --- a/internal/handler/space.go +++ b/internal/handler/space.go @@ -1,8 +1,11 @@ package handler import ( + "log/slog" "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" @@ -19,10 +22,34 @@ func NewSpaceHandler(spaceService *service.SpaceService) *spaceHandler { } func (h *spaceHandler) SpacesPage(w http.ResponseWriter, r *http.Request) { - ui.Render(w, r, pages.Spaces([]blocks.SpaceCardInfo{ - { - ID: "test-1", Name: "My Space", - MemberCount: 3, TotalBalance: decimal.NewFromFloat(123.23), - }, - })) + user := ctxkeys.User(r.Context()) + if user == nil { + ui.RenderError(w, r, "Unauthorized", http.StatusUnauthorized) + return + } + + spaces, err := h.spaceService.GetSpacesForUser(user.ID) + if err != nil { + slog.Error("failed to load spaces", "error", err, "user_id", user.ID) + ui.RenderError(w, r, "Failed to load spaces", http.StatusInternalServerError) + return + } + + cards := make([]blocks.SpaceCardInfo, 0, len(spaces)) + for _, sp := range spaces { + members, err := h.spaceService.GetMembers(sp.ID) + if err != nil { + slog.Error("failed to load space members", "error", err, "space_id", sp.ID) + members = nil + } + cards = append(cards, blocks.SpaceCardInfo{ + ID: sp.ID, + Name: sp.Name, + MemberCount: len(members), + TotalBalance: decimal.Zero, + Currency: currency.CAD, + }) + } + + ui.Render(w, r, pages.Spaces(cards)) }