From 8afb5012b292e249a2fff0605ebfc5ee956d3c24 Mon Sep 17 00:00:00 2001 From: Ashwani Senapati Date: Sat, 29 Nov 2025 17:39:17 +0530 Subject: [PATCH] achievements --- src/app/api/achievements/route.js | 90 +++++++++++------------ src/lib/achievementsDB.js | 116 +++++++++++++++--------------- src/models/Achievements.js | 2 +- 3 files changed, 104 insertions(+), 104 deletions(-) diff --git a/src/app/api/achievements/route.js b/src/app/api/achievements/route.js index ba5ff66..e9cd9a0 100644 --- a/src/app/api/achievements/route.js +++ b/src/app/api/achievements/route.js @@ -57,51 +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() { - 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 - } - } + 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, + }); } - - return new Response( - JSON.stringify({ - error: "Failed to fetch achievements after retries", - details: lastError.message - }), - { status: 500 } - ); } +// api/achievements/route.js +// export async function GET() { +// 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 } +// ); +// } diff --git a/src/lib/achievementsDB.js b/src/lib/achievementsDB.js index 13bc159..e45745c 100644 --- a/src/lib/achievementsDB.js +++ b/src/lib/achievementsDB.js @@ -1,4 +1,4 @@ -//import mongoose from "mongoose"; +import mongoose from "mongoose"; // const connectToAchievementsDB = async () => { @@ -13,66 +13,66 @@ // console.error(" MongoDB Achievements connection error:", error); // } // }; -// 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; - }); +const connectToAchievementsDB = async () => { + if (mongoose.connection.readyState >= 1) { + console.log("✅ Already connected to Achievements MongoDB"); + return; } try { - cached.conn = await cached.promise; - } catch (e) { - cached.promise = null; - throw e; + await mongoose.connect(process.env.MongoURL, { + dbName: "achievementDB", + }); + console.log("✅ Connected to Achievements MongoDB"); + } catch (error) { + console.error("❌ MongoDB Achievements connection error:", error); } - - return cached.conn; -} +}; 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 { +// cached.conn = await cached.promise; +// } catch (e) { +// cached.promise = null; +// throw e; +// } + +// return cached.conn; +// } + +// export default connectToAchievementsDB; diff --git a/src/models/Achievements.js b/src/models/Achievements.js index 37dd768..44ce2e0 100644 --- a/src/models/Achievements.js +++ b/src/models/Achievements.js @@ -18,4 +18,4 @@ const achievementSchema = new mongoose.Schema( ); export default mongoose.models.achievements || - mongoose.model("achievements", achievementSchema); + mongoose.model("achievements", achievementSchema); \ No newline at end of file