fix database connection error handling to prevent app crashes

- Add proper error handling in database connection attempts
- Set g.db to null when connection fails to prevent subsequent crashes
- Add null check in execQuery to throw meaningful error when DB unavailable
- Improve API endpoint to return 503 status when database is unavailable
- Enhanced logging for better debugging of connection issues

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
rizky 2025-09-10 09:07:03 +07:00
parent a09cf17451
commit 74a70e99ca
4 changed files with 13 additions and 3 deletions

View File

@ -10,7 +10,7 @@ export const _ = {
async api() {
const ctx = apiContext(this);
const { req, res } = ctx;
if (typeof g.db !== "undefined") {
if (typeof g.db !== "undefined" && g.db !== null) {
if (req.params._ === "check") {
return { mode: "encrypted" };
}
@ -30,6 +30,9 @@ export const _ = {
res.sendStatus(500);
res.send('{status: "unauthorized"}');
}
} else {
res.status(503);
res.send('{"status": "database_unavailable", "message": "Database connection not available"}');
}
},
};

View File

@ -65,8 +65,10 @@ await createLogger();
if (g.db) {
try {
await g.db.$connect();
g.log.info("Database connected successfully");
} catch (e) {
console.error(e);
g.log.error("Failed to connect to database:", e);
g.db = null;
}
}

View File

@ -28,7 +28,8 @@ export const preparePrisma = async () => {
}) as Upsert,
};
} catch (e) {
console.log("Prisma not initialized", e);
console.error("Failed to initialize Prisma:", e);
g.db = null;
}
}

View File

@ -13,6 +13,10 @@ export type DBArg = {
};
export const execQuery = async (args: DBArg, prisma: any) => {
if (!prisma) {
throw new Error("Database connection not available");
}
const { table, action, params } = args;
if (action === "batch_upsert") {