connection base prisma + postgres + login ok

This commit is contained in:
2026-02-26 21:58:16 +01:00
parent 78dc8813f1
commit 56b5615abf
1462 changed files with 429582 additions and 2546 deletions

View File

@@ -0,0 +1,379 @@
module.exports = [
"[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;
}),
"[project]/Documents/00 - projet/plumeia/src/lib/api.ts [app-ssr] (ecmascript)", ((__turbopack_context__) => {
"use strict";
__turbopack_context__.s([
"default",
()=>__TURBOPACK__default__export__
]);
const API_BASE_URL = '/api';
// --- API CLIENT ---
const api = {
async request (endpoint, options = {}) {
const url = `${API_BASE_URL}${endpoint}`;
const headers = {
'Content-Type': 'application/json',
...options.headers
};
const response = await fetch(url, {
...options,
headers,
credentials: 'include'
});
if (!response.ok) {
let errorMsg = `Error ${response.status}: ${response.statusText}`;
try {
const errorJson = await response.json();
console.error("API Error JSON:", errorJson);
if (errorJson.error) errorMsg = errorJson.error;
if (errorJson.message) errorMsg = errorJson.message;
} catch {
// Ignore json parse error
}
throw new Error(errorMsg);
}
if (response.status === 204) return null;
return response.json();
},
// --- AUTH ENDPOINTS ---
auth: {
async getSession () {
try {
return await api.request('/auth/get-session');
} catch {
return null;
}
},
async signIn (email, password) {
return api.request('/auth/sign-in/email', {
method: 'POST',
body: JSON.stringify({
email,
password
})
});
},
async signUp (email, password, name) {
return api.request('/auth/sign-up/email', {
method: 'POST',
body: JSON.stringify({
email,
password,
name
})
});
},
async signOut () {
return api.request('/auth/sign-out', {
method: 'POST'
});
}
},
// --- DATA ENDPOINTS ---
data: {
async list (table) {
const res = await api.request(`/data/read/${table}`);
return res.data || [];
},
async get (table, id) {
const res = await api.request(`/data/read/${table}/${id}`);
return res.data;
},
async create (table, data) {
return api.request(`/data/create/${table}`, {
method: 'POST',
body: JSON.stringify(data)
});
},
async update (table, id, data) {
return api.request(`/data/update/${table}/${id}`, {
method: 'PUT',
body: JSON.stringify(data)
});
},
async delete (table, id) {
return api.request(`/data/delete/${table}/${id}`, {
method: 'DELETE'
});
},
async getFullProject (projectId) {
const project = await this.get('projects', projectId);
const [chapters, entities, ideas] = await Promise.all([
api.request(`/data/chapters/list?project_id=${projectId}`),
api.request(`/data/entities/list?project_id=${projectId}`),
api.request(`/data/ideas/list?project_id=${projectId}`)
]);
return {
...project,
chapters: chapters || [],
entities: entities || [],
ideas: ideas || []
};
}
},
// --- AI ENDPOINTS (server-side via API routes) ---
ai: {
async generate (project, chapterId, prompt, user) {
return api.request('/ai/generate', {
method: 'POST',
body: JSON.stringify({
project,
chapterId,
prompt,
user
})
});
},
async transform (text, mode, context, user) {
const res = await api.request('/ai/transform', {
method: 'POST',
body: JSON.stringify({
text,
mode,
context,
user
})
});
return res.text;
}
}
};
const __TURBOPACK__default__export__ = api;
}),
"[project]/Documents/00 - projet/plumeia/src/hooks/useAuth.ts [app-ssr] (ecmascript)", ((__turbopack_context__) => {
"use strict";
__turbopack_context__.s([
"useAuth",
()=>useAuth
]);
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/00 - projet/plumeia/node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react.js [app-ssr] (ecmascript)");
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$src$2f$lib$2f$api$2e$ts__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/00 - projet/plumeia/src/lib/api.ts [app-ssr] (ecmascript)");
'use client';
;
;
const useAuth = ()=>{
const [user, setUser] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useState"])(null);
const [loading, setLoading] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useState"])(true);
// Check session on mount
(0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useEffect"])(()=>{
const checkSession = async ()=>{
try {
const session = await __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$src$2f$lib$2f$api$2e$ts__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["default"].auth.getSession();
if (session && session.user) {
setUser({
id: session.user.id,
email: session.user.email,
name: session.user.name || 'User',
subscription: {
plan: 'free',
startDate: Date.now(),
status: 'active'
},
usage: {
aiActionsCurrent: 0,
aiActionsLimit: 100,
projectsLimit: 3
},
preferences: {
theme: 'light',
dailyWordGoal: 500,
language: 'fr'
},
stats: {
totalWordsWritten: 0,
writingStreak: 0,
lastWriteDate: 0
}
});
}
} catch (err) {
console.error('Session check failed', err);
} finally{
setLoading(false);
}
};
checkSession();
}, []);
const login = async (email, pass)=>{
setLoading(true);
try {
await __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$src$2f$lib$2f$api$2e$ts__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["default"].auth.signIn(email, pass);
const session = await __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$src$2f$lib$2f$api$2e$ts__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["default"].auth.getSession();
if (session?.user) {
setUser({
id: session.user.id,
email: session.user.email,
name: session.user.name || 'User',
subscription: {
plan: 'free',
startDate: Date.now(),
status: 'active'
},
usage: {
aiActionsCurrent: 0,
aiActionsLimit: 100,
projectsLimit: 3
},
preferences: {
theme: 'light',
dailyWordGoal: 500,
language: 'fr'
},
stats: {
totalWordsWritten: 0,
writingStreak: 0,
lastWriteDate: 0
}
});
}
} catch (err) {
console.error('Login failed', err);
throw err;
} finally{
setLoading(false);
}
};
const signup = async (email, pass, name)=>{
setLoading(true);
try {
await __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$src$2f$lib$2f$api$2e$ts__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["default"].auth.signUp(email, pass, name);
let session = await __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$src$2f$lib$2f$api$2e$ts__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["default"].auth.getSession();
if (!session?.user) {
await __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$src$2f$lib$2f$api$2e$ts__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["default"].auth.signIn(email, pass);
session = await __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$src$2f$lib$2f$api$2e$ts__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["default"].auth.getSession();
}
if (session?.user) {
setUser({
id: session.user.id,
email: session.user.email,
name: session.user.name || name,
subscription: {
plan: 'free',
startDate: Date.now(),
status: 'active'
},
usage: {
aiActionsCurrent: 0,
aiActionsLimit: 100,
projectsLimit: 3
},
preferences: {
theme: 'light',
dailyWordGoal: 500,
language: 'fr'
},
stats: {
totalWordsWritten: 0,
writingStreak: 0,
lastWriteDate: 0
}
});
}
} catch (err) {
console.error('Signup failed', err);
throw err;
} finally{
setLoading(false);
}
};
const logout = async ()=>{
try {
await __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$src$2f$lib$2f$api$2e$ts__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["default"].auth.signOut();
} catch (err) {
console.error('Logout failed', err);
} finally{
setUser(null);
}
};
const incrementUsage = ()=>{
if (user) {
setUser({
...user,
usage: {
...user.usage,
aiActionsCurrent: user.usage.aiActionsCurrent + 1
}
});
}
};
return {
user,
login,
signup,
logout,
incrementUsage,
loading
};
};
}),
"[project]/Documents/00 - projet/plumeia/src/providers/AuthProvider.tsx [app-ssr] (ecmascript)", ((__turbopack_context__) => {
"use strict";
__turbopack_context__.s([
"AuthProvider",
()=>AuthProvider,
"useAuthContext",
()=>useAuthContext
]);
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/00 - projet/plumeia/node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react-jsx-dev-runtime.js [app-ssr] (ecmascript)");
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/00 - projet/plumeia/node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react.js [app-ssr] (ecmascript)");
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$src$2f$hooks$2f$useAuth$2e$ts__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/00 - projet/plumeia/src/hooks/useAuth.ts [app-ssr] (ecmascript)");
'use client';
;
;
;
const AuthContext = /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["createContext"])(null);
const AuthProvider = ({ children })=>{
const auth = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$src$2f$hooks$2f$useAuth$2e$ts__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useAuth"])();
return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(AuthContext.Provider, {
value: auth,
children: children
}, void 0, false, {
fileName: "[project]/Documents/00 - projet/plumeia/src/providers/AuthProvider.tsx",
lineNumber: 10,
columnNumber: 12
}, ("TURBOPACK compile-time value", void 0));
};
function useAuthContext() {
return (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useContext"])(AuthContext);
}
}),
"[project]/Documents/00 - projet/plumeia/node_modules/next/dist/server/route-modules/app-page/module.compiled.js [app-ssr] (ecmascript)", ((__turbopack_context__, module, exports) => {
"use strict";
if ("TURBOPACK compile-time falsy", 0) //TURBOPACK unreachable
;
else {
if ("TURBOPACK compile-time falsy", 0) //TURBOPACK unreachable
;
else {
if ("TURBOPACK compile-time truthy", 1) {
if ("TURBOPACK compile-time truthy", 1) {
module.exports = __turbopack_context__.r("[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)");
} else //TURBOPACK unreachable
;
} else //TURBOPACK unreachable
;
}
} //# sourceMappingURL=module.compiled.js.map
}),
"[project]/Documents/00 - projet/plumeia/node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react-jsx-dev-runtime.js [app-ssr] (ecmascript)", ((__turbopack_context__, module, exports) => {
"use strict";
module.exports = __turbopack_context__.r("[project]/Documents/00 - projet/plumeia/node_modules/next/dist/server/route-modules/app-page/module.compiled.js [app-ssr] (ecmascript)").vendored['react-ssr'].ReactJsxDevRuntime; //# sourceMappingURL=react-jsx-dev-runtime.js.map
}),
"[project]/Documents/00 - projet/plumeia/node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react.js [app-ssr] (ecmascript)", ((__turbopack_context__, module, exports) => {
"use strict";
module.exports = __turbopack_context__.r("[project]/Documents/00 - projet/plumeia/node_modules/next/dist/server/route-modules/app-page/module.compiled.js [app-ssr] (ecmascript)").vendored['react-ssr'].React; //# sourceMappingURL=react.js.map
}),
];
//# sourceMappingURL=%5Broot-of-the-server%5D__410fd4fe._.js.map