From db96fddde258aad0383b283a9785075523a0ad51 Mon Sep 17 00:00:00 2001 From: Jan Bader Date: Fri, 4 Mar 2022 22:24:38 +0000 Subject: [PATCH] Implement update Assignment on backend --- server/category.go | 55 ++++++++++++++++++++++++++++++++++++++++++++++ server/http.go | 1 + 2 files changed, 56 insertions(+) create mode 100644 server/category.go diff --git a/server/category.go b/server/category.go new file mode 100644 index 0000000..ab4676c --- /dev/null +++ b/server/category.go @@ -0,0 +1,55 @@ +package server + +import ( + "fmt" + "net/http" + + "git.javil.eu/jacob1123/budgeteer/postgres" + "git.javil.eu/jacob1123/budgeteer/postgres/numeric" + "github.com/gin-gonic/gin" + "github.com/google/uuid" +) + +type SetCategoryAssignmentRequest struct { + Assigned string +} + +func (h *Handler) setCategoryAssignment(c *gin.Context) { + categoryID := c.Param("categoryid") + categoryUUID, err := uuid.Parse(categoryID) + if err != nil { + c.AbortWithStatusJSON(http.StatusBadRequest, ErrorResponse{"categoryid missing from URL"}) + return + } + + var request SetCategoryAssignmentRequest + err = c.BindJSON(&request) + if err != nil { + c.AbortWithError(http.StatusBadRequest, fmt.Errorf("invalid payload: %w", err)) + return + } + + date, err := getDate(c) + if err != nil { + c.AbortWithError(http.StatusBadRequest, fmt.Errorf("date invalid: %w", err)) + return + } + + var amount numeric.Numeric + err = amount.Set(request.Assigned) + if err != nil { + c.AbortWithError(http.StatusBadRequest, fmt.Errorf("parse amount: %w", err)) + return + } + + updateArgs := postgres.UpdateAssignmentParams{ + CategoryID: categoryUUID, + Date: date, + Amount: amount, + } + err = h.Service.UpdateAssignment(c.Request.Context(), updateArgs) + if err != nil { + c.AbortWithError(http.StatusInternalServerError, fmt.Errorf("update assignment: %w", err)) + return + } +} diff --git a/server/http.go b/server/http.go index e3fcfc9..e958687 100644 --- a/server/http.go +++ b/server/http.go @@ -64,6 +64,7 @@ func (h *Handler) LoadRoutes(router *gin.Engine) { budget.POST("/new", h.newBudget) budget.GET("/:budgetid", h.budgeting) budget.GET("/:budgetid/:year/:month", h.budgetingForMonth) + budget.POST("/:budgetid/category/:categoryid/:year/:month", h.setCategoryAssignment) budget.GET("/:budgetid/autocomplete/payees", h.autocompletePayee) budget.GET("/:budgetid/autocomplete/categories", h.autocompleteCategories) budget.DELETE("/:budgetid", h.deleteBudget)