diff --git a/service/account.go b/service/account.go index 068d8f6..6ff2213 100644 --- a/service/account.go +++ b/service/account.go @@ -192,6 +192,16 @@ func (s AccountImpl) Delete(user *types.User, id string) error { return fmt.Errorf("could not parse Id: %w", ErrBadRequest) } + transactionsCount := 0 + err = s.db.Get(&transactionsCount, `SELECT COUNT(*) FROM "transaction" WHERE user_id = ? AND account_id = ?`, user.Id, uuid) + err = db.TransformAndLogDbError("account Delete", nil, err) + if err != nil { + return err + } + if transactionsCount > 0 { + return fmt.Errorf("account has transactions, cannot delete: %w", ErrBadRequest) + } + res, err := s.db.Exec("DELETE FROM account WHERE id = ? and user_id = ?", uuid, user.Id) err = db.TransformAndLogDbError("account Delete", res, err) if err != nil { diff --git a/service/treasure_chest.go b/service/treasure_chest.go index ab02117..e867ea0 100644 --- a/service/treasure_chest.go +++ b/service/treasure_chest.go @@ -233,6 +233,16 @@ func (s TreasureChestImpl) Delete(user *types.User, idStr string) error { return fmt.Errorf("treasure chest has children: %w", ErrBadRequest) } + transactionsCount := 0 + err = s.db.Get(&transactionsCount, `SELECT COUNT(*) FROM "transaction" WHERE user_id = ? AND treasure_chest_id = ?`, user.Id, id) + err = db.TransformAndLogDbError("treasureChest Delete", nil, err) + if err != nil { + return err + } + if transactionsCount > 0 { + return fmt.Errorf("treasure chest has transactions: %w", ErrBadRequest) + } + r, err := s.db.Exec(`DELETE FROM treasure_chest WHERE id = ? AND user_id = ?`, id, user.Id) err = db.TransformAndLogDbError("treasureChest Delete", r, err) if err != nil {