From 7b9521698724050904f95fc5ec824b4572631a78 Mon Sep 17 00:00:00 2001 From: Tim Wundenberg Date: Sun, 4 Jan 2026 14:28:05 +0100 Subject: [PATCH] feat(budget): fix design and editing --- internal/budget/handler.go | 67 ++++++++++++++++++++++++---------- internal/budget/service.go | 15 ++++++-- internal/budget/template.templ | 24 ++++++++---- 3 files changed, 76 insertions(+), 30 deletions(-) diff --git a/internal/budget/handler.go b/internal/budget/handler.go index d5eef68..cb248fb 100644 --- a/internal/budget/handler.go +++ b/internal/budget/handler.go @@ -35,7 +35,7 @@ func (h HandlerImpl) Handle(r *http.ServeMux) { r.Handle("GET /budget/new", h.handleNew()) r.Handle("GET /budget/{id}", h.handleEdit()) r.Handle("POST /budget/{id}", h.handlePost()) - // r.Handle("DELETE /budget/{id}", h.handleDelete()) + r.Handle("DELETE /budget/{id}", h.handleDelete()) } func (h HandlerImpl) handlePage() http.HandlerFunc { @@ -112,18 +112,18 @@ func (h HandlerImpl) handlePost() http.HandlerFunc { } var ( - // id uuid.UUID - // err error + id uuid.UUID + err error ) idStr := r.PathValue("id") - // if idStr != "new" { - // id, err = uuid.Parse(idStr) - // if err != nil { - // core.HandleError(w, r, fmt.Errorf("could not parse Id: %w", core.ErrBadRequest)) - // return - // } - // } + if idStr != "new" { + id, err = uuid.Parse(idStr) + if err != nil { + core.HandleError(w, r, fmt.Errorf("could not parse Id: %w", core.ErrBadRequest)) + return + } + } valueF, err := strconv.ParseFloat(r.FormValue("value"), 64) if err != nil { @@ -133,25 +133,52 @@ func (h HandlerImpl) handlePost() http.HandlerFunc { value := int64(math.Round(valueF * DECIMALS_MULTIPLIER)) input := Budget{ - Value: value, + Id: id, Description: r.FormValue("name"), + Value: value, } - var budget *Budget if idStr == "new" { - budget, err = h.s.Add(r.Context(), user, input) + _, err = h.s.Add(r.Context(), user, input) + if err != nil { + core.HandleError(w, r, err) + return + } + } else { + _, err = h.s.Update(r.Context(), user, input) if err != nil { core.HandleError(w, r, err) return } - // } else { - // budget, err = h.s.Update(r.Context(), user, input) - // if err != nil { - // core.HandleError(w, r, err) - // return - // } } - core.DoRedirect(w, r, "/budget/"+budget.Id.String()) + core.DoRedirect(w, r, "/budget") + } +} + +func (h HandlerImpl) handleDelete() http.HandlerFunc { + return func(w http.ResponseWriter, r *http.Request) { + core.UpdateSpan(r) + + user := core.GetUser(r) + if user == nil { + core.DoRedirect(w, r, "/auth/signin") + return + } + + idStr := r.PathValue("id") + id, err := uuid.Parse(idStr) + if err != nil { + core.HandleError(w, r, fmt.Errorf("could not parse Id: %w", core.ErrBadRequest)) + return + } + + err = h.s.Delete(r.Context(), user, id) + if err != nil { + core.HandleError(w, r, err) + return + } + + core.DoRedirect(w, r, "/budget") } } diff --git a/internal/budget/service.go b/internal/budget/service.go index 0b25fcc..d275765 100644 --- a/internal/budget/service.go +++ b/internal/budget/service.go @@ -53,15 +53,24 @@ func (s ServiceImpl) Add(ctx context.Context, user *auth_types.User, budget Budg return s.db.Insert(ctx, budget) } -func (s ServiceImpl) Update(ctx context.Context, user *auth_types.User, budget Budget) (*Budget, error) { +func (s ServiceImpl) Update(ctx context.Context, user *auth_types.User, input Budget) (*Budget, error) { if user == nil { return nil, core.ErrUnauthorized } + + budget, err := s.Get(ctx, user, input.Id) + if err != nil { + return nil, err + } + + budget.Description = input.Description + budget.Value = input.Value + if user.Id != budget.UserId { return nil, core.ErrBadRequest } - isValid := s.isBudgetValid(budget) + isValid := s.isBudgetValid(*budget) if !isValid { return nil, core.ErrBadRequest } @@ -70,7 +79,7 @@ func (s ServiceImpl) Update(ctx context.Context, user *auth_types.User, budget B now := s.clock.Now() budget.UpdatedAt = &now - return s.db.Update(ctx, budget) + return s.db.Update(ctx, *budget) } func (s ServiceImpl) Delete(ctx context.Context, user *auth_types.User, budgetId uuid.UUID) error { diff --git a/internal/budget/template.templ b/internal/budget/template.templ index 83787ea..f3a52c1 100644 --- a/internal/budget/template.templ +++ b/internal/budget/template.templ @@ -16,12 +16,12 @@ templ page(budgets []Budget) { } templ editNew() { -
+
@core.Breadcrumb([]string{"Home", "Budget", "New"}, []string{"/", "/budget", "/budget/new"})
+
@core.Breadcrumb([]string{"Home", "Budget", budget.Description}, []string{"/", "/budget", "/budget/" + budget.Id.String()})