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

Review Result ?

solutionbowl/bet-service · 1d0ddd70
Initial commit includes node_modules and .env in .gitignore and adds a large package-lock.json. The commit message is uninformative. Including node_modules in .gitignore is good, but ignoring .env without example files might cause onboarding issues. The package-lock.json inclusion is necessary but noisy in first commit. Lack of source code or project scaffolding limits immediate business value. No code means low bug risk but no security controls are demonstrated. The commit message does not communicate intent or scope.
Quality ?
50%
Security ?
30%
Business Value ?
40%
Maintainability ?
65%
Issues & Suggested Fixes ?
1AI detects the issue
2Shows file, line, or evidence
3Suggests the fix to apply
Uninformative
Where commit message
Issue / Evidence uninformative
Suggested Fix provide descriptive message summarizing project purpose and contents
Ignore .Env Without .Env.example
Where .gitignore:2
Issue / Evidence ignore .env without .env.example
Suggested Fix add .env.example to help with environment setup
Large Noisy Addition
Where package-lock.json:1
Issue / Evidence large noisy addition
Suggested Fix consider committing minimal package.json with dependencies and generate lock file later
First Commit
Where commit message
Issue / Evidence first commit
Suggested Fix add initial source code or basic project scaffold to increase business value
First Commit
Where commit message
Issue / Evidence first commit
Suggested Fix include readme file describing project to improve codebase documentation
Code Change Preview · .gitignore ?
Removed / Before Commit
- diff --git a/.gitignore b/.gitignore
- new file mode 100644
- index 0000000..1dcef2d
- \ No newline at end of file
Added / After Commit
+ diff --git a/.gitignore b/.gitignore
+ new file mode 100644
+ index 0000000..1dcef2d
+ node_modules
+ .env
+ \ No newline at end of file
Removed / Before Commit
- diff --git a/package-lock.json b/package-lock.json
- new file mode 100644
- index 0000000..1668c5f
Added / After Commit
+ diff --git a/package-lock.json b/package-lock.json
+ new file mode 100644
+ index 0000000..1668c5f
+ {
+   "name": "bet-service",
+   "version": "1.0.0",
+   "lockfileVersion": 3,
+   "requires": true,
+   "packages": {
+     "": {
+       "name": "bet-service",
+       "version": "1.0.0",
+       "license": "ISC",
+       "dependencies": {
+         "cors": "^2.8.6",
+         "dotenv": "^17.3.1",
+         "express": "^5.2.1",
+         "jsonwebtoken": "^9.0.3",
Removed / Before Commit
- diff --git a/package.json b/package.json
- new file mode 100644
- index 0000000..6956909
Added / After Commit
+ diff --git a/package.json b/package.json
+ new file mode 100644
+ index 0000000..6956909
+ {
+   "name": "bet-service",
+   "version": "1.0.0",
+   "description": "Bet Service",
+   "main": "server.js",
+   "scripts": {
+     "test": "echo \"Error: no test specified\" && exit 1",
+     "start": "node server.js"
+   },
+   "author": "",
+   "license": "ISC",
+   "dependencies": {
+     "cors": "^2.8.6",
+     "dotenv": "^17.3.1",
+     "express": "^5.2.1",
Removed / Before Commit
- diff --git a/server.js b/server.js
- new file mode 100644
- index 0000000..971a6c3
Added / After Commit
+ diff --git a/server.js b/server.js
+ new file mode 100644
+ index 0000000..971a6c3
+ require("dotenv").config();
+ const http = require("http");
+ const app = require("./src/app");
+ const { getSocket } = require("./src/utils/socketClient");
+ require("./src/config/db");
+ 
+ const PORT = process.env.PORT || 4000;
+ 
+ const server = http.createServer(app);
+ getSocket();
+ 
+ server.listen(PORT, () => {
+     console.log(`Bet service is running on port ${PORT}`);
+ });
Removed / Before Commit
- diff --git a/src/app.js b/src/app.js
- new file mode 100644
- index 0000000..bdf841f
Added / After Commit
+ diff --git a/src/app.js b/src/app.js
+ new file mode 100644
+ index 0000000..bdf841f
+ const express = require("express");
+ const cors = require("cors");
+ const betRoutes = require("./routes/betRoutes");
+ require("./config/db");
+ const app = express();
+ 
+ app.use(cors({
+   origin: "*",
+   methods: ["GET", "POST", "PUT", "DELETE", "PATCH"],
+   allowedHeaders: ["Content-Type", "Authorization", "Origin", "testing"]
+ }));
+ 
+ app.use(express.json());
+ app.use("/api/bets", betRoutes);
+ 
Removed / Before Commit
- diff --git a/src/config/db.js b/src/config/db.js
- new file mode 100644
- index 0000000..023dbb9
Added / After Commit
+ diff --git a/src/config/db.js b/src/config/db.js
+ new file mode 100644
+ index 0000000..023dbb9
+ const mongoose = require("mongoose");
+ 
+ mongoose.connect(process.env.MONGO_URI)
+   .then(() => console.log("MongoDB connected for Website Service"))
+   .catch(err => console.error("MongoDB connection error:", err));
+ 
+ module.exports = mongoose;
Removed / Before Commit
- diff --git a/src/controllers/bet.controller.js b/src/controllers/bet.controller.js
- new file mode 100644
- index 0000000..6008e85
Added / After Commit
+ diff --git a/src/controllers/bet.controller.js b/src/controllers/bet.controller.js
+ new file mode 100644
+ index 0000000..6008e85
+ const Bet = require("../models/Bet");
+ const RacingBet = require("../models/RacingBet");
+ const RaceMarket = require("../models/RaceMarket");
+ const Ledger = require("../models/Ledger");
+ const mongoose = require("mongoose");
+ const Wallet = require("../models/Wallet");
+ const { emitRaceOdds } = require("../utils/socketClient");
+ 
+ exports.placeBet = async (req, res) => {
+   try {
+     const tenant = req.tenant;
+     const user_id = req.user.userId; // Assuming user_id comes from auth token
+ 
+     const tenant_id = tenant ? tenant._id : null;
+ 
Removed / Before Commit
- diff --git a/src/middleware/authMiddleware.js b/src/middleware/authMiddleware.js
- new file mode 100644
- index 0000000..bc7c5fd
- \ No newline at end of file
Added / After Commit
+ diff --git a/src/middleware/authMiddleware.js b/src/middleware/authMiddleware.js
+ new file mode 100644
+ index 0000000..bc7c5fd
+ const jwt = require("jsonwebtoken");
+ 
+ module.exports = (req, res, next) => {
+ 
+   const authHeader = req.headers.authorization;
+ 
+   if (!authHeader || !authHeader.startsWith("Bearer "))
+     return res.status(401).json({ message: "Unauthorized" });
+ 
+   const token = authHeader.split(" ")[1];
+ 
+   try {
+     const decoded = jwt.verify(token, process.env.JWT_SECRET);
+ 
+     req.user = decoded;
Removed / Before Commit
- diff --git a/src/middleware/tenantMiddleware.js b/src/middleware/tenantMiddleware.js
- new file mode 100644
- index 0000000..0c0c66a
Added / After Commit
+ diff --git a/src/middleware/tenantMiddleware.js b/src/middleware/tenantMiddleware.js
+ new file mode 100644
+ index 0000000..0c0c66a
+ const Tenant = require("../models/Tenant");
+ 
+ const checkTenant = async (req, res, next) => {
+   try {
+     const isTesting = req.headers.testing === "true";
+ 
+     // 👉 Agar testing header true hai to static tenant
+     if (isTesting) {
+       var tenant = await Tenant.findOne({
+         _id: "69aec4b98071b2b19035d1cd",
+         status: "ACTIVE"
+       });
+       req.tenant = tenant;
+       next();
+       return;
Removed / Before Commit
- diff --git a/src/models/Bet.js b/src/models/Bet.js
- new file mode 100644
- index 0000000..5015b3a
Added / After Commit
+ diff --git a/src/models/Bet.js b/src/models/Bet.js
+ new file mode 100644
+ index 0000000..5015b3a
+ const mongoose = require("mongoose");
+ const { v4: uuidv4 } = require("uuid");
+ 
+ const BetSchema = new mongoose.Schema({
+   user_id: { type: mongoose.Schema.Types.ObjectId, ref: "User", required: true },
+   tenant_id: { type: mongoose.Schema.Types.ObjectId, required: true },
+   bet_id: { type: String, default: uuidv4, unique: true },
+   bet_type: {
+     type: String,
+     enum: ["racing", "casino", "fancy"],
+     required: true
+   },
+   bet_amount: { type: Number, required: true },
+   return_amount: { type: Number, default: 0 },
+   bet_status: {
Removed / Before Commit
- diff --git a/src/models/Ledger.js b/src/models/Ledger.js
- new file mode 100644
- index 0000000..0a6722e
Added / After Commit
+ diff --git a/src/models/Ledger.js b/src/models/Ledger.js
+ new file mode 100644
+ index 0000000..0a6722e
+ const mongoose = require("mongoose");
+ 
+ const LedgerSchema = new mongoose.Schema({
+   user_id: { type: mongoose.Schema.Types.ObjectId, ref: "User", required: true },
+   tenant_id: { type: mongoose.Schema.Types.ObjectId, required: true },
+   amount: { type: Number, required: true },
+   transaction_type: {
+     type: String,
+     enum: ["debit", "credit"],
+     required: true
+   },
+   type: {
+     type: String,
+     enum: ["deposit", "withdrawal", "bet", "manual"],
+     required: true
Removed / Before Commit
- diff --git a/src/models/RaceMarket.js b/src/models/RaceMarket.js
- new file mode 100644
- index 0000000..64fd9ac
Added / After Commit
+ diff --git a/src/models/RaceMarket.js b/src/models/RaceMarket.js
+ new file mode 100644
+ index 0000000..64fd9ac
+ const mongoose = require("mongoose");
+ 
+ const RaceMarketSchema = new mongoose.Schema({}, { strict: false });
+ 
+ module.exports = mongoose.model("RaceMarket", RaceMarketSchema);
Removed / Before Commit
- diff --git a/src/models/RacingBet.js b/src/models/RacingBet.js
- new file mode 100644
- index 0000000..ad3042c
Added / After Commit
+ diff --git a/src/models/RacingBet.js b/src/models/RacingBet.js
+ new file mode 100644
+ index 0000000..ad3042c
+ const mongoose = require("mongoose");
+ 
+ const RacingBetSchema = new mongoose.Schema({
+   bet_id: { type: mongoose.Schema.Types.ObjectId, ref: "Bet", required: true, unique: true },
+   event_id: { type: String, required: true },
+   market_name: { type: String, required: true },
+   market_id: { type: String, required: true },
+   odds_request: { type: Number, required: true },
+   odds_matched: { type: Number },
+   runner_id: { type: String }
+ }, { timestamps: true });
+ 
+ module.exports = mongoose.model("RacingBet", RacingBetSchema);
Removed / Before Commit
- diff --git a/src/models/Tenant.js b/src/models/Tenant.js
- new file mode 100644
- index 0000000..3ffd413
Added / After Commit
+ diff --git a/src/models/Tenant.js b/src/models/Tenant.js
+ new file mode 100644
+ index 0000000..3ffd413
+ const mongoose = require("mongoose");
+ 
+ const TenantSchema = new mongoose.Schema(
+   {},
+   { strict: false },
+ );
+ 
+ module.exports = mongoose.model("Tenant", TenantSchema);
Removed / Before Commit
- diff --git a/src/models/User.js b/src/models/User.js
- new file mode 100644
- index 0000000..55dd599
Added / After Commit
+ diff --git a/src/models/User.js b/src/models/User.js
+ new file mode 100644
+ index 0000000..55dd599
+ const mongoose = require("mongoose");
+ 
+ const UserSchema = new mongoose.Schema({}, { strict: false });
+ 
+ module.exports = mongoose.model("User", UserSchema);
Removed / Before Commit
- diff --git a/src/models/Wallet.js b/src/models/Wallet.js
- new file mode 100644
- index 0000000..23d4811
Added / After Commit
+ diff --git a/src/models/Wallet.js b/src/models/Wallet.js
+ new file mode 100644
+ index 0000000..23d4811
+ const mongoose = require("mongoose");
+ 
+ const WalletSchema = new mongoose.Schema({}, { strict: false });
+ 
+ module.exports = mongoose.model("Wallet", WalletSchema);
Removed / Before Commit
- diff --git a/src/routes/betRoutes.js b/src/routes/betRoutes.js
- new file mode 100644
- index 0000000..9f907bd
Added / After Commit
+ diff --git a/src/routes/betRoutes.js b/src/routes/betRoutes.js
+ new file mode 100644
+ index 0000000..9f907bd
+ const express = require("express");
+ const router = express.Router();
+ const betController = require("../controllers/bet.controller");
+ const authMiddleware = require("../middleware/authMiddleware");
+ const { checkTenant } = require("../middleware/tenantMiddleware");
+ 
+ // Route to place a bet
+ router.post("/place", checkTenant, authMiddleware, betController.placeBet);
+ 
+ // Get all bets (placeholder for now)
+ router.get("/", checkTenant, authMiddleware, betController.getBets);
+ 
+ module.exports = router;
Removed / Before Commit
- diff --git a/src/utils/socketClient.js b/src/utils/socketClient.js
- new file mode 100644
- index 0000000..2bcfeed
Added / After Commit
+ diff --git a/src/utils/socketClient.js b/src/utils/socketClient.js
+ new file mode 100644
+ index 0000000..2bcfeed
+ const { io } = require("socket.io-client");
+ 
+ let socket = null;
+ 
+ const getSocket = () => {
+   if (socket && socket.connected) return socket;
+ 
+   socket = io("https://api.digitalbowls.com", {
+     transports: ["websocket"],
+     reconnection: true,
+     reconnectionAttempts: 5,
+     reconnectionDelay: 2000
+   });
+ 
+   socket.on("connect", () => {