Implemented transaction support for ClanShop #763
+114
−110
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Brief description
This PR introduces MongoDB transactions to the ClanShop module to ensure data integrity during item purchases and the subsequent voting process. By using sessions, we guarantee that coin deductions, voting creation, and stock updates either all succeed together or fail without leaving partial data.
Change list
clanShop.service.tsWrappedbuyItemin awithTransactionblock.reserveFundsandstartVotingwithin the same session.cancelTransactionon any service error.clanShopVoting.processor.ts: Refactored the voting resolution logic to use transactions.Testing and verification
The transaction logic was verified using a "Manual Rollback Bomb" test:
Setup: Created a test clan with 5000 coins and a linked player via
mongosh.Execution: Injected a temporary
throw Errorimmediately after the reserveFunds call inbuyItem.Result:
Postman request returned a 500 Internal Server Error as expected.
Database Verification:
gameCoinsremained at 5000 despite the deduction logic having been triggered, confirming the session successfully rolled back the changes.Final Pass: Removed the forced error.