Updated environment variables and their corresponding Next.js type declarations.

This commit is contained in:
2026-02-28 20:28:52 +01:00
parent ddbdf4361e
commit f940a3852a
175 changed files with 27724 additions and 156 deletions

View File

@@ -16922,6 +16922,8 @@ var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__proje
"[project]/Documents/00 - projet/plumeia/node_modules/next/dist/esm/build/templates/app-route.js { INNER_APP_ROUTE => \"[project]/Documents/00 - projet/plumeia/src/app/api/auth/[...nextauth]/route.ts [app-route] (ecmascript)\" } [app-route] (ecmascript)", ((__turbopack_context__) => {
"use strict";
return __turbopack_context__.a(async (__turbopack_handle_async_dependencies__, __turbopack_async_result__) => { try {
__turbopack_context__.s([
"handler",
()=>handler,
@@ -16955,6 +16957,10 @@ var __TURBOPACK__imported__module__$5b$externals$5d2f$next$2f$dist$2f$shared$2f$
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$index$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__$3c$locals$3e$__ = __turbopack_context__.i("[project]/Documents/00 - projet/plumeia/node_modules/next/dist/esm/server/response-cache/index.js [app-route] (ecmascript) <locals>");
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$types$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/00 - projet/plumeia/node_modules/next/dist/esm/server/response-cache/types.js [app-route] (ecmascript)");
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$src$2f$app$2f$api$2f$auth$2f5b2e2e2e$nextauth$5d2f$route$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/00 - projet/plumeia/src/app/api/auth/[...nextauth]/route.ts [app-route] (ecmascript)");
var __turbopack_async_dependencies__ = __turbopack_handle_async_dependencies__([
__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$src$2f$app$2f$api$2f$auth$2f5b2e2e2e$nextauth$5d2f$route$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__
]);
[__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$src$2f$app$2f$api$2f$auth$2f5b2e2e2e$nextauth$5d2f$route$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__] = __turbopack_async_dependencies__.then ? (await __turbopack_async_dependencies__)() : __turbopack_async_dependencies__;
;
;
;
@@ -17293,7 +17299,8 @@ async function handler(req, res, ctx) {
return null;
}
} //# sourceMappingURL=app-route.js.map
}),
__turbopack_async_result__();
} catch(e) { __turbopack_async_result__(e); } }, false);}),
];
//# sourceMappingURL=549ce_next_e5412057._.js.map

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,12 @@
module.exports = [
"[project]/Documents/00 - projet/plumeia/src/lib/prisma.ts [app-route] (ecmascript, async loader)", ((__turbopack_context__) => {
__turbopack_context__.v((parentImport) => {
return Promise.all([
"server/chunks/[root-of-the-server]__bc7b254d._.js"
].map((chunk) => __turbopack_context__.l(chunk))).then(() => {
return parentImport("[project]/Documents/00 - projet/plumeia/src/lib/prisma.ts [app-route] (ecmascript)");
});
});
}),
];

View File

@@ -0,0 +1,5 @@
{
"version": 3,
"sources": [],
"sections": []
}

View File

@@ -0,0 +1,10 @@
module.exports = [
"[project]/Documents/00 - projet/plumeia/src/lib/prisma.ts [app-route] (ecmascript, async loader)", ((__turbopack_context__) => {
__turbopack_context__.v((parentImport) => {
return Promise.resolve().then(() => {
return parentImport("[project]/Documents/00 - projet/plumeia/src/lib/prisma.ts [app-route] (ecmascript)");
});
});
}),
];

View File

@@ -0,0 +1,5 @@
{
"version": 3,
"sources": [],
"sections": []
}

View File

@@ -0,0 +1,10 @@
module.exports = [
"[project]/Documents/00 - projet/plumeia/src/lib/prisma.ts [app-route] (ecmascript, async loader)", ((__turbopack_context__) => {
__turbopack_context__.v((parentImport) => {
return Promise.resolve().then(() => {
return parentImport("[project]/Documents/00 - projet/plumeia/src/lib/prisma.ts [app-route] (ecmascript)");
});
});
}),
];

View File

@@ -0,0 +1,5 @@
{
"version": 3,
"sources": [],
"sections": []
}

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

View File

@@ -56,6 +56,8 @@ module.exports = mod;
"[project]/Documents/00 - projet/plumeia/src/lib/auth.ts [app-route] (ecmascript)", ((__turbopack_context__) => {
"use strict";
return __turbopack_context__.a(async (__turbopack_handle_async_dependencies__, __turbopack_async_result__) => { try {
__turbopack_context__.s([
"auth",
()=>auth,
@@ -69,7 +71,11 @@ __turbopack_context__.s([
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2d$auth$2f$index$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__$3c$locals$3e$__ = __turbopack_context__.i("[project]/Documents/00 - projet/plumeia/node_modules/next-auth/index.js [app-route] (ecmascript) <locals>");
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2d$auth$2f$providers$2f$credentials$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__$3c$locals$3e$__ = __turbopack_context__.i("[project]/Documents/00 - projet/plumeia/node_modules/next-auth/providers/credentials.js [app-route] (ecmascript) <locals>");
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f40$auth$2f$core$2f$providers$2f$credentials$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/00 - projet/plumeia/node_modules/@auth/core/providers/credentials.js [app-route] (ecmascript)");
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$bcryptjs$2f$index$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/00 - projet/plumeia/node_modules/bcryptjs/index.js [app-route] (ecmascript)");
var __TURBOPACK__imported__module__$5b$externals$5d2f$bcryptjs__$5b$external$5d$__$28$bcryptjs$2c$__esm_import$2c$__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$bcryptjs$29$__ = __turbopack_context__.i("[externals]/bcryptjs [external] (bcryptjs, esm_import, [project]/Documents/00 - projet/plumeia/node_modules/bcryptjs)");
var __turbopack_async_dependencies__ = __turbopack_handle_async_dependencies__([
__TURBOPACK__imported__module__$5b$externals$5d2f$bcryptjs__$5b$external$5d$__$28$bcryptjs$2c$__esm_import$2c$__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$bcryptjs$29$__
]);
[__TURBOPACK__imported__module__$5b$externals$5d2f$bcryptjs__$5b$external$5d$__$28$bcryptjs$2c$__esm_import$2c$__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$bcryptjs$29$__] = __turbopack_async_dependencies__.then ? (await __turbopack_async_dependencies__)() : __turbopack_async_dependencies__;
;
;
;
@@ -98,7 +104,7 @@ const { handlers, signIn, signOut, auth } = (0, __TURBOPACK__imported__module__$
}
});
if (!user) return null;
const isValid = await __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$bcryptjs$2f$index$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["default"].compare(credentials.password, user.hashedPassword);
const isValid = await __TURBOPACK__imported__module__$5b$externals$5d2f$bcryptjs__$5b$external$5d$__$28$bcryptjs$2c$__esm_import$2c$__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$bcryptjs$29$__["default"].compare(credentials.password, user.hashedPassword);
if (!isValid) return null;
return {
id: user.id,
@@ -129,7 +135,8 @@ const { handlers, signIn, signOut, auth } = (0, __TURBOPACK__imported__module__$
signIn: '/'
}
});
}),
__turbopack_async_result__();
} catch(e) { __turbopack_async_result__(e); } }, false);}),
"[project]/Documents/00 - projet/plumeia/src/lib/prisma.ts [app-route] (ecmascript)", ((__turbopack_context__) => {
"use strict";
@@ -186,9 +193,10 @@ var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__proje
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$src$2f$lib$2f$auth$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/00 - projet/plumeia/src/lib/auth.ts [app-route] (ecmascript)");
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$src$2f$lib$2f$prisma$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/00 - projet/plumeia/src/lib/prisma.ts [app-route] (ecmascript)");
var __turbopack_async_dependencies__ = __turbopack_handle_async_dependencies__([
__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$src$2f$lib$2f$auth$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__,
__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$src$2f$lib$2f$prisma$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__
]);
[__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$src$2f$lib$2f$prisma$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__] = __turbopack_async_dependencies__.then ? (await __turbopack_async_dependencies__)() : __turbopack_async_dependencies__;
[__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$src$2f$lib$2f$auth$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$src$2f$lib$2f$prisma$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__] = __turbopack_async_dependencies__.then ? (await __turbopack_async_dependencies__)() : __turbopack_async_dependencies__;
const dynamic = 'force-dynamic';
;
;

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,159 @@
module.exports = [
"[externals]/next/dist/compiled/next-server/app-route-turbo.runtime.dev.js [external] (next/dist/compiled/next-server/app-route-turbo.runtime.dev.js, cjs)", ((__turbopack_context__, module, exports) => {
const mod = __turbopack_context__.x("next/dist/compiled/next-server/app-route-turbo.runtime.dev.js", () => require("next/dist/compiled/next-server/app-route-turbo.runtime.dev.js"));
module.exports = mod;
}),
"[externals]/next/dist/compiled/@opentelemetry/api [external] (next/dist/compiled/@opentelemetry/api, cjs)", ((__turbopack_context__, module, exports) => {
const mod = __turbopack_context__.x("next/dist/compiled/@opentelemetry/api", () => require("next/dist/compiled/@opentelemetry/api"));
module.exports = mod;
}),
"[externals]/next/dist/compiled/next-server/app-page-turbo.runtime.dev.js [external] (next/dist/compiled/next-server/app-page-turbo.runtime.dev.js, cjs)", ((__turbopack_context__, module, exports) => {
const mod = __turbopack_context__.x("next/dist/compiled/next-server/app-page-turbo.runtime.dev.js", () => require("next/dist/compiled/next-server/app-page-turbo.runtime.dev.js"));
module.exports = mod;
}),
"[externals]/next/dist/server/app-render/work-unit-async-storage.external.js [external] (next/dist/server/app-render/work-unit-async-storage.external.js, cjs)", ((__turbopack_context__, module, exports) => {
const mod = __turbopack_context__.x("next/dist/server/app-render/work-unit-async-storage.external.js", () => require("next/dist/server/app-render/work-unit-async-storage.external.js"));
module.exports = mod;
}),
"[externals]/next/dist/server/app-render/work-async-storage.external.js [external] (next/dist/server/app-render/work-async-storage.external.js, cjs)", ((__turbopack_context__, module, exports) => {
const mod = __turbopack_context__.x("next/dist/server/app-render/work-async-storage.external.js", () => require("next/dist/server/app-render/work-async-storage.external.js"));
module.exports = mod;
}),
"[externals]/next/dist/shared/lib/no-fallback-error.external.js [external] (next/dist/shared/lib/no-fallback-error.external.js, cjs)", ((__turbopack_context__, module, exports) => {
const mod = __turbopack_context__.x("next/dist/shared/lib/no-fallback-error.external.js", () => require("next/dist/shared/lib/no-fallback-error.external.js"));
module.exports = mod;
}),
"[externals]/next/dist/server/app-render/after-task-async-storage.external.js [external] (next/dist/server/app-render/after-task-async-storage.external.js, cjs)", ((__turbopack_context__, module, exports) => {
const mod = __turbopack_context__.x("next/dist/server/app-render/after-task-async-storage.external.js", () => require("next/dist/server/app-render/after-task-async-storage.external.js"));
module.exports = mod;
}),
"[project]/Documents/00 - projet/plumeia/src/lib/prisma.ts [app-route] (ecmascript)", ((__turbopack_context__) => {
"use strict";
return __turbopack_context__.a(async (__turbopack_handle_async_dependencies__, __turbopack_async_result__) => { try {
__turbopack_context__.s([
"default",
()=>__TURBOPACK__default__export__,
"getDB",
()=>getDB
]);
var __TURBOPACK__imported__module__$5b$externals$5d2f40$prisma$2f$client__$5b$external$5d$__$2840$prisma$2f$client$2c$__cjs$2c$__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f40$prisma$2f$client$29$__ = __turbopack_context__.i("[externals]/@prisma/client [external] (@prisma/client, cjs, [project]/Documents/00 - projet/plumeia/node_modules/@prisma/client)");
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f40$prisma$2f$adapter$2d$pg$2f$dist$2f$index$2e$mjs__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/00 - projet/plumeia/node_modules/@prisma/adapter-pg/dist/index.mjs [app-route] (ecmascript)");
var __TURBOPACK__imported__module__$5b$externals$5d2f$pg__$5b$external$5d$__$28$pg$2c$__esm_import$2c$__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$pg$29$__ = __turbopack_context__.i("[externals]/pg [external] (pg, esm_import, [project]/Documents/00 - projet/plumeia/node_modules/pg)");
var __turbopack_async_dependencies__ = __turbopack_handle_async_dependencies__([
__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f40$prisma$2f$adapter$2d$pg$2f$dist$2f$index$2e$mjs__$5b$app$2d$route$5d$__$28$ecmascript$29$__,
__TURBOPACK__imported__module__$5b$externals$5d2f$pg__$5b$external$5d$__$28$pg$2c$__esm_import$2c$__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$pg$29$__
]);
[__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f40$prisma$2f$adapter$2d$pg$2f$dist$2f$index$2e$mjs__$5b$app$2d$route$5d$__$28$ecmascript$29$__, __TURBOPACK__imported__module__$5b$externals$5d2f$pg__$5b$external$5d$__$28$pg$2c$__esm_import$2c$__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$pg$29$__] = __turbopack_async_dependencies__.then ? (await __turbopack_async_dependencies__)() : __turbopack_async_dependencies__;
;
;
;
const globalForPrisma = globalThis;
function getDB() {
if (!globalForPrisma.prisma) {
const connectionString = process.env.DATABASE_URL;
const pool = new __TURBOPACK__imported__module__$5b$externals$5d2f$pg__$5b$external$5d$__$28$pg$2c$__esm_import$2c$__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$pg$29$__["Pool"]({
connectionString
});
const adapter = new __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f40$prisma$2f$adapter$2d$pg$2f$dist$2f$index$2e$mjs__$5b$app$2d$route$5d$__$28$ecmascript$29$__["PrismaPg"](pool);
globalForPrisma.prisma = new __TURBOPACK__imported__module__$5b$externals$5d2f40$prisma$2f$client__$5b$external$5d$__$2840$prisma$2f$client$2c$__cjs$2c$__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f40$prisma$2f$client$29$__["PrismaClient"]({
adapter
});
}
return globalForPrisma.prisma;
}
const __TURBOPACK__default__export__ = getDB;
__turbopack_async_result__();
} catch(e) { __turbopack_async_result__(e); } }, false);}),
"[project]/Documents/00 - projet/plumeia/src/app/api/auth/register/route.ts [app-route] (ecmascript)", ((__turbopack_context__) => {
"use strict";
return __turbopack_context__.a(async (__turbopack_handle_async_dependencies__, __turbopack_async_result__) => { try {
__turbopack_context__.s([
"POST",
()=>POST,
"dynamic",
()=>dynamic
]);
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$server$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/00 - projet/plumeia/node_modules/next/server.js [app-route] (ecmascript)");
var __TURBOPACK__imported__module__$5b$externals$5d2f$bcryptjs__$5b$external$5d$__$28$bcryptjs$2c$__esm_import$2c$__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$bcryptjs$29$__ = __turbopack_context__.i("[externals]/bcryptjs [external] (bcryptjs, esm_import, [project]/Documents/00 - projet/plumeia/node_modules/bcryptjs)");
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$src$2f$lib$2f$prisma$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/00 - projet/plumeia/src/lib/prisma.ts [app-route] (ecmascript)");
var __turbopack_async_dependencies__ = __turbopack_handle_async_dependencies__([
__TURBOPACK__imported__module__$5b$externals$5d2f$bcryptjs__$5b$external$5d$__$28$bcryptjs$2c$__esm_import$2c$__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$bcryptjs$29$__,
__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$src$2f$lib$2f$prisma$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__
]);
[__TURBOPACK__imported__module__$5b$externals$5d2f$bcryptjs__$5b$external$5d$__$28$bcryptjs$2c$__esm_import$2c$__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$bcryptjs$29$__, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$src$2f$lib$2f$prisma$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__] = __turbopack_async_dependencies__.then ? (await __turbopack_async_dependencies__)() : __turbopack_async_dependencies__;
const dynamic = 'force-dynamic';
;
;
;
async function POST(request) {
try {
const { email, password, name } = await request.json();
if (!email || !password) {
return __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$server$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["NextResponse"].json({
error: 'Email et mot de passe requis'
}, {
status: 400
});
}
const prisma = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$src$2f$lib$2f$prisma$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__["default"])();
// Check if user exists
const existing = await prisma.user.findUnique({
where: {
email
}
});
if (existing) {
return __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$server$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["NextResponse"].json({
error: 'Un compte existe déjà avec cet email'
}, {
status: 409
});
}
// Hash password
const hashedPassword = await __TURBOPACK__imported__module__$5b$externals$5d2f$bcryptjs__$5b$external$5d$__$28$bcryptjs$2c$__esm_import$2c$__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$bcryptjs$29$__["default"].hash(password, 12);
// Create user
const user = await prisma.user.create({
data: {
email,
name: name || 'User',
hashedPassword
}
});
return __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$server$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["NextResponse"].json({
id: user.id,
email: user.email,
name: user.name
});
} catch (error) {
console.error('Register error:', error);
return __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$server$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["NextResponse"].json({
error: 'Erreur lors de la création du compte',
details: error?.message || String(error)
}, {
status: 500
});
}
}
__turbopack_async_result__();
} catch(e) { __turbopack_async_result__(e); } }, false);}),
];
//# sourceMappingURL=%5Broot-of-the-server%5D__9890d2aa._.js.map

View File

@@ -0,0 +1,7 @@
{
"version": 3,
"sources": [],
"sections": [
{"offset": {"line": 48, "column": 0}, "map": {"version":3,"sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/src/lib/prisma.ts"],"sourcesContent":["import { PrismaClient } from '@prisma/client';\r\nimport { PrismaPg } from '@prisma/adapter-pg';\r\nimport { Pool } from 'pg';\r\n\r\nconst globalForPrisma = globalThis as unknown as {\r\n prisma: PrismaClient | undefined;\r\n};\r\n\r\n/**\r\n * Returns a singleton PrismaClient instance using the Prisma v7 adapter pattern.\r\n * Uses @prisma/adapter-pg with a pg Pool for direct PostgreSQL connections.\r\n */\r\nexport function getDB(): PrismaClient {\r\n if (!globalForPrisma.prisma) {\r\n const connectionString = process.env.DATABASE_URL;\r\n const pool = new Pool({ connectionString });\r\n const adapter = new PrismaPg(pool);\r\n\r\n globalForPrisma.prisma = new PrismaClient({ adapter });\r\n }\r\n return globalForPrisma.prisma;\r\n}\r\n\r\nexport default getDB;\r\n"],"names":[],"mappings":";;;;;;AAAA;AACA;AACA;;;;;;;;;AAEA,MAAM,kBAAkB;AAQjB,SAAS;IACZ,IAAI,CAAC,gBAAgB,MAAM,EAAE;QACzB,MAAM,mBAAmB,QAAQ,GAAG,CAAC,YAAY;QACjD,MAAM,OAAO,IAAI,iMAAI,CAAC;YAAE;QAAiB;QACzC,MAAM,UAAU,IAAI,qNAAQ,CAAC;QAE7B,gBAAgB,MAAM,GAAG,IAAI,kPAAY,CAAC;YAAE;QAAQ;IACxD;IACA,OAAO,gBAAgB,MAAM;AACjC;uCAEe"}},
{"offset": {"line": 87, "column": 0}, "map": {"version":3,"sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/src/app/api/auth/register/route.ts"],"sourcesContent":["export const dynamic = 'force-dynamic';\r\n\r\nimport { NextRequest, NextResponse } from 'next/server';\r\nimport bcrypt from 'bcryptjs';\r\nimport getDB from '@/lib/prisma';\r\n\r\nexport async function POST(request: NextRequest) {\r\n try {\r\n const { email, password, name } = await request.json();\r\n\r\n if (!email || !password) {\r\n return NextResponse.json(\r\n { error: 'Email et mot de passe requis' },\r\n { status: 400 }\r\n );\r\n }\r\n\r\n const prisma = getDB();\r\n\r\n // Check if user exists\r\n const existing = await prisma.user.findUnique({ where: { email } });\r\n if (existing) {\r\n return NextResponse.json(\r\n { error: 'Un compte existe déjà avec cet email' },\r\n { status: 409 }\r\n );\r\n }\r\n\r\n // Hash password\r\n const hashedPassword = await bcrypt.hash(password, 12);\r\n\r\n // Create user\r\n const user = await prisma.user.create({\r\n data: {\r\n email,\r\n name: name || 'User',\r\n hashedPassword,\r\n },\r\n });\r\n\r\n return NextResponse.json({\r\n id: user.id,\r\n email: user.email,\r\n name: user.name,\r\n });\r\n } catch (error: any) {\r\n console.error('Register error:', error);\r\n return NextResponse.json(\r\n { error: 'Erreur lors de la création du compte', details: error?.message || String(error) },\r\n { status: 500 }\r\n );\r\n }\r\n}\r\n"],"names":[],"mappings":";;;;;;AAEA;AACA;AACA;;;;;;AAJO,MAAM,UAAU;;;;AAMhB,eAAe,KAAK,OAAoB;IAC3C,IAAI;QACA,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,MAAM,QAAQ,IAAI;QAEpD,IAAI,CAAC,SAAS,CAAC,UAAU;YACrB,OAAO,4LAAY,CAAC,IAAI,CACpB;gBAAE,OAAO;YAA+B,GACxC;gBAAE,QAAQ;YAAI;QAEtB;QAEA,MAAM,SAAS,IAAA,6KAAK;QAEpB,uBAAuB;QACvB,MAAM,WAAW,MAAM,OAAO,IAAI,CAAC,UAAU,CAAC;YAAE,OAAO;gBAAE;YAAM;QAAE;QACjE,IAAI,UAAU;YACV,OAAO,4LAAY,CAAC,IAAI,CACpB;gBAAE,OAAO;YAAuC,GAChD;gBAAE,QAAQ;YAAI;QAEtB;QAEA,gBAAgB;QAChB,MAAM,iBAAiB,MAAM,sNAAM,CAAC,IAAI,CAAC,UAAU;QAEnD,cAAc;QACd,MAAM,OAAO,MAAM,OAAO,IAAI,CAAC,MAAM,CAAC;YAClC,MAAM;gBACF;gBACA,MAAM,QAAQ;gBACd;YACJ;QACJ;QAEA,OAAO,4LAAY,CAAC,IAAI,CAAC;YACrB,IAAI,KAAK,EAAE;YACX,OAAO,KAAK,KAAK;YACjB,MAAM,KAAK,IAAI;QACnB;IACJ,EAAE,OAAO,OAAY;QACjB,QAAQ,KAAK,CAAC,mBAAmB;QACjC,OAAO,4LAAY,CAAC,IAAI,CACpB;YAAE,OAAO;YAAwC,SAAS,OAAO,WAAW,OAAO;QAAO,GAC1F;YAAE,QAAQ;QAAI;IAEtB;AACJ"}}]
}

View File

@@ -56,6 +56,8 @@ module.exports = mod;
"[project]/Documents/00 - projet/plumeia/src/lib/auth.ts [app-route] (ecmascript)", ((__turbopack_context__) => {
"use strict";
return __turbopack_context__.a(async (__turbopack_handle_async_dependencies__, __turbopack_async_result__) => { try {
__turbopack_context__.s([
"auth",
()=>auth,
@@ -69,7 +71,11 @@ __turbopack_context__.s([
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2d$auth$2f$index$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__$3c$locals$3e$__ = __turbopack_context__.i("[project]/Documents/00 - projet/plumeia/node_modules/next-auth/index.js [app-route] (ecmascript) <locals>");
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2d$auth$2f$providers$2f$credentials$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__$3c$locals$3e$__ = __turbopack_context__.i("[project]/Documents/00 - projet/plumeia/node_modules/next-auth/providers/credentials.js [app-route] (ecmascript) <locals>");
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f40$auth$2f$core$2f$providers$2f$credentials$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/00 - projet/plumeia/node_modules/@auth/core/providers/credentials.js [app-route] (ecmascript)");
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$bcryptjs$2f$index$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/00 - projet/plumeia/node_modules/bcryptjs/index.js [app-route] (ecmascript)");
var __TURBOPACK__imported__module__$5b$externals$5d2f$bcryptjs__$5b$external$5d$__$28$bcryptjs$2c$__esm_import$2c$__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$bcryptjs$29$__ = __turbopack_context__.i("[externals]/bcryptjs [external] (bcryptjs, esm_import, [project]/Documents/00 - projet/plumeia/node_modules/bcryptjs)");
var __turbopack_async_dependencies__ = __turbopack_handle_async_dependencies__([
__TURBOPACK__imported__module__$5b$externals$5d2f$bcryptjs__$5b$external$5d$__$28$bcryptjs$2c$__esm_import$2c$__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$bcryptjs$29$__
]);
[__TURBOPACK__imported__module__$5b$externals$5d2f$bcryptjs__$5b$external$5d$__$28$bcryptjs$2c$__esm_import$2c$__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$bcryptjs$29$__] = __turbopack_async_dependencies__.then ? (await __turbopack_async_dependencies__)() : __turbopack_async_dependencies__;
;
;
;
@@ -98,7 +104,7 @@ const { handlers, signIn, signOut, auth } = (0, __TURBOPACK__imported__module__$
}
});
if (!user) return null;
const isValid = await __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$bcryptjs$2f$index$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["default"].compare(credentials.password, user.hashedPassword);
const isValid = await __TURBOPACK__imported__module__$5b$externals$5d2f$bcryptjs__$5b$external$5d$__$28$bcryptjs$2c$__esm_import$2c$__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$bcryptjs$29$__["default"].compare(credentials.password, user.hashedPassword);
if (!isValid) return null;
return {
id: user.id,
@@ -129,10 +135,13 @@ const { handlers, signIn, signOut, auth } = (0, __TURBOPACK__imported__module__$
signIn: '/'
}
});
}),
__turbopack_async_result__();
} catch(e) { __turbopack_async_result__(e); } }, false);}),
"[project]/Documents/00 - projet/plumeia/src/app/api/auth/[...nextauth]/route.ts [app-route] (ecmascript)", ((__turbopack_context__) => {
"use strict";
return __turbopack_context__.a(async (__turbopack_handle_async_dependencies__, __turbopack_async_result__) => { try {
__turbopack_context__.s([
"GET",
()=>GET,
@@ -142,6 +151,10 @@ __turbopack_context__.s([
()=>dynamic
]);
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$src$2f$lib$2f$auth$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/00 - projet/plumeia/src/lib/auth.ts [app-route] (ecmascript)");
var __turbopack_async_dependencies__ = __turbopack_handle_async_dependencies__([
__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$src$2f$lib$2f$auth$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__
]);
[__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$src$2f$lib$2f$auth$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__] = __turbopack_async_dependencies__.then ? (await __turbopack_async_dependencies__)() : __turbopack_async_dependencies__;
const dynamic = 'force-dynamic';
;
async function GET(request) {
@@ -150,7 +163,8 @@ async function GET(request) {
async function POST(request) {
return __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$src$2f$lib$2f$auth$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__["handlers"].POST(request);
}
}),
__turbopack_async_result__();
} catch(e) { __turbopack_async_result__(e); } }, false);}),
];
//# sourceMappingURL=%5Broot-of-the-server%5D__a0c3eaf7._.js.map

View File

@@ -2,6 +2,6 @@
"version": 3,
"sources": [],
"sections": [
{"offset": {"line": 58, "column": 0}, "map": {"version":3,"sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/src/lib/auth.ts"],"sourcesContent":["import NextAuth from 'next-auth';\r\nimport Credentials from 'next-auth/providers/credentials';\r\nimport bcrypt from 'bcryptjs';\r\n\r\nexport const { handlers, signIn, signOut, auth } = NextAuth({\r\n providers: [\r\n Credentials({\r\n name: 'credentials',\r\n credentials: {\r\n email: { label: 'Email', type: 'email' },\r\n password: { label: 'Password', type: 'password' },\r\n },\r\n async authorize(credentials) {\r\n if (!credentials?.email || !credentials?.password) return null;\r\n\r\n // Lazy import to avoid PrismaClient initialization during build\r\n const { default: getDB } = await import('./prisma');\r\n const prisma = getDB();\r\n\r\n const user = await prisma.user.findUnique({\r\n where: { email: credentials.email as string },\r\n });\r\n\r\n if (!user) return null;\r\n\r\n const isValid = await bcrypt.compare(\r\n credentials.password as string,\r\n user.hashedPassword\r\n );\r\n\r\n if (!isValid) return null;\r\n\r\n return {\r\n id: user.id,\r\n email: user.email,\r\n name: user.name,\r\n };\r\n },\r\n }),\r\n ],\r\n session: {\r\n strategy: 'jwt',\r\n },\r\n callbacks: {\r\n async jwt({ token, user }) {\r\n if (user) {\r\n token.id = user.id;\r\n }\r\n return token;\r\n },\r\n async session({ session, token }) {\r\n if (session.user && token.id) {\r\n session.user.id = token.id as string;\r\n }\r\n return session;\r\n },\r\n },\r\n pages: {\r\n signIn: '/',\r\n },\r\n});\r\n"],"names":[],"mappings":";;;;;;;;;;AAAA;AACA;AAAA;AACA;;;;AAEO,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,IAAA,8MAAQ,EAAC;IACxD,WAAW;QACP,IAAA,mNAAW,EAAC;YACR,MAAM;YACN,aAAa;gBACT,OAAO;oBAAE,OAAO;oBAAS,MAAM;gBAAQ;gBACvC,UAAU;oBAAE,OAAO;oBAAY,MAAM;gBAAW;YACpD;YACA,MAAM,WAAU,WAAW;gBACvB,IAAI,CAAC,aAAa,SAAS,CAAC,aAAa,UAAU,OAAO;gBAE1D,gEAAgE;gBAChE,MAAM,EAAE,SAAS,KAAK,EAAE,GAAG;gBAC3B,MAAM,SAAS;gBAEf,MAAM,OAAO,MAAM,OAAO,IAAI,CAAC,UAAU,CAAC;oBACtC,OAAO;wBAAE,OAAO,YAAY,KAAK;oBAAW;gBAChD;gBAEA,IAAI,CAAC,MAAM,OAAO;gBAElB,MAAM,UAAU,MAAM,0LAAM,CAAC,OAAO,CAChC,YAAY,QAAQ,EACpB,KAAK,cAAc;gBAGvB,IAAI,CAAC,SAAS,OAAO;gBAErB,OAAO;oBACH,IAAI,KAAK,EAAE;oBACX,OAAO,KAAK,KAAK;oBACjB,MAAM,KAAK,IAAI;gBACnB;YACJ;QACJ;KACH;IACD,SAAS;QACL,UAAU;IACd;IACA,WAAW;QACP,MAAM,KAAI,EAAE,KAAK,EAAE,IAAI,EAAE;YACrB,IAAI,MAAM;gBACN,MAAM,EAAE,GAAG,KAAK,EAAE;YACtB;YACA,OAAO;QACX;QACA,MAAM,SAAQ,EAAE,OAAO,EAAE,KAAK,EAAE;YAC5B,IAAI,QAAQ,IAAI,IAAI,MAAM,EAAE,EAAE;gBAC1B,QAAQ,IAAI,CAAC,EAAE,GAAG,MAAM,EAAE;YAC9B;YACA,OAAO;QACX;IACJ;IACA,OAAO;QACH,QAAQ;IACZ;AACJ"}},
{"offset": {"line": 135, "column": 0}, "map": {"version":3,"sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/src/app/api/auth/%5B...nextauth%5D/route.ts"],"sourcesContent":["export const dynamic = 'force-dynamic';\r\n\r\nimport { handlers } from '@/lib/auth';\r\nimport { NextRequest, NextResponse } from 'next/server';\r\n\r\nexport async function GET(request: NextRequest) {\r\n return handlers.GET(request);\r\n}\r\n\r\nexport async function POST(request: NextRequest) {\r\n return handlers.POST(request);\r\n}\r\n"],"names":[],"mappings":";;;;;;;;AAEA;AAFO,MAAM,UAAU;;AAKhB,eAAe,IAAI,OAAoB;IAC1C,OAAO,4KAAQ,CAAC,GAAG,CAAC;AACxB;AAEO,eAAe,KAAK,OAAoB;IAC3C,OAAO,4KAAQ,CAAC,IAAI,CAAC;AACzB"}}]
{"offset": {"line": 60, "column": 0}, "map": {"version":3,"sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/src/lib/auth.ts"],"sourcesContent":["import NextAuth from 'next-auth';\r\nimport Credentials from 'next-auth/providers/credentials';\r\nimport bcrypt from 'bcryptjs';\r\n\r\nexport const { handlers, signIn, signOut, auth } = NextAuth({\r\n providers: [\r\n Credentials({\r\n name: 'credentials',\r\n credentials: {\r\n email: { label: 'Email', type: 'email' },\r\n password: { label: 'Password', type: 'password' },\r\n },\r\n async authorize(credentials) {\r\n if (!credentials?.email || !credentials?.password) return null;\r\n\r\n // Lazy import to avoid PrismaClient initialization during build\r\n const { default: getDB } = await import('./prisma');\r\n const prisma = getDB();\r\n\r\n const user = await prisma.user.findUnique({\r\n where: { email: credentials.email as string },\r\n });\r\n\r\n if (!user) return null;\r\n\r\n const isValid = await bcrypt.compare(\r\n credentials.password as string,\r\n user.hashedPassword\r\n );\r\n\r\n if (!isValid) return null;\r\n\r\n return {\r\n id: user.id,\r\n email: user.email,\r\n name: user.name,\r\n };\r\n },\r\n }),\r\n ],\r\n session: {\r\n strategy: 'jwt',\r\n },\r\n callbacks: {\r\n async jwt({ token, user }) {\r\n if (user) {\r\n token.id = user.id;\r\n }\r\n return token;\r\n },\r\n async session({ session, token }) {\r\n if (session.user && token.id) {\r\n session.user.id = token.id as string;\r\n }\r\n return session;\r\n },\r\n },\r\n pages: {\r\n signIn: '/',\r\n },\r\n});\r\n"],"names":[],"mappings":";;;;;;;;;;AAAA;AACA;AAAA;AACA;;;;;;;;AAEO,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,IAAA,8MAAQ,EAAC;IACxD,WAAW;QACP,IAAA,mNAAW,EAAC;YACR,MAAM;YACN,aAAa;gBACT,OAAO;oBAAE,OAAO;oBAAS,MAAM;gBAAQ;gBACvC,UAAU;oBAAE,OAAO;oBAAY,MAAM;gBAAW;YACpD;YACA,MAAM,WAAU,WAAW;gBACvB,IAAI,CAAC,aAAa,SAAS,CAAC,aAAa,UAAU,OAAO;gBAE1D,gEAAgE;gBAChE,MAAM,EAAE,SAAS,KAAK,EAAE,GAAG;gBAC3B,MAAM,SAAS;gBAEf,MAAM,OAAO,MAAM,OAAO,IAAI,CAAC,UAAU,CAAC;oBACtC,OAAO;wBAAE,OAAO,YAAY,KAAK;oBAAW;gBAChD;gBAEA,IAAI,CAAC,MAAM,OAAO;gBAElB,MAAM,UAAU,MAAM,sNAAM,CAAC,OAAO,CAChC,YAAY,QAAQ,EACpB,KAAK,cAAc;gBAGvB,IAAI,CAAC,SAAS,OAAO;gBAErB,OAAO;oBACH,IAAI,KAAK,EAAE;oBACX,OAAO,KAAK,KAAK;oBACjB,MAAM,KAAK,IAAI;gBACnB;YACJ;QACJ;KACH;IACD,SAAS;QACL,UAAU;IACd;IACA,WAAW;QACP,MAAM,KAAI,EAAE,KAAK,EAAE,IAAI,EAAE;YACrB,IAAI,MAAM;gBACN,MAAM,EAAE,GAAG,KAAK,EAAE;YACtB;YACA,OAAO;QACX;QACA,MAAM,SAAQ,EAAE,OAAO,EAAE,KAAK,EAAE;YAC5B,IAAI,QAAQ,IAAI,IAAI,MAAM,EAAE,EAAE;gBAC1B,QAAQ,IAAI,CAAC,EAAE,GAAG,MAAM,EAAE;YAC9B;YACA,OAAO;QACX;IACJ;IACA,OAAO;QACH,QAAQ;IACZ;AACJ"}},
{"offset": {"line": 144, "column": 0}, "map": {"version":3,"sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/src/app/api/auth/%5B...nextauth%5D/route.ts"],"sourcesContent":["export const dynamic = 'force-dynamic';\r\n\r\nimport { handlers } from '@/lib/auth';\r\nimport { NextRequest, NextResponse } from 'next/server';\r\n\r\nexport async function GET(request: NextRequest) {\r\n return handlers.GET(request);\r\n}\r\n\r\nexport async function POST(request: NextRequest) {\r\n return handlers.POST(request);\r\n}\r\n"],"names":[],"mappings":";;;;;;;;AAEA;;;;;AAFO,MAAM,UAAU;;AAKhB,eAAe,IAAI,OAAoB;IAC1C,OAAO,4KAAQ,CAAC,GAAG,CAAC;AACxB;AAEO,eAAe,KAAK,OAAoB;IAC3C,OAAO,4KAAQ,CAAC,IAAI,CAAC;AACzB"}}]
}

View File

@@ -56,6 +56,8 @@ module.exports = mod;
"[project]/Documents/00 - projet/plumeia/src/lib/auth.ts [app-route] (ecmascript)", ((__turbopack_context__) => {
"use strict";
return __turbopack_context__.a(async (__turbopack_handle_async_dependencies__, __turbopack_async_result__) => { try {
__turbopack_context__.s([
"auth",
()=>auth,
@@ -69,7 +71,11 @@ __turbopack_context__.s([
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2d$auth$2f$index$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__$3c$locals$3e$__ = __turbopack_context__.i("[project]/Documents/00 - projet/plumeia/node_modules/next-auth/index.js [app-route] (ecmascript) <locals>");
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2d$auth$2f$providers$2f$credentials$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__$3c$locals$3e$__ = __turbopack_context__.i("[project]/Documents/00 - projet/plumeia/node_modules/next-auth/providers/credentials.js [app-route] (ecmascript) <locals>");
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f40$auth$2f$core$2f$providers$2f$credentials$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/00 - projet/plumeia/node_modules/@auth/core/providers/credentials.js [app-route] (ecmascript)");
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$bcryptjs$2f$index$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/00 - projet/plumeia/node_modules/bcryptjs/index.js [app-route] (ecmascript)");
var __TURBOPACK__imported__module__$5b$externals$5d2f$bcryptjs__$5b$external$5d$__$28$bcryptjs$2c$__esm_import$2c$__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$bcryptjs$29$__ = __turbopack_context__.i("[externals]/bcryptjs [external] (bcryptjs, esm_import, [project]/Documents/00 - projet/plumeia/node_modules/bcryptjs)");
var __turbopack_async_dependencies__ = __turbopack_handle_async_dependencies__([
__TURBOPACK__imported__module__$5b$externals$5d2f$bcryptjs__$5b$external$5d$__$28$bcryptjs$2c$__esm_import$2c$__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$bcryptjs$29$__
]);
[__TURBOPACK__imported__module__$5b$externals$5d2f$bcryptjs__$5b$external$5d$__$28$bcryptjs$2c$__esm_import$2c$__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$bcryptjs$29$__] = __turbopack_async_dependencies__.then ? (await __turbopack_async_dependencies__)() : __turbopack_async_dependencies__;
;
;
;
@@ -98,7 +104,7 @@ const { handlers, signIn, signOut, auth } = (0, __TURBOPACK__imported__module__$
}
});
if (!user) return null;
const isValid = await __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$bcryptjs$2f$index$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["default"].compare(credentials.password, user.hashedPassword);
const isValid = await __TURBOPACK__imported__module__$5b$externals$5d2f$bcryptjs__$5b$external$5d$__$28$bcryptjs$2c$__esm_import$2c$__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$bcryptjs$29$__["default"].compare(credentials.password, user.hashedPassword);
if (!isValid) return null;
return {
id: user.id,
@@ -129,7 +135,8 @@ const { handlers, signIn, signOut, auth } = (0, __TURBOPACK__imported__module__$
signIn: '/'
}
});
}),
__turbopack_async_result__();
} catch(e) { __turbopack_async_result__(e); } }, false);}),
"[project]/Documents/00 - projet/plumeia/src/lib/prisma.ts [app-route] (ecmascript)", ((__turbopack_context__) => {
"use strict";
@@ -186,9 +193,10 @@ var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__proje
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$src$2f$lib$2f$auth$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/00 - projet/plumeia/src/lib/auth.ts [app-route] (ecmascript)");
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$src$2f$lib$2f$prisma$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/00 - projet/plumeia/src/lib/prisma.ts [app-route] (ecmascript)");
var __turbopack_async_dependencies__ = __turbopack_handle_async_dependencies__([
__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$src$2f$lib$2f$auth$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__,
__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$src$2f$lib$2f$prisma$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__
]);
[__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$src$2f$lib$2f$prisma$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__] = __turbopack_async_dependencies__.then ? (await __turbopack_async_dependencies__)() : __turbopack_async_dependencies__;
[__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$src$2f$lib$2f$auth$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$src$2f$lib$2f$prisma$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__] = __turbopack_async_dependencies__.then ? (await __turbopack_async_dependencies__)() : __turbopack_async_dependencies__;
const dynamic = 'force-dynamic';
;
;

View File

@@ -2,7 +2,7 @@
"version": 3,
"sources": [],
"sections": [
{"offset": {"line": 58, "column": 0}, "map": {"version":3,"sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/src/lib/auth.ts"],"sourcesContent":["import NextAuth from 'next-auth';\r\nimport Credentials from 'next-auth/providers/credentials';\r\nimport bcrypt from 'bcryptjs';\r\n\r\nexport const { handlers, signIn, signOut, auth } = NextAuth({\r\n providers: [\r\n Credentials({\r\n name: 'credentials',\r\n credentials: {\r\n email: { label: 'Email', type: 'email' },\r\n password: { label: 'Password', type: 'password' },\r\n },\r\n async authorize(credentials) {\r\n if (!credentials?.email || !credentials?.password) return null;\r\n\r\n // Lazy import to avoid PrismaClient initialization during build\r\n const { default: getDB } = await import('./prisma');\r\n const prisma = getDB();\r\n\r\n const user = await prisma.user.findUnique({\r\n where: { email: credentials.email as string },\r\n });\r\n\r\n if (!user) return null;\r\n\r\n const isValid = await bcrypt.compare(\r\n credentials.password as string,\r\n user.hashedPassword\r\n );\r\n\r\n if (!isValid) return null;\r\n\r\n return {\r\n id: user.id,\r\n email: user.email,\r\n name: user.name,\r\n };\r\n },\r\n }),\r\n ],\r\n session: {\r\n strategy: 'jwt',\r\n },\r\n callbacks: {\r\n async jwt({ token, user }) {\r\n if (user) {\r\n token.id = user.id;\r\n }\r\n return token;\r\n },\r\n async session({ session, token }) {\r\n if (session.user && token.id) {\r\n session.user.id = token.id as string;\r\n }\r\n return session;\r\n },\r\n },\r\n pages: {\r\n signIn: '/',\r\n },\r\n});\r\n"],"names":[],"mappings":";;;;;;;;;;AAAA;AACA;AAAA;AACA;;;;AAEO,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,IAAA,8MAAQ,EAAC;IACxD,WAAW;QACP,IAAA,mNAAW,EAAC;YACR,MAAM;YACN,aAAa;gBACT,OAAO;oBAAE,OAAO;oBAAS,MAAM;gBAAQ;gBACvC,UAAU;oBAAE,OAAO;oBAAY,MAAM;gBAAW;YACpD;YACA,MAAM,WAAU,WAAW;gBACvB,IAAI,CAAC,aAAa,SAAS,CAAC,aAAa,UAAU,OAAO;gBAE1D,gEAAgE;gBAChE,MAAM,EAAE,SAAS,KAAK,EAAE,GAAG;gBAC3B,MAAM,SAAS;gBAEf,MAAM,OAAO,MAAM,OAAO,IAAI,CAAC,UAAU,CAAC;oBACtC,OAAO;wBAAE,OAAO,YAAY,KAAK;oBAAW;gBAChD;gBAEA,IAAI,CAAC,MAAM,OAAO;gBAElB,MAAM,UAAU,MAAM,0LAAM,CAAC,OAAO,CAChC,YAAY,QAAQ,EACpB,KAAK,cAAc;gBAGvB,IAAI,CAAC,SAAS,OAAO;gBAErB,OAAO;oBACH,IAAI,KAAK,EAAE;oBACX,OAAO,KAAK,KAAK;oBACjB,MAAM,KAAK,IAAI;gBACnB;YACJ;QACJ;KACH;IACD,SAAS;QACL,UAAU;IACd;IACA,WAAW;QACP,MAAM,KAAI,EAAE,KAAK,EAAE,IAAI,EAAE;YACrB,IAAI,MAAM;gBACN,MAAM,EAAE,GAAG,KAAK,EAAE;YACtB;YACA,OAAO;QACX;QACA,MAAM,SAAQ,EAAE,OAAO,EAAE,KAAK,EAAE;YAC5B,IAAI,QAAQ,IAAI,IAAI,MAAM,EAAE,EAAE;gBAC1B,QAAQ,IAAI,CAAC,EAAE,GAAG,MAAM,EAAE;YAC9B;YACA,OAAO;QACX;IACJ;IACA,OAAO;QACH,QAAQ;IACZ;AACJ"}},
{"offset": {"line": 137, "column": 0}, "map": {"version":3,"sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/src/lib/prisma.ts"],"sourcesContent":["import { PrismaClient } from '@prisma/client';\r\nimport { PrismaPg } from '@prisma/adapter-pg';\r\nimport { Pool } from 'pg';\r\n\r\nconst globalForPrisma = globalThis as unknown as {\r\n prisma: PrismaClient | undefined;\r\n};\r\n\r\n/**\r\n * Returns a singleton PrismaClient instance using the Prisma v7 adapter pattern.\r\n * Uses @prisma/adapter-pg with a pg Pool for direct PostgreSQL connections.\r\n */\r\nexport function getDB(): PrismaClient {\r\n if (!globalForPrisma.prisma) {\r\n const connectionString = process.env.DATABASE_URL;\r\n const pool = new Pool({ connectionString });\r\n const adapter = new PrismaPg(pool);\r\n\r\n globalForPrisma.prisma = new PrismaClient({ adapter });\r\n }\r\n return globalForPrisma.prisma;\r\n}\r\n\r\nexport default getDB;\r\n"],"names":[],"mappings":";;;;;;AAAA;AACA;AACA;;;;;;;;;AAEA,MAAM,kBAAkB;AAQjB,SAAS;IACZ,IAAI,CAAC,gBAAgB,MAAM,EAAE;QACzB,MAAM,mBAAmB,QAAQ,GAAG,CAAC,YAAY;QACjD,MAAM,OAAO,IAAI,iMAAI,CAAC;YAAE;QAAiB;QACzC,MAAM,UAAU,IAAI,qNAAQ,CAAC;QAE7B,gBAAgB,MAAM,GAAG,IAAI,kPAAY,CAAC;YAAE;QAAQ;IACxD;IACA,OAAO,gBAAgB,MAAM;AACjC;uCAEe"}},
{"offset": {"line": 176, "column": 0}, "map": {"version":3,"sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/src/app/api/projects/route.ts"],"sourcesContent":["export const dynamic = 'force-dynamic';\r\n\r\nimport { NextRequest, NextResponse } from 'next/server';\r\nimport { auth } from '@/lib/auth';\r\nimport getDB from '@/lib/prisma';\r\n\r\n// GET /api/projects — List all user's projects\r\nexport async function GET() {\r\n const session = await auth();\r\n if (!session?.user?.id) {\r\n return NextResponse.json({ error: 'Non autorisé' }, { status: 401 });\r\n }\r\n\r\n const projects = await getDB().project.findMany({\r\n where: { userId: session.user.id },\r\n orderBy: { updatedAt: 'desc' },\r\n include: {\r\n _count: { select: { chapters: true, entities: true } },\r\n },\r\n });\r\n\r\n return NextResponse.json(projects);\r\n}\r\n\r\n\r\n\r\n// POST /api/projects — Create a new project\r\nexport async function POST(request: NextRequest) {\r\n const session = await auth();\r\n if (!session?.user?.id) {\r\n return NextResponse.json({ error: 'Non autorisé' }, { status: 401 });\r\n }\r\n\r\n // Check plan limits\r\n const prisma = getDB();\r\n const user = await prisma.user.findUnique({\r\n where: { id: session.user.id },\r\n include: { subscriptionPlan: true }\r\n }) as any; // Cast to any to bypass Prisma type cache issues\r\n\r\n const limit = user?.subscriptionPlan?.maxProjects ?? 3;\r\n const planName = user?.subscriptionPlan?.displayName || 'Gratuit';\r\n const currentCount = await prisma.project.count({ where: { userId: session.user.id } });\r\n\r\n if (limit !== -1 && currentCount >= limit) {\r\n return NextResponse.json(\r\n { error: `Limite de ${limit} projets atteinte pour le plan ${planName}. Passez au plan supérieur !` },\r\n { status: 403 }\r\n );\r\n }\r\n\r\n const body = await request.json();\r\n\r\n const project = await prisma.project.create({\r\n data: {\r\n title: body.title || 'Nouveau Roman',\r\n author: body.author || session.user.name || 'Auteur',\r\n settings: body.settings || null,\r\n userId: session.user.id,\r\n },\r\n });\r\n\r\n return NextResponse.json(project, { status: 201 });\r\n}\r\n"],"names":[],"mappings":";;;;;;;;AAEA;AACA;AACA;;;;;AAJO,MAAM,UAAU;;;;AAOhB,eAAe;IAClB,MAAM,UAAU,MAAM,IAAA,wKAAI;IAC1B,IAAI,CAAC,SAAS,MAAM,IAAI;QACpB,OAAO,4LAAY,CAAC,IAAI,CAAC;YAAE,OAAO;QAAe,GAAG;YAAE,QAAQ;QAAI;IACtE;IAEA,MAAM,WAAW,MAAM,IAAA,6KAAK,IAAG,OAAO,CAAC,QAAQ,CAAC;QAC5C,OAAO;YAAE,QAAQ,QAAQ,IAAI,CAAC,EAAE;QAAC;QACjC,SAAS;YAAE,WAAW;QAAO;QAC7B,SAAS;YACL,QAAQ;gBAAE,QAAQ;oBAAE,UAAU;oBAAM,UAAU;gBAAK;YAAE;QACzD;IACJ;IAEA,OAAO,4LAAY,CAAC,IAAI,CAAC;AAC7B;AAKO,eAAe,KAAK,OAAoB;IAC3C,MAAM,UAAU,MAAM,IAAA,wKAAI;IAC1B,IAAI,CAAC,SAAS,MAAM,IAAI;QACpB,OAAO,4LAAY,CAAC,IAAI,CAAC;YAAE,OAAO;QAAe,GAAG;YAAE,QAAQ;QAAI;IACtE;IAEA,oBAAoB;IACpB,MAAM,SAAS,IAAA,6KAAK;IACpB,MAAM,OAAO,MAAM,OAAO,IAAI,CAAC,UAAU,CAAC;QACtC,OAAO;YAAE,IAAI,QAAQ,IAAI,CAAC,EAAE;QAAC;QAC7B,SAAS;YAAE,kBAAkB;QAAK;IACtC,IAAW,iDAAiD;IAE5D,MAAM,QAAQ,MAAM,kBAAkB,eAAe;IACrD,MAAM,WAAW,MAAM,kBAAkB,eAAe;IACxD,MAAM,eAAe,MAAM,OAAO,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO;YAAE,QAAQ,QAAQ,IAAI,CAAC,EAAE;QAAC;IAAE;IAErF,IAAI,UAAU,CAAC,KAAK,gBAAgB,OAAO;QACvC,OAAO,4LAAY,CAAC,IAAI,CACpB;YAAE,OAAO,CAAC,UAAU,EAAE,MAAM,+BAA+B,EAAE,SAAS,4BAA4B,CAAC;QAAC,GACpG;YAAE,QAAQ;QAAI;IAEtB;IAEA,MAAM,OAAO,MAAM,QAAQ,IAAI;IAE/B,MAAM,UAAU,MAAM,OAAO,OAAO,CAAC,MAAM,CAAC;QACxC,MAAM;YACF,OAAO,KAAK,KAAK,IAAI;YACrB,QAAQ,KAAK,MAAM,IAAI,QAAQ,IAAI,CAAC,IAAI,IAAI;YAC5C,UAAU,KAAK,QAAQ,IAAI;YAC3B,QAAQ,QAAQ,IAAI,CAAC,EAAE;QAC3B;IACJ;IAEA,OAAO,4LAAY,CAAC,IAAI,CAAC,SAAS;QAAE,QAAQ;IAAI;AACpD"}}]
{"offset": {"line": 60, "column": 0}, "map": {"version":3,"sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/src/lib/auth.ts"],"sourcesContent":["import NextAuth from 'next-auth';\r\nimport Credentials from 'next-auth/providers/credentials';\r\nimport bcrypt from 'bcryptjs';\r\n\r\nexport const { handlers, signIn, signOut, auth } = NextAuth({\r\n providers: [\r\n Credentials({\r\n name: 'credentials',\r\n credentials: {\r\n email: { label: 'Email', type: 'email' },\r\n password: { label: 'Password', type: 'password' },\r\n },\r\n async authorize(credentials) {\r\n if (!credentials?.email || !credentials?.password) return null;\r\n\r\n // Lazy import to avoid PrismaClient initialization during build\r\n const { default: getDB } = await import('./prisma');\r\n const prisma = getDB();\r\n\r\n const user = await prisma.user.findUnique({\r\n where: { email: credentials.email as string },\r\n });\r\n\r\n if (!user) return null;\r\n\r\n const isValid = await bcrypt.compare(\r\n credentials.password as string,\r\n user.hashedPassword\r\n );\r\n\r\n if (!isValid) return null;\r\n\r\n return {\r\n id: user.id,\r\n email: user.email,\r\n name: user.name,\r\n };\r\n },\r\n }),\r\n ],\r\n session: {\r\n strategy: 'jwt',\r\n },\r\n callbacks: {\r\n async jwt({ token, user }) {\r\n if (user) {\r\n token.id = user.id;\r\n }\r\n return token;\r\n },\r\n async session({ session, token }) {\r\n if (session.user && token.id) {\r\n session.user.id = token.id as string;\r\n }\r\n return session;\r\n },\r\n },\r\n pages: {\r\n signIn: '/',\r\n },\r\n});\r\n"],"names":[],"mappings":";;;;;;;;;;AAAA;AACA;AAAA;AACA;;;;;;;;AAEO,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,IAAA,8MAAQ,EAAC;IACxD,WAAW;QACP,IAAA,mNAAW,EAAC;YACR,MAAM;YACN,aAAa;gBACT,OAAO;oBAAE,OAAO;oBAAS,MAAM;gBAAQ;gBACvC,UAAU;oBAAE,OAAO;oBAAY,MAAM;gBAAW;YACpD;YACA,MAAM,WAAU,WAAW;gBACvB,IAAI,CAAC,aAAa,SAAS,CAAC,aAAa,UAAU,OAAO;gBAE1D,gEAAgE;gBAChE,MAAM,EAAE,SAAS,KAAK,EAAE,GAAG;gBAC3B,MAAM,SAAS;gBAEf,MAAM,OAAO,MAAM,OAAO,IAAI,CAAC,UAAU,CAAC;oBACtC,OAAO;wBAAE,OAAO,YAAY,KAAK;oBAAW;gBAChD;gBAEA,IAAI,CAAC,MAAM,OAAO;gBAElB,MAAM,UAAU,MAAM,sNAAM,CAAC,OAAO,CAChC,YAAY,QAAQ,EACpB,KAAK,cAAc;gBAGvB,IAAI,CAAC,SAAS,OAAO;gBAErB,OAAO;oBACH,IAAI,KAAK,EAAE;oBACX,OAAO,KAAK,KAAK;oBACjB,MAAM,KAAK,IAAI;gBACnB;YACJ;QACJ;KACH;IACD,SAAS;QACL,UAAU;IACd;IACA,WAAW;QACP,MAAM,KAAI,EAAE,KAAK,EAAE,IAAI,EAAE;YACrB,IAAI,MAAM;gBACN,MAAM,EAAE,GAAG,KAAK,EAAE;YACtB;YACA,OAAO;QACX;QACA,MAAM,SAAQ,EAAE,OAAO,EAAE,KAAK,EAAE;YAC5B,IAAI,QAAQ,IAAI,IAAI,MAAM,EAAE,EAAE;gBAC1B,QAAQ,IAAI,CAAC,EAAE,GAAG,MAAM,EAAE;YAC9B;YACA,OAAO;QACX;IACJ;IACA,OAAO;QACH,QAAQ;IACZ;AACJ"}},
{"offset": {"line": 144, "column": 0}, "map": {"version":3,"sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/src/lib/prisma.ts"],"sourcesContent":["import { PrismaClient } from '@prisma/client';\r\nimport { PrismaPg } from '@prisma/adapter-pg';\r\nimport { Pool } from 'pg';\r\n\r\nconst globalForPrisma = globalThis as unknown as {\r\n prisma: PrismaClient | undefined;\r\n};\r\n\r\n/**\r\n * Returns a singleton PrismaClient instance using the Prisma v7 adapter pattern.\r\n * Uses @prisma/adapter-pg with a pg Pool for direct PostgreSQL connections.\r\n */\r\nexport function getDB(): PrismaClient {\r\n if (!globalForPrisma.prisma) {\r\n const connectionString = process.env.DATABASE_URL;\r\n const pool = new Pool({ connectionString });\r\n const adapter = new PrismaPg(pool);\r\n\r\n globalForPrisma.prisma = new PrismaClient({ adapter });\r\n }\r\n return globalForPrisma.prisma;\r\n}\r\n\r\nexport default getDB;\r\n"],"names":[],"mappings":";;;;;;AAAA;AACA;AACA;;;;;;;;;AAEA,MAAM,kBAAkB;AAQjB,SAAS;IACZ,IAAI,CAAC,gBAAgB,MAAM,EAAE;QACzB,MAAM,mBAAmB,QAAQ,GAAG,CAAC,YAAY;QACjD,MAAM,OAAO,IAAI,iMAAI,CAAC;YAAE;QAAiB;QACzC,MAAM,UAAU,IAAI,qNAAQ,CAAC;QAE7B,gBAAgB,MAAM,GAAG,IAAI,kPAAY,CAAC;YAAE;QAAQ;IACxD;IACA,OAAO,gBAAgB,MAAM;AACjC;uCAEe"}},
{"offset": {"line": 183, "column": 0}, "map": {"version":3,"sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/src/app/api/projects/route.ts"],"sourcesContent":["export const dynamic = 'force-dynamic';\r\n\r\nimport { NextRequest, NextResponse } from 'next/server';\r\nimport { auth } from '@/lib/auth';\r\nimport getDB from '@/lib/prisma';\r\n\r\n// GET /api/projects — List all user's projects\r\nexport async function GET() {\r\n const session = await auth();\r\n if (!session?.user?.id) {\r\n return NextResponse.json({ error: 'Non autorisé' }, { status: 401 });\r\n }\r\n\r\n const projects = await getDB().project.findMany({\r\n where: { userId: session.user.id },\r\n orderBy: { updatedAt: 'desc' },\r\n include: {\r\n _count: { select: { chapters: true, entities: true } },\r\n },\r\n });\r\n\r\n return NextResponse.json(projects);\r\n}\r\n\r\n\r\n\r\n// POST /api/projects — Create a new project\r\nexport async function POST(request: NextRequest) {\r\n const session = await auth();\r\n if (!session?.user?.id) {\r\n return NextResponse.json({ error: 'Non autorisé' }, { status: 401 });\r\n }\r\n\r\n // Check plan limits\r\n const prisma = getDB();\r\n const user = await prisma.user.findUnique({\r\n where: { id: session.user.id },\r\n include: { subscriptionPlan: true }\r\n }) as any; // Cast to any to bypass Prisma type cache issues\r\n\r\n const limit = user?.subscriptionPlan?.maxProjects ?? 3;\r\n const planName = user?.subscriptionPlan?.displayName || 'Gratuit';\r\n const currentCount = await prisma.project.count({ where: { userId: session.user.id } });\r\n\r\n if (limit !== -1 && currentCount >= limit) {\r\n return NextResponse.json(\r\n { error: `Limite de ${limit} projets atteinte pour le plan ${planName}. Passez au plan supérieur !` },\r\n { status: 403 }\r\n );\r\n }\r\n\r\n const body = await request.json();\r\n\r\n const project = await prisma.project.create({\r\n data: {\r\n title: body.title || 'Nouveau Roman',\r\n author: body.author || session.user.name || 'Auteur',\r\n settings: body.settings || null,\r\n userId: session.user.id,\r\n },\r\n });\r\n\r\n return NextResponse.json(project, { status: 201 });\r\n}\r\n"],"names":[],"mappings":";;;;;;;;AAEA;AACA;AACA;;;;;;AAJO,MAAM,UAAU;;;;AAOhB,eAAe;IAClB,MAAM,UAAU,MAAM,IAAA,wKAAI;IAC1B,IAAI,CAAC,SAAS,MAAM,IAAI;QACpB,OAAO,4LAAY,CAAC,IAAI,CAAC;YAAE,OAAO;QAAe,GAAG;YAAE,QAAQ;QAAI;IACtE;IAEA,MAAM,WAAW,MAAM,IAAA,6KAAK,IAAG,OAAO,CAAC,QAAQ,CAAC;QAC5C,OAAO;YAAE,QAAQ,QAAQ,IAAI,CAAC,EAAE;QAAC;QACjC,SAAS;YAAE,WAAW;QAAO;QAC7B,SAAS;YACL,QAAQ;gBAAE,QAAQ;oBAAE,UAAU;oBAAM,UAAU;gBAAK;YAAE;QACzD;IACJ;IAEA,OAAO,4LAAY,CAAC,IAAI,CAAC;AAC7B;AAKO,eAAe,KAAK,OAAoB;IAC3C,MAAM,UAAU,MAAM,IAAA,wKAAI;IAC1B,IAAI,CAAC,SAAS,MAAM,IAAI;QACpB,OAAO,4LAAY,CAAC,IAAI,CAAC;YAAE,OAAO;QAAe,GAAG;YAAE,QAAQ;QAAI;IACtE;IAEA,oBAAoB;IACpB,MAAM,SAAS,IAAA,6KAAK;IACpB,MAAM,OAAO,MAAM,OAAO,IAAI,CAAC,UAAU,CAAC;QACtC,OAAO;YAAE,IAAI,QAAQ,IAAI,CAAC,EAAE;QAAC;QAC7B,SAAS;YAAE,kBAAkB;QAAK;IACtC,IAAW,iDAAiD;IAE5D,MAAM,QAAQ,MAAM,kBAAkB,eAAe;IACrD,MAAM,WAAW,MAAM,kBAAkB,eAAe;IACxD,MAAM,eAAe,MAAM,OAAO,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO;YAAE,QAAQ,QAAQ,IAAI,CAAC,EAAE;QAAC;IAAE;IAErF,IAAI,UAAU,CAAC,KAAK,gBAAgB,OAAO;QACvC,OAAO,4LAAY,CAAC,IAAI,CACpB;YAAE,OAAO,CAAC,UAAU,EAAE,MAAM,+BAA+B,EAAE,SAAS,4BAA4B,CAAC;QAAC,GACpG;YAAE,QAAQ;QAAI;IAEtB;IAEA,MAAM,OAAO,MAAM,QAAQ,IAAI;IAE/B,MAAM,UAAU,MAAM,OAAO,OAAO,CAAC,MAAM,CAAC;QACxC,MAAM;YACF,OAAO,KAAK,KAAK,IAAI;YACrB,QAAQ,KAAK,MAAM,IAAI,QAAQ,IAAI,CAAC,IAAI,IAAI;YAC5C,UAAU,KAAK,QAAQ,IAAI;YAC3B,QAAQ,QAAQ,IAAI,CAAC,EAAE;QAC3B;IACJ;IAEA,OAAO,4LAAY,CAAC,IAAI,CAAC,SAAS;QAAE,QAAQ;IAAI;AACpD"}}]
}