Work with DB fixed including default Admin creation
This commit is contained in:
@@ -1,7 +1,5 @@
|
||||
import { PrismaClient } from '@prisma/client';
|
||||
import { PrismaBetterSqlite3 } from '@prisma/adapter-better-sqlite3';
|
||||
|
||||
// Ensure env vars are loaded
|
||||
import 'dotenv/config';
|
||||
|
||||
declare global {
|
||||
@@ -13,44 +11,46 @@ declare global {
|
||||
const mode = process.env.APP_MODE || 'dev';
|
||||
console.log(`[Prisma] Initializing in ${mode.toUpperCase()} mode`);
|
||||
|
||||
let dbUrl: string | undefined;
|
||||
let dbPath: string;
|
||||
|
||||
switch (mode) {
|
||||
case 'test':
|
||||
dbUrl = process.env.DATABASE_URL_TEST;
|
||||
dbPath = process.env.DATABASE_URL_TEST || './test.db';
|
||||
break;
|
||||
case 'prod':
|
||||
dbUrl = process.env.DATABASE_URL_PROD;
|
||||
dbPath = process.env.DATABASE_URL_PROD || './prod.db';
|
||||
break;
|
||||
case 'dev':
|
||||
default:
|
||||
dbUrl = process.env.DATABASE_URL_DEV;
|
||||
dbPath = process.env.DATABASE_URL_DEV || './dev.db';
|
||||
break;
|
||||
}
|
||||
|
||||
// Fallback to generic DATABASE_URL if specific one is missing
|
||||
if (!dbUrl) {
|
||||
console.warn(`[Prisma] DATABASE_URL_${mode.toUpperCase()} not found, falling back to DATABASE_URL`);
|
||||
dbUrl = process.env.DATABASE_URL;
|
||||
// Remove 'file:' prefix if present
|
||||
if (dbPath.startsWith('file:')) {
|
||||
dbPath = dbPath.slice(5);
|
||||
}
|
||||
|
||||
if (!dbUrl) {
|
||||
throw new Error(`DATABASE_URL environment variable is not set for mode ${mode}. Please check your .env file.`);
|
||||
console.log('Initializing Prisma Client with database:', dbPath);
|
||||
|
||||
let prisma: PrismaClient;
|
||||
|
||||
try {
|
||||
const adapter = new PrismaBetterSqlite3({ url: dbPath });
|
||||
|
||||
prisma =
|
||||
global.prisma ||
|
||||
new PrismaClient({
|
||||
adapter: adapter as any,
|
||||
});
|
||||
} catch (e: any) {
|
||||
console.error('Failed to initialize Prisma Client:', e.message);
|
||||
process.exit(1);
|
||||
}
|
||||
|
||||
console.log('Initializing Prisma Adapter with URL:', dbUrl);
|
||||
|
||||
// Use the options object as required by the library definitions
|
||||
const adapter = new PrismaBetterSqlite3({ url: dbUrl });
|
||||
|
||||
const prisma =
|
||||
global.prisma ||
|
||||
new PrismaClient({
|
||||
adapter,
|
||||
});
|
||||
|
||||
if (process.env.NODE_ENV !== 'production') {
|
||||
global.prisma = prisma;
|
||||
}
|
||||
|
||||
export default prisma;
|
||||
|
||||
|
||||
@@ -10,7 +10,11 @@ export const validate = (schema: ZodSchema<any>) => async (req: Request, res: Re
|
||||
params: req.params,
|
||||
});
|
||||
return next();
|
||||
} catch (error) {
|
||||
return sendError(res, `Validation Error: ${JSON.stringify(error)}`, 400);
|
||||
} catch (error: any) {
|
||||
console.error('Validation error:', {
|
||||
body: req.body,
|
||||
error: error.errors || error
|
||||
});
|
||||
return sendError(res, `Validation Error: ${JSON.stringify(error.errors || error)}`, 400);
|
||||
}
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user