-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathindex.js
103 lines (88 loc) · 3.14 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
const express = require('express');
const mongoose = require("mongoose");
const moment = require('moment');
const path = require('path');
moment().format();
const app = express();
const port = process.env.PORT || 3000;
// Middleware
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs');
app.use(express.static(path.join(__dirname, 'public')));
app.use(express.json());
// Log environment info
console.log('Current directory:', __dirname);
console.log('Views directory:', path.join(__dirname, 'views'));
const mongoURI = process.env.MONGODB_URI || "mongodb+srv://kanishkranjan17:kJjPjGDTqnlWZWEi@leaderboard.5gmx8.mongodb.net/leaderboard";
// Connect to MongoDB
const connectDB = async () => {
try {
await mongoose.connect(mongoURI, {
useNewUrlParser: true,
useUnifiedTopology: true
});
console.log("Connected to MongoDB!");
} catch (error) {
console.error("MongoDB connection error:", error);
process.exit(1);
}
};
// Define User model
const User = mongoose.model("User", new mongoose.Schema({
username: String,
solved: Object,
streak: Number,
questionSolved: Number
}, { strict: false }), "CSES");
// Routes
app.get("/", async (req, res) => {
try {
const users = await User.find();
const usersData = users.map(userData => {
const timeline = Array(7).fill(false);
const noOfDaysInWeek = 7;
for (let index = 0; index < noOfDaysInWeek; index++) {
const reqDate = moment("2024-12-08", "YYYY-MM-DD")
.subtract(index, 'days')
.format('DD/MM/YYYY');
const prevDate = moment("2024-12-08", "YYYY-MM-DD")
.subtract(index + 1, 'days')
.format('DD/MM/YYYY');
if (userData.solved &&
userData.solved[reqDate] !== undefined &&
userData.solved[prevDate] !== undefined) {
timeline[noOfDaysInWeek - index - 1] =
parseInt(userData.solved[reqDate]) > parseInt(userData.solved[prevDate]);
}
}
return {
name: userData.username,
timeline: timeline,
streak: userData.streak || 0,
questionSolved: userData.questionSolved || 0
};
});
res.render("index", { data: usersData });
} catch (error) {
console.error("Error fetching data:", error);
res.status(500).json({ error: "Error fetching data", details: error.message });
}
});
// Error handling middleware
app.use((err, req, res, next) => {
console.error(err.stack);
res.status(500).json({ error: "Something broke!", details: err.message });
});
// Start server
const startServer = async () => {
try {
await connectDB();
app.listen(port, () => {
console.log(`Server running on http://localhost:${port}`);
});
} catch (error) {
console.error("Server startup error:", error);
process.exit(1);
}
};
startServer();