Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
80 changes: 44 additions & 36 deletions Backend/server.js
Original file line number Diff line number Diff line change
Expand Up @@ -75,73 +75,81 @@




const express = require("express");
const mongoose = require("mongoose");
const cors = require("cors");
const cron = require("node-cron");
const moment = require("moment-timezone");
const crypto = require("crypto");
require("dotenv").config(); // Load environment variables

const userRoutes = require("./routes/userRoutes");
const teamRoutes = require("./routes/teamRoutes");
const dateContestRoutes = require("./routes/dateContestRoutes");
const contestRoutes = require("./routes/contestRoutes");
// const newcontestRoutes = require("./routes/newcontestRoutes");
const DateContest = require("./models/DateContest");

// โœ… Load secret from .env for security
const secret = process.env.SECRET_KEY || "default_secret_key";

// โœ… Securely set `userId` (replace logic with actual user authentication flow)
const userId = "sample-uuid-user-id"; // Example - Use your logic to get the user ID

// โœ… Crypto Hash Generation
const hash = crypto.createHmac("sha256", secret).update(userId).digest("hex");

const app = express();
app.use(express.json());
app.use(cors());

// โœ… MongoDB Connection with Optimized Options
mongoose
.connect("mongodb+srv://mayankapi6:g58Rc8dB7OgwgfgD@trazex.vra1e.mongodb.net/Trazex", {
useNewUrlParser: true,
useUnifiedTopology: true,
})
.connect(process.env.MONGO_URI || "mongodb://localhost:27017/Trazex")
.then(() => console.log("โœ… Connected to MongoDB"))
.catch((err) => console.error("โŒ MongoDB Connection Error:", err));


// โœ… Routes Setup
app.use(userRoutes);
app.use("/api/team", teamRoutes);
// app.use("/api1", newcontestRoutes);
app.use("/api", dateContestRoutes);
app.use("/api/contests",(req, res, next) => {
console.log("โœ… Request received:", req.method, req.url);
next();
app.use("/api/contests", (req, res, next) => {
console.log("โœ… Request received:", req.method, req.url);
next();
}, contestRoutes);

// ๐Ÿ•ž Auto-update contest status at 3:31 PM
cron.schedule("31 15 * * *", async () => {
try {
const today = moment().tz("Asia/Kolkata").format("D MMM");
await DateContest.updateMany({ date: today }, { $set: { status: "concluded" } });
console.log(`โœ… Contest for ${today} moved to 'Concluded'.`);
} catch (error) {
console.error("โŒ Error updating contest status:", error);
}
try {
const today = moment().tz("Asia/Kolkata").format("D MMM");
await DateContest.updateMany({ date: today }, { $set: { status: "concluded" } });
console.log(`โœ… Contest for ${today} moved to 'Concluded'.`);
} catch (error) {
console.error("โŒ Error updating contest status:", error);
}
});

// โณ Auto-create the next day's contest at 3:35 PM
cron.schedule("35 15 * * *", async () => {
try {
const futureMoment = moment().tz("Asia/Kolkata").add(1, "days");
const newDate = futureMoment.format("D MMM");
const newDay = futureMoment.format("ddd").toUpperCase();

if (newDay === "SAT" || newDay === "SUN") return;

const contestExists = await DateContest.findOne({ date: newDate });
if (!contestExists) {
await DateContest.insertMany([
{ exchange: "NSE", date: newDate, day: newDay, endTime: "15:30", status: "upcoming" },
{ exchange: "BSE", date: newDate, day: newDay, endTime: "15:30", status: "upcoming" }
]);
console.log(`โœ… Created new contests for ${newDate}.`);
}
} catch (error) {
console.error("โŒ Error creating new contest:", error);
try {
const futureMoment = moment().tz("Asia/Kolkata").add(1, "days");
const newDate = futureMoment.format("D MMM");
const newDay = futureMoment.format("ddd").toUpperCase();

if (newDay === "SAT" || newDay === "SUN") return;

const contestExists = await DateContest.findOne({ date: newDate });
if (!contestExists) {
await DateContest.insertMany([
{ exchange: "NSE", date: newDate, day: newDay, endTime: "15:30", status: "upcoming" },
{ exchange: "BSE", date: newDate, day: newDay, endTime: "15:30", status: "upcoming" }
]);
console.log(`โœ… Created new contests for ${newDate}.`);
}
} catch (error) {
console.error("โŒ Error creating new contest:", error);
}
});

app.listen(3000, () => console.log("๐Ÿš€ Server running on port 3000"));
// โœ… Server Setup
const PORT = process.env.PORT || 3000;
app.listen(PORT, () => console.log(`๐Ÿš€ Server running on port ${PORT}`));
43 changes: 31 additions & 12 deletions frontend/index.html
Original file line number Diff line number Diff line change
@@ -1,14 +1,33 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<link rel="icon" type="image/png" href="https://res.cloudinary.com/dbrb9ptmn/image/upload/v1740471306/hedclddeucmiuq8h3wfr.png" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>TRAZEX11</title>
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;700&display=swap" rel="stylesheet">
</head>
<body>
<div id="root"></div>
<script type="module" src="/src/main.jsx"></script>
</body>
</html>

<head>
<meta charset="UTF-8" />
<link rel="icon" type="image/svg+xml" href="/vite.svg" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Vite + React</title>
</head>

<body>
<div id="root"></div>


<script type="module" src="/src/main.jsx"></script>

<script>
(function () { if (!window.chatbase || window.chatbase("getState") !== "initialized")
{ window.chatbase = (...arguments) =>
{ if (!window.chatbase.q) { window.chatbase.q = [] } window.chatbase.q.push(arguments) };
window.chatbase = new Proxy(window.chatbase, { get(target, prop) { if (prop === "q")
{ return target.q } return (...args) => target(prop, ...args) } }) }
const onLoad = function () { const script = document.createElement("script");
script.src = "https://www.chatbase.co/embed.min.js"; script.id = "-SsGj7dtkDwCnKqWJwe1Y";
script.domain = "www.chatbase.co"; document.body.appendChild(script) };
if (document.readyState === "complete")
{ onLoad() } else { window.addEventListener("load", onLoad)

} })();
</script>
</body>

</html>