diff --git a/handler/transaction.go b/handler/transaction.go
index 99494a3..5713be6 100644
--- a/handler/transaction.go
+++ b/handler/transaction.go
@@ -137,7 +137,8 @@ func (h TransactionImpl) handleUpdateTransaction() http.HandlerFunc {
TreasureChestId: r.FormValue("treasure-chest-id"),
Value: r.FormValue("value"),
Timestamp: r.FormValue("timestamp"),
- Note: r.FormValue("note"),
+ Party: r.FormValue("party"),
+ Description: r.FormValue("description"),
}
if input.Id == "new" {
diff --git a/migration/006_transaction_description.up.sql b/migration/006_transaction_description.up.sql
new file mode 100644
index 0000000..a667fd0
--- /dev/null
+++ b/migration/006_transaction_description.up.sql
@@ -0,0 +1,4 @@
+
+ALTER TABLE "transaction" DROP COLUMN note;
+ALTER TABLE "transaction" ADD COLUMN party TEXT;
+ALTER TABLE "transaction" ADD COLUMN description TEXT;
diff --git a/service/transaction.go b/service/transaction.go
index eb2c2d7..4b789f9 100644
--- a/service/transaction.go
+++ b/service/transaction.go
@@ -73,14 +73,14 @@ func (s TransactionImpl) Add(user *types.User, transactionInput types.Transactio
}
r, err := tx.NamedExec(`
- INSERT INTO "transaction" (id, user_id, account_id, treasure_chest_id, value, timestamp, note, error, created_at, created_by)
- VALUES (:id, :user_id, :account_id, :treasure_chest_id, :value, :timestamp, :note, :error, :created_at, :created_by)`, transaction)
+ INSERT INTO "transaction" (id, user_id, account_id, treasure_chest_id, value, timestamp, party, description, error, created_at, created_by)
+ VALUES (:id, :user_id, :account_id, :treasure_chest_id, :value, :timestamp, :party, :description, :error, :created_at, :created_by)`, transaction)
err = db.TransformAndLogDbError("transaction Insert", r, err)
if err != nil {
return nil, err
}
- if transaction.AccountId != nil {
+ if transaction.Error == nil && transaction.AccountId != nil {
r, err = tx.Exec(`
UPDATE account
SET current_balance = current_balance + ?
@@ -91,7 +91,7 @@ func (s TransactionImpl) Add(user *types.User, transactionInput types.Transactio
}
}
- if transaction.TreasureChestId != nil {
+ if transaction.Error == nil && transaction.TreasureChestId != nil {
r, err = tx.Exec(`
UPDATE treasure_chest
SET current_balance = current_balance + ?
@@ -141,7 +141,7 @@ func (s TransactionImpl) Update(user *types.User, input types.TransactionInput)
return nil, types.ErrInternal
}
- if transaction.AccountId != nil {
+ if transaction.Error == nil && transaction.AccountId != nil {
r, err := tx.Exec(`
UPDATE account
SET current_balance = current_balance - ?
@@ -151,7 +151,7 @@ func (s TransactionImpl) Update(user *types.User, input types.TransactionInput)
return nil, err
}
}
- if transaction.TreasureChestId != nil {
+ if transaction.Error == nil && transaction.TreasureChestId != nil {
r, err := tx.Exec(`
UPDATE treasure_chest
SET current_balance = current_balance - ?
@@ -167,7 +167,7 @@ func (s TransactionImpl) Update(user *types.User, input types.TransactionInput)
return nil, err
}
- if transaction.AccountId != nil {
+ if transaction.Error == nil && transaction.AccountId != nil {
r, err := tx.Exec(`
UPDATE account
SET current_balance = current_balance + ?
@@ -177,7 +177,7 @@ func (s TransactionImpl) Update(user *types.User, input types.TransactionInput)
return nil, err
}
}
- if transaction.TreasureChestId != nil {
+ if transaction.Error == nil && transaction.TreasureChestId != nil {
r, err := tx.Exec(`
UPDATE treasure_chest
SET current_balance = current_balance + ?
@@ -195,7 +195,8 @@ func (s TransactionImpl) Update(user *types.User, input types.TransactionInput)
treasure_chest_id = :treasure_chest_id,
value = :value,
timestamp = :timestamp,
- note = :note,
+ party = :party,
+ description = :description,
error = :error,
updated_at = :updated_at,
updated_by = :updated_by
@@ -275,33 +276,45 @@ func (s TransactionImpl) Delete(user *types.User, id string) error {
_ = tx.Rollback()
}()
- r, err := tx.Exec(`
- UPDATE account
- SET current_balance = current_balance - (SELECT value FROM "transaction" WHERE id = ? AND user_id = ?)
- WHERE id = (SELECT account_id FROM "transaction" WHERE id = ? AND user_id = ?)
- `, uuid, user.Id, uuid, user.Id)
- err = db.TransformAndLogDbError("transaction Delete", r, err)
- if err != nil && err != db.ErrNotFound {
- return err
- }
- r, err = tx.Exec(`
- UPDATE treasure_chest
- SET current_balance = current_balance - (SELECT value FROM "transaction" WHERE id = ? AND user_id = ?)
- WHERE id = (SELECT treasure_chest_id FROM "transaction" WHERE id = ? AND user_id = ?)
- `, uuid, user.Id, uuid, user.Id)
- err = db.TransformAndLogDbError("transaction Delete", r, err)
- if err != nil && err != db.ErrNotFound {
+ var transaction types.Transaction
+ err = tx.Get(&transaction, `SELECT * FROM "transaction" WHERE user_id = ? AND id = ?`, user.Id, uuid)
+ err = db.TransformAndLogDbError("transaction Delete", nil, err)
+ if err != nil {
return err
}
- r, err = tx.Exec("DELETE FROM \"transaction\" WHERE id = ? AND user_id = ?", uuid, user.Id)
+ if transaction.Error == nil && transaction.AccountId != nil {
+ r, err := tx.Exec(`
+ UPDATE account
+ SET current_balance = current_balance - ?
+ WHERE id = ?
+ AND user_id = ?`, transaction.Value, transaction.AccountId, user.Id)
+ err = db.TransformAndLogDbError("transaction Delete", r, err)
+ if err != nil && err != db.ErrNotFound {
+ return err
+ }
+ }
+
+ if transaction.Error == nil && transaction.TreasureChestId != nil {
+ r, err := tx.Exec(`
+ UPDATE treasure_chest
+ SET current_balance = current_balance - ?
+ WHERE id = ?
+ AND user_id = ?`, transaction.Value, transaction.TreasureChestId, user.Id)
+ err = db.TransformAndLogDbError("transaction Delete", r, err)
+ if err != nil && err != db.ErrNotFound {
+ return err
+ }
+ }
+
+ r, err := tx.Exec("DELETE FROM \"transaction\" WHERE id = ? AND user_id = ?", uuid, user.Id)
err = db.TransformAndLogDbError("transaction Delete", r, err)
if err != nil {
return err
}
err = tx.Commit()
- err = db.TransformAndLogDbError("transaction RecalculateBalances", nil, err)
+ err = db.TransformAndLogDbError("transaction Delete", nil, err)
if err != nil {
return err
}
@@ -375,8 +388,9 @@ func (s TransactionImpl) RecalculateBalances(user *types.User) error {
if err != nil {
return err
}
+
if transaction.Error != nil {
- log.Info("err: %s", *transaction.Error)
+ continue
}
if transaction.AccountId != nil {
@@ -491,8 +505,14 @@ func (s TransactionImpl) validateAndEnrichTransaction(tx *sqlx.Tx, oldTransactio
return nil, fmt.Errorf("could not parse timestamp: %w", ErrBadRequest)
}
- if input.Note != "" {
- err = validateString(input.Note, "note")
+ if input.Party != "" {
+ err = validateString(input.Party, "party")
+ if err != nil {
+ return nil, err
+ }
+ }
+ if input.Description != "" {
+ err = validateString(input.Description, "description")
if err != nil {
return nil, err
}
@@ -506,7 +526,8 @@ func (s TransactionImpl) validateAndEnrichTransaction(tx *sqlx.Tx, oldTransactio
TreasureChestId: treasureChestUuid,
Value: valueInt,
Timestamp: timestamp,
- Note: input.Note,
+ Party: input.Party,
+ Description: input.Description,
CreatedAt: createdAt,
CreatedBy: createdBy,
diff --git a/template/transaction/transaction.templ b/template/transaction/transaction.templ
index 207f469..d60288d 100644
--- a/template/transaction/transaction.templ
+++ b/template/transaction/transaction.templ
@@ -30,13 +30,14 @@ templ EditTransaction(transaction *types.Transaction, accounts []*types.Account,
{{
var (
timestamp time.Time
- value string
id string
cancelUrl string
)
- note := ""
+ party := ""
+ description := ""
accountId := ""
+ value := "0.00"
treasureChestId := ""
if transaction == nil {
timestamp = time.Now().UTC().Truncate(time.Minute)
@@ -45,7 +46,8 @@ templ EditTransaction(transaction *types.Transaction, accounts []*types.Account,
cancelUrl = "/empty"
} else {
timestamp = transaction.Timestamp.UTC().Truncate(time.Minute)
- note = transaction.Note
+ party = transaction.Party
+ description = transaction.Description
if transaction.AccountId != nil {
accountId = transaction.AccountId.String()
}
@@ -74,11 +76,18 @@ templ EditTransaction(transaction *types.Transaction, accounts []*types.Account,
value={ timestamp.String() }
class="bg-white input datetime"
/>
-
+
+
+
diff --git a/types/transaction.go b/types/transaction.go
index 9aaf74c..3eaa9ad 100644
--- a/types/transaction.go
+++ b/types/transaction.go
@@ -17,8 +17,10 @@ type Transaction struct {
Id uuid.UUID
UserId uuid.UUID `db:"user_id"`
- Timestamp time.Time
- Note string
+ Timestamp time.Time
+ Company string
+ Party string
+ Description string
// account id is only nil, if the transaction is a deposit to a treasure chest
AccountId *uuid.UUID `db:"account_id"`
@@ -40,5 +42,6 @@ type TransactionInput struct {
TreasureChestId string
Value string
Timestamp string
- Note string
+ Party string
+ Description string
}