This commit is contained in:
Timo Knuth
2025-10-15 00:03:05 +02:00
parent bccf771ffc
commit cd3ee5fc8f
15 changed files with 1096 additions and 186 deletions

View File

@@ -38,32 +38,67 @@ export async function GET(request: NextRequest) {
}
}
// Plan limits
const PLAN_LIMITS = {
FREE: 3,
PRO: 50,
BUSINESS: 500,
};
// POST /api/qrs - Create a new QR code
export async function POST(request: NextRequest) {
try {
const userId = cookies().get('userId')?.value;
console.log('POST /api/qrs - userId from cookie:', userId);
if (!userId) {
return NextResponse.json({ error: 'Unauthorized - no userId cookie' }, { status: 401 });
}
// Check if user exists
const userExists = await db.user.findUnique({
where: { id: userId }
// Check if user exists and get their plan
const user = await db.user.findUnique({
where: { id: userId },
select: { plan: true },
});
console.log('User exists:', !!userExists);
if (!userExists) {
console.log('User exists:', !!user);
if (!user) {
return NextResponse.json({ error: `User not found: ${userId}` }, { status: 404 });
}
const body = await request.json();
console.log('Request body:', body);
// Check if this is a static QR request
const isStatic = body.isStatic === true;
// Only check limits for DYNAMIC QR codes (static QR codes are unlimited)
if (!isStatic) {
// Count existing dynamic QR codes
const dynamicQRCount = await db.qRCode.count({
where: {
userId,
type: 'DYNAMIC',
},
});
const userPlan = user.plan || 'FREE';
const limit = PLAN_LIMITS[userPlan as keyof typeof PLAN_LIMITS] || PLAN_LIMITS.FREE;
if (dynamicQRCount >= limit) {
return NextResponse.json(
{
error: 'Limit reached',
message: `You have reached the limit of ${limit} dynamic QR codes for your ${userPlan} plan. Please upgrade to create more.`,
currentCount: dynamicQRCount,
limit,
plan: userPlan,
},
{ status: 403 }
);
}
}
let enrichedContent = body.content;