From 27755787134802fd967a6930259c182626c95b60 Mon Sep 17 00:00:00 2001 From: Jan Bader Date: Sun, 27 Feb 2022 20:50:26 +0000 Subject: [PATCH] Extract method CreateReconcilationTransaction --- server/reconcile.go | 57 ++++++++++++++++++++++++++------------------- 1 file changed, 33 insertions(+), 24 deletions(-) diff --git a/server/reconcile.go b/server/reconcile.go index 2437238..d0c1a57 100644 --- a/server/reconcile.go +++ b/server/reconcile.go @@ -42,6 +42,7 @@ func (h *Handler) reconcileTransactions(c *gin.Context) { c.AbortWithError(http.StatusInternalServerError, fmt.Errorf("begin tx: %w", err)) return } + db := h.Service.WithTx(tx) for _, transactionID := range request.TransactionIDs { err := db.SetTransactionReconciled(c.Request.Context(), transactionID) @@ -50,38 +51,46 @@ func (h *Handler) reconcileTransactions(c *gin.Context) { return } } + + reconciliationTransaction, err := h.CreateReconcilationTransaction(request, accountUUID, db, c) + if err != nil { + c.AbortWithError(http.StatusInternalServerError, fmt.Errorf("insert new transaction: %w", err)) + return + } + err = tx.Commit() if err != nil { c.AbortWithError(http.StatusInternalServerError, fmt.Errorf("commit: %w", err)) return } - var reconciliationTransaction *postgres.DisplayTransaction - if !request.ReconcilationTransactionAmount.IsZero() { - createTransaction := postgres.CreateTransactionParams{ - Date: time.Now(), - Memo: "Reconciliation Transaction", - Amount: request.ReconcilationTransactionAmount, - AccountID: accountUUID, - Status: "Reconciled", - } - newTransaction, err := h.Service.CreateTransaction(c.Request.Context(), createTransaction) - if err != nil { - c.AbortWithError(http.StatusInternalServerError, fmt.Errorf("insert new transaction: %w", err)) - return - } - - transaction, err := h.Service.GetTransaction(c.Request.Context(), newTransaction.ID) - if err != nil { - c.AbortWithError(http.StatusInternalServerError, fmt.Errorf("get created transaction: %w", err)) - return - } - - reconciliationTransaction = &transaction - } - c.JSON(http.StatusOK, ReconcileTransactionsResponse{ Message: fmt.Sprintf("Set status for %d transactions", len(request.TransactionIDs)), ReconciliationTransaction: reconciliationTransaction, }) } + +func (*Handler) CreateReconcilationTransaction(request ReconcileTransactionsRequest, accountUUID uuid.UUID, db *postgres.Queries, c *gin.Context) (*postgres.DisplayTransaction, error) { + if request.ReconcilationTransactionAmount.IsZero() { + return nil, nil + } + + createTransaction := postgres.CreateTransactionParams{ + Date: time.Now(), + Memo: "Reconciliation Transaction", + Amount: request.ReconcilationTransactionAmount, + AccountID: accountUUID, + Status: "Reconciled", + } + newTransaction, err := db.CreateTransaction(c.Request.Context(), createTransaction) + if err != nil { + return nil, fmt.Errorf("insert new transaction: %w", err) + } + + transaction, err := db.GetTransaction(c.Request.Context(), newTransaction.ID) + if err != nil { + return nil, fmt.Errorf("get created transaction: %w", err) + } + + return &transaction, nil +}