From c9f67ae9b9cacf63692945c73245daf7e18c96f6 Mon Sep 17 00:00:00 2001 From: Jan Bader Date: Wed, 6 Apr 2022 19:59:41 +0000 Subject: [PATCH] Split new and update-transaction into separate methods --- server/http.go | 42 ++++++++++++++++++++++-------------------- server/transaction.go | 27 ++++++++++++++++++++++----- 2 files changed, 44 insertions(+), 25 deletions(-) diff --git a/server/http.go b/server/http.go index 10ccea4..b96a645 100644 --- a/server/http.go +++ b/server/http.go @@ -52,28 +52,30 @@ func (h *Handler) LoadRoutes(router *gin.Engine) { anonymous.POST("/register", h.registerPost) authenticated := api.Group("") - authenticated.Use(h.verifyLoginWithForbidden) - authenticated.GET("/account/:accountid/transactions", h.transactionsForAccount) - authenticated.POST("/account/:accountid/reconcile", h.reconcileTransactions) - authenticated.POST("/account/:accountid", h.editAccount) - authenticated.GET("/admin/clear-database", h.clearDatabase) + { + authenticated.Use(h.verifyLoginWithForbidden) + authenticated.GET("/account/:accountid/transactions", h.transactionsForAccount) + authenticated.POST("/account/:accountid/reconcile", h.reconcileTransactions) + authenticated.POST("/account/:accountid", h.editAccount) + authenticated.GET("/admin/clear-database", h.clearDatabase) - budget := authenticated.Group("/budget") - 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) - budget.POST("/:budgetid/import/ynab", h.importYNAB) - budget.POST("/:budgetid/export/ynab/transactions", h.exportYNABTransactions) - budget.POST("/:budgetid/export/ynab/assignments", h.exportYNABAssignments) - budget.POST("/:budgetid/settings/clear", h.clearBudget) + budget := authenticated.Group("/budget") + budget.POST("/new", h.newBudget) + budget.GET("/:budgetid", h.budget) + 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) + budget.POST("/:budgetid/import/ynab", h.importYNAB) + budget.POST("/:budgetid/export/ynab/transactions", h.exportYNABTransactions) + budget.POST("/:budgetid/export/ynab/assignments", h.exportYNABAssignments) + budget.POST("/:budgetid/settings/clear", h.clearBudget) - transaction := authenticated.Group("/transaction") - transaction.POST("/new", h.newTransaction) - transaction.POST("/:transactionid", h.newTransaction) + transaction := authenticated.Group("/transaction") + transaction.POST("/new", h.newTransaction) + transaction.POST("/:transactionid", h.updateTransaction) + } } func (h *Handler) ServeStatic(c *gin.Context) { diff --git a/server/transaction.go b/server/transaction.go index a9cce82..0a959ba 100644 --- a/server/transaction.go +++ b/server/transaction.go @@ -27,7 +27,7 @@ type NewTransactionPayload struct { State string `json:"state"` } -func (h *Handler) newTransaction(c *gin.Context) { +func (h *Handler) updateTransaction(c *gin.Context) { var payload NewTransactionPayload err := c.BindJSON(&payload) if err != nil { @@ -42,8 +42,26 @@ func (h *Handler) newTransaction(c *gin.Context) { } transactionID := c.Param("transactionid") - if transactionID != "" { - h.UpdateTransaction(payload, amount, transactionID, c) + transactionUUID, err := uuid.Parse(transactionID) + if err != nil { + c.AbortWithStatusJSON(http.StatusBadRequest, ErrorResponse{"transactionid missing from URL"}) + return + } + + h.UpdateTransaction(payload, amount, transactionUUID, c) +} + +func (h *Handler) newTransaction(c *gin.Context) { + var payload NewTransactionPayload + err := c.BindJSON(&payload) + if err != nil { + c.AbortWithError(http.StatusBadRequest, err) + return + } + + amount, err := numeric.Parse(payload.Amount) + if err != nil { + c.AbortWithError(http.StatusBadRequest, fmt.Errorf("amount: %w", err)) return } @@ -87,8 +105,7 @@ func (h *Handler) newTransaction(c *gin.Context) { c.JSON(http.StatusOK, transaction) } -func (h *Handler) UpdateTransaction(payload NewTransactionPayload, amount numeric.Numeric, transactionID string, c *gin.Context) { - transactionUUID := uuid.MustParse(transactionID) +func (h *Handler) UpdateTransaction(payload NewTransactionPayload, amount numeric.Numeric, transactionUUID uuid.UUID, c *gin.Context) { if amount.IsZero() { err := h.Service.DeleteTransaction(c.Request.Context(), transactionUUID) if err != nil {