diff --git a/pkg/controllers/transactions.go b/pkg/controllers/transactions.go index 819ca80..67930a7 100644 --- a/pkg/controllers/transactions.go +++ b/pkg/controllers/transactions.go @@ -31,6 +31,7 @@ func NewTransactionController(as *services.TransactionService, s *gin.RouterGrou s.PUT("/:id", wc.Edit) s.GET("/:id", wc.Get) s.GET("check", wc.Check) + s.PUT("/bulk", wc.BulkEdit) return wc } @@ -111,6 +112,23 @@ func (wc *TransactionController) Edit(c *gin.Context) { c.JSON(200, wm) } +/* +BulkEdit + Args: + *gin.Context: Gin Application Context +*/ +// ROUTE (PUT /transactions/:id) +func (wc *TransactionController) BulkEdit(c *gin.Context) { + body := new([]models.TransactionEdit) + if err := c.ShouldBind(body); err != nil { + c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) + return + } + + wm := wc.TransactionService.BulkEdit(c, body) + c.JSON(200, wm) +} + /* Get Args: diff --git a/pkg/services/transactions.go b/pkg/services/transactions.go index d0fa4d8..35d0644 100644 --- a/pkg/services/transactions.go +++ b/pkg/services/transactions.go @@ -173,6 +173,45 @@ func (as *TransactionService) Edit(ctx context.Context, body *models.Transaction return tm } +/* +Bulk Edit + +Updates row in transaction table by id. + Args: + context.Context: Application context + ?[]models.Transaction Bulk Edit: Object to edit + string: id to search + Returns: + *models.Transaction: Transaction object from database. +*/ +func (as *TransactionService) BulkEdit(ctx context.Context, body *[]models.TransactionEdit) *[]models.Transaction { + db := as.Db.WithContext(ctx) + tx, _ := db.Begin() + defer tx.Rollback() + + transactions := new([]models.Transaction) + + for _, transaction := range *body { + + amount, _ := transaction.Amount.Float64() + + tm := new(models.Transaction) + tm.Id = transaction.Id + tm.Description = transaction.Description + tm.WalletID = transaction.WalletID + tm.TransactionTypeID = transaction.TransactionTypeID + tm.TransactionDate = transaction.TransactionDate + tm.Amount = float32(math.Round(amount*100) / 100) + + tx.Model(tm).WherePK().UpdateNotZero() + *transactions = append(*transactions, *tm) + } + + tx.Commit() + + return transactions +} + /* Get