package server import ( "database/sql" "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 ReconcileTransactionsRequest struct { TransactionIDs []uuid.UUID `json:"transactionIds"` ReconcilationTransactionAmount numeric.Numeric `json:"reconcilationTransactionAmount"` } type ReconcileTransactionsResponse struct { Message string ReconcilationTransaction []postgres.GetTransactionsForAccountRow } func (h *Handler) reconcileTransactions(c *gin.Context) { var request ReconcileTransactionsRequest err := c.BindJSON(&request) if err != nil { c.AbortWithError(http.StatusBadRequest, fmt.Errorf("parse request: %w", err)) return } tx, err := h.Service.BeginTx(c.Request.Context(), &sql.TxOptions{}) if err != nil { 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) if err != nil { c.AbortWithError(http.StatusInternalServerError, fmt.Errorf("update transaction: %w", err)) return } } err = tx.Commit() if err != nil { c.AbortWithError(http.StatusInternalServerError, fmt.Errorf("commit: %w", err)) return } c.JSON(http.StatusOK, ReconcileTransactionsResponse{ Message: fmt.Sprintf("Set status for %d transactions", len(request.TransactionIDs)), ReconcilationTransaction: nil, }) }