feat: Implement pricing page, AI generation/transformation APIs, user/project management, and database schema.

This commit is contained in:
2026-02-27 23:08:56 +01:00
parent ec89ddc9dc
commit 23560ac9c3
18 changed files with 837 additions and 94 deletions

View File

@@ -5,11 +5,7 @@ import { auth } from '@/lib/auth';
import getDB from '@/lib/prisma';
import { generateStoryContent } from '@/lib/gemini';
const PLAN_AI_LIMITS: Record<string, number> = {
free: 100,
pro: 5000,
master: 999999,
};
export async function POST(request: NextRequest) {
try {
@@ -23,17 +19,19 @@ export async function POST(request: NextRequest) {
// Check AI usage limit from DB
const dbUser = await prisma.user.findUnique({
where: { id: session.user.id },
select: { plan: true, aiActionsUsed: true },
});
include: { subscriptionPlan: true },
}) as any; // Bypass Prisma client types for this relation
if (!dbUser) {
return NextResponse.json({ error: 'Utilisateur non trouvé' }, { status: 404 });
}
const limit = PLAN_AI_LIMITS[dbUser.plan] || PLAN_AI_LIMITS.free;
if (dbUser.aiActionsUsed >= limit) {
const limit = dbUser.subscriptionPlan?.maxAiActions ?? 100;
const planName = dbUser.subscriptionPlan?.displayName || 'Gratuit';
if (limit !== -1 && dbUser.aiActionsUsed >= limit) {
return NextResponse.json(
{ error: `Limite de ${limit} actions IA atteinte pour le plan ${dbUser.plan}. Passez au plan supérieur !` },
{ error: `Limite de ${limit} actions IA atteinte pour le plan ${planName}. Passez au plan supérieur !` },
{ status: 403 }
);
}