diff --git a/pkg/api/controllers/transaction_controller.go b/pkg/api/controllers/transaction_controller.go index 5f294ca7d..01fb0ea7f 100644 --- a/pkg/api/controllers/transaction_controller.go +++ b/pkg/api/controllers/transaction_controller.go @@ -216,3 +216,34 @@ func (ctl *TransactionController) PostTransactionMetadata(c *gin.Context) { nil, ) } + +// PostTransactionsBatch godoc +// @Summary Create Transactions Batch +// @Description Create a new ledger transactions batch +// @Tags transactions +// @Schemes +// @Description Commit a batch of new transactions to the ledger +// @Param ledger path string true "ledger" +// @Param transactions body core.Transactions true "transactions" +// @Accept json +// @Produce json +// @Success 200 {object} controllers.BaseResponse +// @Failure 400 +// @Router /{ledger}/transactions/batch [post] +func (ctl *TransactionController) PostTransactionsBatch(c *gin.Context) { + l, _ := c.Get("ledger") + + var transactions core.Transactions + if err := c.ShouldBindJSON(&transactions); err != nil { + ctl.responseError(c, http.StatusBadRequest, err) + return + } + + ret, err := l.(*ledger.Ledger).Commit(c.Request.Context(), transactions.Transactions) + if err != nil { + ctl.responseError(c, http.StatusBadRequest, err) + return + } + + ctl.response(c, http.StatusOK, ret) +} diff --git a/pkg/api/routes/routes.go b/pkg/api/routes/routes.go index 85680e5f1..7e7dd554e 100644 --- a/pkg/api/routes/routes.go +++ b/pkg/api/routes/routes.go @@ -103,6 +103,7 @@ func (r *Routes) Engine(cc cors.Config) *gin.Engine { // TransactionController ledger.GET("/transactions", r.transactionController.GetTransactions) ledger.POST("/transactions", r.transactionController.PostTransaction) + ledger.POST("/transactions/batch", r.transactionController.PostTransactionsBatch) ledger.GET("/transactions/:txid", r.transactionController.GetTransaction) ledger.POST("/transactions/:txid/revert", r.transactionController.RevertTransaction) ledger.POST("/transactions/:txid/metadata", r.transactionController.PostTransactionMetadata) diff --git a/pkg/core/transaction.go b/pkg/core/transaction.go index a6eb3ebfd..de1557f84 100644 --- a/pkg/core/transaction.go +++ b/pkg/core/transaction.go @@ -6,6 +6,11 @@ import ( "fmt" ) +// Transactions struct +type Transactions struct { + Transactions []Transaction `json:"transactions" binding:"required,dive"` +} + type Transaction struct { ID int64 `json:"txid"` Postings Postings `json:"postings"`