diff --git a/template/app/src/demo-ai-app/operations.ts b/template/app/src/demo-ai-app/operations.ts index a9c1039f..b632b89e 100644 --- a/template/app/src/demo-ai-app/operations.ts +++ b/template/app/src/demo-ai-app/operations.ts @@ -1,4 +1,5 @@ import * as z from 'zod'; +import type { PrismaPromise } from '@prisma/client'; import type { Task, GptResponse, User } from 'wasp/entities'; import type { GenerateGptResponse, @@ -57,22 +58,14 @@ export const generateGptResponse: GenerateGptResponse[] = [createResponse]; + + if (!isUserSubscribed(context.user)) { + const decrementCredit = context.entities.User.update({ + where: { id: context.user.id }, + data: { + credits: { + decrement: 1, + }, + }, + }); + transactions.push(decrementCredit); + } + console.log('Decrementing credits and saving response'); - prisma.$transaction([decrementCredit, createResponse]); + await prisma.$transaction(transactions); return generatedSchedule; }; function isEligibleForResponse(user: User) { - const isUserSubscribed = + return isUserSubscribed(user) || user.credits > 0; +} + +function isUserSubscribed(user: User) { + return ( user.subscriptionStatus === SubscriptionStatus.Active || - user.subscriptionStatus === SubscriptionStatus.CancelAtPeriodEnd; - const userHasCredits = user.credits > 0; - return isUserSubscribed || userHasCredits; + user.subscriptionStatus === SubscriptionStatus.CancelAtPeriodEnd + ); } const createTaskInputSchema = z.object({