From 10ea73663f0f6a648cdc317b6ba1c4131b6c244e Mon Sep 17 00:00:00 2001 From: Jan Bader Date: Fri, 25 Feb 2022 22:09:59 +0000 Subject: [PATCH] Extract UpdateTransaction --- server/transaction.go | 87 +++++++++++++++++++++++-------------------- 1 file changed, 47 insertions(+), 40 deletions(-) diff --git a/server/transaction.go b/server/transaction.go index bdb9a35..7906624 100644 --- a/server/transaction.go +++ b/server/transaction.go @@ -43,60 +43,67 @@ func (h *Handler) newTransaction(c *gin.Context) { transactionID := c.Param("transactionid") if transactionID != "" { - editTransaction := postgres.UpdateTransactionParams{ - Memo: payload.Memo, - Date: time.Time(payload.Date), - Amount: amount, - PayeeID: payload.Payee.ID, - CategoryID: payload.CategoryID, - ID: uuid.MustParse(transactionID), - } + h.UpdateTransaction(payload, amount, transactionID, c) + return + } - err := h.Service.UpdateTransaction(c.Request.Context(), editTransaction) + newTransaction := postgres.CreateTransactionParams{ + Memo: payload.Memo, + Date: time.Time(payload.Date), + Amount: amount, + Status: postgres.TransactionStatus(payload.State), + CategoryID: payload.CategoryID, + AccountID: payload.AccountID, + } + + if payload.Payee.IsAccount { + err := h.CreateTransferForOtherAccount(newTransaction, amount, payload, c) if err != nil { - c.AbortWithError(http.StatusInternalServerError, fmt.Errorf("edit transaction: %w", err)) + c.AbortWithError(http.StatusInternalServerError, err) return } } else { - newTransaction := postgres.CreateTransactionParams{ - Memo: payload.Memo, - Date: time.Time(payload.Date), - Amount: amount, - Status: postgres.TransactionStatus(payload.State), - } - - if payload.Payee.IsAccount { - err := h.CreateTransferForOtherAccount(newTransaction, amount, payload, err, c) - if err != nil { - c.AbortWithError(http.StatusInternalServerError, fmt.Errorf("create transfer transaction: %w", err)) - return - } - } else { - payeeID, err := GetPayeeID(c.Request.Context(), payload, h) - if err != nil { - c.AbortWithError(http.StatusInternalServerError, fmt.Errorf("create payee: %w", err)) - } - newTransaction.PayeeID = payeeID - } - - newTransaction.CategoryID = payload.CategoryID - newTransaction.AccountID = payload.AccountID - transaction, err := h.Service.CreateTransaction(c.Request.Context(), newTransaction) + payeeID, err := GetPayeeID(c.Request.Context(), payload, h) if err != nil { - c.AbortWithError(http.StatusInternalServerError, fmt.Errorf("create transaction: %w", err)) - return + c.AbortWithError(http.StatusInternalServerError, fmt.Errorf("create payee: %w", err)) } - c.JSON(http.StatusOK, transaction) + newTransaction.PayeeID = payeeID + } + + transaction, err := h.Service.CreateTransaction(c.Request.Context(), newTransaction) + if err != nil { + c.AbortWithError(http.StatusInternalServerError, fmt.Errorf("create transaction: %w", err)) + return + } + c.JSON(http.StatusOK, transaction) +} + +func (h *Handler) UpdateTransaction(payload NewTransactionPayload, amount numeric.Numeric, transactionID string, c *gin.Context) { + editTransaction := postgres.UpdateTransactionParams{ + Memo: payload.Memo, + Date: time.Time(payload.Date), + Amount: amount, + PayeeID: payload.Payee.ID, + CategoryID: payload.CategoryID, + ID: uuid.MustParse(transactionID), + } + + err := h.Service.UpdateTransaction(c.Request.Context(), editTransaction) + if err != nil { + c.AbortWithError(http.StatusInternalServerError, fmt.Errorf("edit transaction: %w", err)) } } -func (h *Handler) CreateTransferForOtherAccount(newTransaction postgres.CreateTransactionParams, amount numeric.Numeric, payload NewTransactionPayload, err error, c *gin.Context) error { +func (h *Handler) CreateTransferForOtherAccount(newTransaction postgres.CreateTransactionParams, amount numeric.Numeric, payload NewTransactionPayload, c *gin.Context) error { newTransaction.GroupID = uuid.NullUUID{UUID: uuid.New(), Valid: true} newTransaction.Amount = amount.Neg() newTransaction.AccountID = payload.Payee.ID.UUID - _, err = h.Service.CreateTransaction(c.Request.Context(), newTransaction) - return err + // transfer does not need category. Either it's account is off-budget or no category was supplied. + newTransaction.CategoryID = uuid.NullUUID{} + + _, err := h.Service.CreateTransaction(c.Request.Context(), newTransaction) + return fmt.Errorf("create transfer transaction: %w", err) } func GetPayeeID(context context.Context, payload NewTransactionPayload, h *Handler) (uuid.NullUUID, error) {