improve dashboard page

This commit is contained in:
juancwu 2026-01-15 01:06:55 +00:00
commit 081499ca59
5 changed files with 89 additions and 55 deletions

View file

@ -1,18 +1,45 @@
package handler
import (
"log/slog"
"net/http"
"git.juancwu.dev/juancwu/budgit/internal/ctxkeys"
"git.juancwu.dev/juancwu/budgit/internal/service"
"git.juancwu.dev/juancwu/budgit/internal/ui"
"git.juancwu.dev/juancwu/budgit/internal/ui/pages"
)
type dashboardHandler struct{}
type dashboardHandler struct {
spaceService *service.SpaceService
expenseService *service.ExpenseService
}
func NewDashboardHandler() *dashboardHandler {
return &dashboardHandler{}
func NewDashboardHandler(ss *service.SpaceService, es *service.ExpenseService) *dashboardHandler {
return &dashboardHandler{
spaceService: ss,
expenseService: es,
}
}
func (h *dashboardHandler) DashboardPage(w http.ResponseWriter, r *http.Request) {
ui.Render(w, r, pages.Dashboard())
user := ctxkeys.User(r.Context())
spaces, err := h.spaceService.GetSpacesForUser(user.ID)
if err != nil {
slog.Error("failed to get spaces for user", "error", err, "user_id", user.ID)
http.Error(w, "Internal Server Error", http.StatusInternalServerError)
return
}
var totalBalance int
for _, space := range spaces {
balance, err := h.expenseService.GetBalanceForSpace(space.ID)
if err != nil {
slog.Error("failed to get balance for space", "error", err, "space_id", space.ID)
continue
}
totalBalance += balance
}
ui.Render(w, r, pages.Dashboard(spaces, totalBalance))
}