feat: Implement pricing page, AI generation/transformation APIs, user/project management, and database schema.
This commit is contained in:
@@ -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 }
|
||||
);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user