diff --git a/data/data.go b/data/data.go index be809fb..42e3a90 100644 --- a/data/data.go +++ b/data/data.go @@ -72,9 +72,9 @@ func (d *DataClient) Seed() (int64, error) { return rows, nil } -// InsertTransactions inserts a slice of Transaction into a database, returning the amount inserted and any error encountered -func (d *DataClient) InsertTransactions(transactions []models.Transaction) (int64, error) { - var rowsInserted int64 +// InsertTransactions inserts a slice of Transaction into a database, returning the transactions inserted and any error encountered +func (d *DataClient) InsertTransactions(transactions []models.Transaction) ([]models.Transaction, error) { + var rowsInserted []models.Transaction // Start transaction tx, err := d.DB.Beginx() @@ -87,22 +87,25 @@ func (d *DataClient) InsertTransactions(transactions []models.Transaction) (int6 // Check values if transaction.MembreID == "" { tx.Rollback() - return 0, errors.New("Cannot insert transaction with no membre_id") + return rowsInserted, errors.New("Cannot insert transaction with no membre_id") } - result, err := tx.NamedExec("INSERT INTO transactions (membre_id, given_at, is_perpetual) VALUES (:membre_id, current_timestamp, :is_perpetual);", &transaction) + rows, err := tx.NamedQuery("INSERT INTO transactions (membre_id, given_at, is_perpetual) VALUES (:membre_id, current_timestamp, :is_perpetual) RETURNING id, membre_id, is_perpetual;", &transaction) if err != nil { tx.Rollback() - return 0, err + return rowsInserted, err } + defer rows.Close() - rows, err := result.RowsAffected() - if err != nil { - tx.Rollback() - return 0, err + for rows.Next() { + var transactionRow models.Transaction + if err := rows.Scan(&transactionRow.ID, &transactionRow.MembreID, &transactionRow.IsPerpetual); err != nil { + tx.Rollback() + return rowsInserted, err + } + + rowsInserted = append(rowsInserted, transactionRow) } - - rowsInserted += rows } err = tx.Commit() diff --git a/handlers/transaction.go b/handlers/transaction.go index b9141e1..9b313d6 100644 --- a/handlers/transaction.go +++ b/handlers/transaction.go @@ -96,15 +96,14 @@ func PostTransactions(c echo.Context) error { } } - rows, err := client.InsertTransactions(transactions) + insertedTransactions, err := client.InsertTransactions(transactions) + response.Data.Transactions = insertedTransactions if err != nil { response.Message = fmt.Sprintf("Error during client.InsertTransactions(): %s", err) return c.JSON(statusCode, response) } - response.Data.RowsInserted = rows - statusCode = http.StatusCreated response.Message = "Insert successful" diff --git a/responses/responses.go b/responses/responses.go index 1a9a212..fcadcce 100644 --- a/responses/responses.go +++ b/responses/responses.go @@ -19,7 +19,7 @@ type GetMembreResponse struct { } type PostTransactionsResponseData struct { - RowsInserted int64 `json:"rows_inserted"` + Transactions []models.Transaction `json:"transactions"` } type PostTransactionsResponse struct {