achievements

This commit is contained in:
Ashwani Senapati
2025-11-29 14:40:20 +05:30
parent 18d09383c1
commit ba626fc700
2 changed files with 103 additions and 21 deletions

View File

@@ -57,15 +57,51 @@ export async function POST(req) {
}
}
// export async function GET() {
// try {
// await connectToAchievementsDB();
// const achievements = await Achievement.find({}).sort({ createdAt: -1 });
// return new Response(JSON.stringify(achievements), { status: 200 });
// } catch (error) {
// console.error("❌ Error fetching achievements:", error);
// return new Response(JSON.stringify({ error: error.message }), {
// status: 500,
// });
// }
// }
// api/achievements/route.js
export async function GET() {
try {
await connectToAchievementsDB();
const achievements = await Achievement.find({}).sort({ createdAt: -1 });
return new Response(JSON.stringify(achievements), { status: 200 });
} catch (error) {
console.error("❌ Error fetching achievements:", error);
return new Response(JSON.stringify({ error: error.message }), {
status: 500,
});
const maxRetries = 3;
let lastError;
for (let i = 0; i < maxRetries; i++) {
try {
await connectToAchievementsDB();
const achievements = await Achievement.find({})
.sort({ createdAt: -1 })
.lean()
.maxTimeMS(5000); // 5 second timeout
return new Response(JSON.stringify(achievements), {
status: 200,
headers: { 'Content-Type': 'application/json' }
});
} catch (error) {
lastError = error;
console.error(`❌ Attempt ${i + 1} failed:`, error);
if (i < maxRetries - 1) {
await new Promise(resolve => setTimeout(resolve, 1000)); // Wait 1s before retry
}
}
}
return new Response(
JSON.stringify({
error: "Failed to fetch achievements after retries",
details: lastError.message
}),
{ status: 500 }
);
}

View File

@@ -1,4 +1,4 @@
import mongoose from "mongoose";
//import mongoose from "mongoose";
// const connectToAchievementsDB = async () => {
@@ -13,20 +13,66 @@ import mongoose from "mongoose";
// console.error(" MongoDB Achievements connection error:", error);
// }
// };
const connectToAchievementsDB = async () => {
if (mongoose.connection.readyState >= 1) {
console.log("✅ Already connected to Achievements MongoDB");
return;
// const connectToAchievementsDB = async () => {
// if (mongoose.connection.readyState >= 1) {
// console.log("✅ Already connected to Achievements MongoDB");
// return;
// }
// try {
// await mongoose.connect(process.env.MongoURL, {
// dbName: "achievementDB",
// });
// console.log("✅ Connected to Achievements MongoDB");
// } catch (error) {
// console.error("❌ MongoDB Achievements connection error:", error);
// }
// };
// export default connectToAchievementsDB;
// lib/achievementsDB.js
import mongoose from "mongoose";
const MONGODB_URI = process.env.MongoURL;
if (!MONGODB_URI) {
throw new Error("Please define MONGODB_URI in .env.local");
}
let cached = global.mongoose;
if (!cached) {
cached = global.mongoose = { conn: null, promise: null };
}
async function connectToAchievementsDB() {
if (cached.conn) {
console.log("✅ Using cached database connection");
return cached.conn;
}
if (!cached.promise) {
const opts = {
bufferCommands: false,
maxPoolSize: 10, // Maintain up to 10 connections
serverSelectionTimeoutMS: 5000,
socketTimeoutMS: 45000,
};
cached.promise = mongoose.connect(MONGODB_URI, opts).then((mongoose) => {
console.log("✅ New database connection established");
return mongoose;
});
}
try {
await mongoose.connect(process.env.MongoURL, {
dbName: "achievementDB",
});
console.log("✅ Connected to Achievements MongoDB");
} catch (error) {
console.error("❌ MongoDB Achievements connection error:", error);
cached.conn = await cached.promise;
} catch (e) {
cached.promise = null;
throw e;
}
};
return cached.conn;
}
export default connectToAchievementsDB;