Showing AI reviews for bet-service
Project AI Score ?
62%
Quality Avg ?
63%
Security Avg ?
59%
Reviews ?
92

Review Result ?

solutionbowl/bet-service · e43af628
The commit introduces multi-bet exposure calculation, updating, and clearing functionalities with associated routes and model changes. The core logic appears comprehensive and integrates well with existing models. However, quality and security are lowered due to use of console.log for debugging in production code, lack of input validation on incoming request bodies, and no authentication or authorization enforced on internal routes.
Quality ?
75%
Security ?
40%
Business Value ?
80%
Maintainability ?
73%
Issues & Suggested Fixes ?
1AI detects the issue
2Shows file, line, or evidence
3Suggests the fix to apply
Console.log Used For Debug Output In Produ...
Where src/controllers/bet.controller.js:83
Issue / Evidence console.log used for debug output in production
Suggested Fix replace with a proper logger and consider log level management
Console.log Used For Debug Output In Produ...
Where src/controllers/multiBet.controller.js:406
Issue / Evidence console.log used for debug output in production
Suggested Fix replace with a proper logger and consider log level management
Console.log Used For Debug Output In Produ...
Where src/controllers/multiBet.controller.js:411
Issue / Evidence console.log used for debug output in production
Suggested Fix replace with a proper logger and consider log level management
Console.log Used For Debug Output In Produ...
Where src/controllers/multiBet.controller.js:444
Issue / Evidence console.log used for debug output in production
Suggested Fix replace with a proper logger and consider log level management
Console.log Used For Debug Output In Produ...
Where src/controllers/multiBet.controller.js:449
Issue / Evidence console.log used for debug output in production
Suggested Fix replace with a proper logger and consider log level management
Error Handler Just Logs Error
Where src/controllers/multiBet.controller.js:420
Issue / Evidence Error handler just logs error
Suggested Fix consider more robust error reporting or monitoring
Missing Validation
Where src/controllers/multiBet.controller.js:438
Issue / Evidence Missing input validation for 'bet_id' in clearMultiBetExposures
Suggested Fix add validation to prevent invalid data processing
Security Issue
Where src/routes/multiBetRoutes.js:34
Issue / Evidence Route marked as internal but has no authentication
Suggested Fix consider adding inter-service authorization or token validation to improve security
Security Issue
Where src/routes/multiBetRoutes.js:44
Issue / Evidence Route marked as internal but has no authentication
Suggested Fix consider adding inter-service authorization or token validation to improve security
Code Change Preview · src/controllers/bet.controller.js ?
Removed / Before Commit
- diff --git a/src/controllers/bet.controller.js b/src/controllers/bet.controller.js
- index 4375b1f..1a64a29 100644
- Math.max(placePnL, notPlacePnL, 0)
- );
- 
- await Exposure.updateOne(
- {
- user_id,
Added / After Commit
+ diff --git a/src/controllers/bet.controller.js b/src/controllers/bet.controller.js
+ index 4375b1f..1a64a29 100644
+ Math.max(placePnL, notPlacePnL, 0)
+ );
+ 
+   console.log(exposureProfit, exposure);
+ 
+ await Exposure.updateOne(
+ {
+ user_id,
Removed / Before Commit
- diff --git a/src/controllers/multiBet.controller.js b/src/controllers/multiBet.controller.js
- index 0e50ce2..5848b98 100644
- const mongoose = require("mongoose");
- const { getHierarchyIds } = require("../services/hierarchyService");
- const { emitBalanceUpdate } = require("../utils/socketClient");
- 
- /**
- * Place Multi-Bet (DOUBLE/TRIPLE)
- });
- await ledger.save();
- 
- return res.status(200).json({
- status: true,
- message: `${betType} bet placed successfully`,
- };
- 
- /**
-  * Settle Multi-Bet (Auto-fetch positions from RaceMarket)
Added / After Commit
+ diff --git a/src/controllers/multiBet.controller.js b/src/controllers/multiBet.controller.js
+ index 0e50ce2..5848b98 100644
+ const mongoose = require("mongoose");
+ const { getHierarchyIds } = require("../services/hierarchyService");
+ const { emitBalanceUpdate } = require("../utils/socketClient");
+ const { calculateMultiBetExposures, updateExposuresAfterLegWin, clearMultiBetExposures } = require("../utils/multiBetExposure");
+ 
+ /**
+ * Place Multi-Bet (DOUBLE/TRIPLE)
+ });
+ await ledger.save();
+ 
+     // Calculate and create exposures for all legs
+     await calculateMultiBetExposures(bet._id, user_id, tenant_id, validatedLegs, stake);
+ 
+ return res.status(200).json({
+ status: true,
+ message: `${betType} bet placed successfully`,
Removed / Before Commit
- diff --git a/src/models/Exposure.js b/src/models/Exposure.js
- index c2effc8..9b488b7 100644
- const exposureSchema = new mongoose.Schema({
- user_id: mongoose.Schema.Types.ObjectId,
- tenant_id: mongoose.Schema.Types.ObjectId,
- race_id: mongoose.Schema.Types.ObjectId,
- market_id: String,
- runner_id: String,
- exposureProfit: { type: Number, default: 0 },
-     exposure: { type: Number, default: 0 }
- }, { timestamps: true });
- 
- module.exports = mongoose.model("Exposure", exposureSchema);
- \ No newline at end of file
Added / After Commit
+ diff --git a/src/models/Exposure.js b/src/models/Exposure.js
+ index c2effc8..9b488b7 100644
+ const exposureSchema = new mongoose.Schema({
+ user_id: mongoose.Schema.Types.ObjectId,
+ tenant_id: mongoose.Schema.Types.ObjectId,
+     bet_id: mongoose.Schema.Types.ObjectId,
+ race_id: mongoose.Schema.Types.ObjectId,
+ market_id: String,
+ runner_id: String,
+ exposureProfit: { type: Number, default: 0 },
+     exposure: { type: Number, default: 0 },
+ 
+     // Multi-bet specific fields
+     is_multi_bet: { type: Boolean, default: false },
+     leg_number: { type: Number, default: 1 },
+     stake_at_leg: { type: Number, default: 0 },
+     leg_profit: { type: Number, default: 0 },
+     is_active: { type: Boolean, default: true }
Removed / Before Commit
- diff --git a/src/routes/multiBetRoutes.js b/src/routes/multiBetRoutes.js
- index 899a3aa..82ab6b9 100644
- );
- 
- /**
-  * @route   POST /api/bets/settle-multi-bet
-  * @desc    Settle a multi-bet after all races (auto-fetch positions)
-  * @access  Private (Admin/Settlement service)
- */
- router.post(
-   '/settle-multi-bet',
-   authMiddleware,
-   multiBetController.settleMultiBet
- );
- 
- /**
-  * @route   POST /api/bets/auto-settle-multi-bets
-  * @desc    Auto-settle all pending multi-bets for logged-in user
Added / After Commit
+ diff --git a/src/routes/multiBetRoutes.js b/src/routes/multiBetRoutes.js
+ index 899a3aa..82ab6b9 100644
+ );
+ 
+ /**
+  * @route   POST /api/bets/update-multi-bet-exposures
+  * @desc    Update exposures after a leg wins (called from tenant-service)
+  * @access  Internal (no auth - inter-service call)
+ */
+ router.post(
+   '/update-multi-bet-exposures',
+   multiBetController.updateMultiBetExposures
+ );
+ 
+ /**
+  * @route   POST /api/bets/clear-multi-bet-exposures
+  * @desc    Clear all exposures for a bet (called from tenant-service)
+  * @access  Internal (no auth - inter-service call)
Removed / Before Commit
- diff --git a/src/utils/multiBetExposure.js b/src/utils/multiBetExposure.js
- new file mode 100644
- index 0000000..f3966ee
Added / After Commit
+ diff --git a/src/utils/multiBetExposure.js b/src/utils/multiBetExposure.js
+ new file mode 100644
+ index 0000000..f3966ee
+ const Exposure = require("../models/Exposure");
+ const RacingBet = require("../models/RacingBet");
+ const mongoose = require("mongoose");
+ 
+ /**
+  * Calculate and create exposures for multi-bet
+  * Uses cascading calculation based on confirmed won legs
+  */
+ async function calculateMultiBetExposures(betId, userId, tenantId, legs, originalStake) {
+   try {
+     // Calculate confirmed amount up to last won leg
+     const sortedLegs = await RacingBet.find({ bet_id: betId })
+       .sort({ leg_number: 1 });
+ 
+     let confirmedAmount = originalStake;