chore: query optimization
This commit is contained in:
@@ -19,10 +19,11 @@
|
||||
}
|
||||
],
|
||||
"paths": {
|
||||
"@app/*": ["./app/*"],
|
||||
"@anthropic": ["./utils/anthropicClient.ts"],
|
||||
"@components/*": ["./components/*"],
|
||||
"@utils/*": ["./utils/*"],
|
||||
"@consumer/*": ["./utils/consumer/*"],
|
||||
"@prisma": ["./prisma/prisma"],
|
||||
"@purchases/*": ["./utils/purchases/*"]
|
||||
}
|
||||
},
|
||||
|
||||
@@ -1,23 +1,15 @@
|
||||
import 'dotenv/config';
|
||||
import { Consumer, consumerSchema } from './types';
|
||||
import { Tool } from './tool';
|
||||
import { BaseTool, makeRequest } from '../anthropicClient';
|
||||
import { BaseTool, makeRequest } from '@anthropic';
|
||||
import { generatePrompt } from './prompt';
|
||||
import { generateConsumerSeed } from '@utils/generateConsumerSeed';
|
||||
import prisma from '../../prisma/prisma';
|
||||
import prisma from '@prisma';
|
||||
|
||||
export async function generate() {
|
||||
const { letters, birthday, zipCode } = generateConsumerSeed();
|
||||
|
||||
const newConsumer = await prisma.consumer.create({
|
||||
data: {
|
||||
letters,
|
||||
birthday: birthday.toDate(),
|
||||
zipCode
|
||||
}
|
||||
});
|
||||
|
||||
console.info(`New consumer being generated with id ${newConsumer.id}`);
|
||||
console.info(`New consumer being generated`);
|
||||
|
||||
const prompt = generatePrompt(letters, birthday, zipCode);
|
||||
|
||||
@@ -32,11 +24,11 @@ export async function generate() {
|
||||
|
||||
console.info('Generated consumer by Anthropic', validConsumer.data);
|
||||
|
||||
await prisma.consumer.update({
|
||||
where: {
|
||||
id: newConsumer.id
|
||||
},
|
||||
const newConsumer = await prisma.consumer.create({
|
||||
data: {
|
||||
letters,
|
||||
birthday: birthday.toDate(),
|
||||
zipCode,
|
||||
value: validConsumer.data
|
||||
}
|
||||
});
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { ExerciseActivity, Consumer, SocialActivity } from '../consumer/types';
|
||||
import { ExerciseActivity, Consumer, SocialActivity } from '@consumer/types';
|
||||
import { getWeekRanges, isDateInRange } from '../dateFunctions';
|
||||
|
||||
function formatCategories(
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
import { PurchaseList, purchaseListSchema } from './types';
|
||||
import { Tool } from './tool';
|
||||
import { BaseTool, makeRequest } from '../anthropicClient';
|
||||
import { BaseTool, makeRequest } from '@anthropic';
|
||||
import { generatePrompt } from './prompt';
|
||||
import { Consumer } from '../consumer/types';
|
||||
import prisma from '../../prisma/prisma';
|
||||
import { Consumer } from '@consumer/types';
|
||||
import prisma from '@prisma';
|
||||
|
||||
export async function generate(
|
||||
id: number | undefined,
|
||||
@@ -17,29 +17,8 @@ export async function generate(
|
||||
parseInt(process.env.NUMBER_OF_WEEKS ?? '4')
|
||||
);
|
||||
|
||||
const consumer = id
|
||||
? await prisma.consumer.update({
|
||||
where: {
|
||||
id
|
||||
},
|
||||
data: {
|
||||
editedValue: editedConsumer
|
||||
}
|
||||
})
|
||||
: await prisma.consumer.create({
|
||||
data: {
|
||||
editedValue: editedConsumer
|
||||
}
|
||||
});
|
||||
|
||||
const newPurchaseList = await prisma.purchaseList.create({
|
||||
data: {
|
||||
consumerId: consumer.id
|
||||
}
|
||||
});
|
||||
|
||||
console.info(
|
||||
`Generating purchase list with id ${newPurchaseList.id} for consumer with id ${consumer.id}`
|
||||
`Generating new purchase list for consumer with id ${id ?? 'N/A'}`
|
||||
);
|
||||
|
||||
try {
|
||||
@@ -58,21 +37,33 @@ export async function generate(
|
||||
(acc, week) => acc + week.purchases.length,
|
||||
0
|
||||
);
|
||||
|
||||
console.info(
|
||||
`Generated ${totalPurchases} purchases for purchase list with id ${newPurchaseList.id} for consumer wth id ${id}`
|
||||
`Generated ${totalPurchases} purchases for new purchase list for consumer wth id ${id}`
|
||||
);
|
||||
|
||||
await prisma.purchaseList.update({
|
||||
where: {
|
||||
id: newPurchaseList.id
|
||||
},
|
||||
const [consumer, purchaseList] = await prisma.$transaction(async tx => {
|
||||
const consumer = id
|
||||
? await tx.consumer.update({
|
||||
where: { id },
|
||||
data: { editedValue: editedConsumer }
|
||||
})
|
||||
: await tx.consumer.create({
|
||||
data: { editedValue: editedConsumer }
|
||||
});
|
||||
|
||||
const purchaseList = await tx.purchaseList.create({
|
||||
data: {
|
||||
consumerId: consumer.id,
|
||||
value: validPurchases.data
|
||||
}
|
||||
});
|
||||
|
||||
return [consumer, purchaseList];
|
||||
});
|
||||
|
||||
console.info(
|
||||
`Purchase list with id ${newPurchaseList.id} for consumer with id ${id} stored in database.`
|
||||
`Purchase list with id ${purchaseList.id} for consumer with id ${consumer.id} stored in database.`
|
||||
);
|
||||
|
||||
return validPurchases.data;
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import prisma from '../prisma/prisma';
|
||||
import prisma from '@prisma';
|
||||
|
||||
export async function rateLimiter() {
|
||||
if (!process.env.RATE_LIMIT) {
|
||||
@@ -7,7 +7,8 @@ export async function rateLimiter() {
|
||||
|
||||
const yesterday = new Date(Date.now() - 24 * 60 * 60 * 1000);
|
||||
|
||||
const consumersCount = await prisma.consumer.count({
|
||||
const count = await prisma.$transaction(async tx => {
|
||||
const consumersCount = await tx.consumer.count({
|
||||
where: {
|
||||
createdAt: {
|
||||
gt: yesterday
|
||||
@@ -15,13 +16,15 @@ export async function rateLimiter() {
|
||||
}
|
||||
});
|
||||
|
||||
const purchaseListsCount = await prisma.purchaseList.count({
|
||||
const purchaseListsCount = await tx.purchaseList.count({
|
||||
where: {
|
||||
createdAt: {
|
||||
gt: yesterday
|
||||
}
|
||||
}
|
||||
});
|
||||
return consumersCount + purchaseListsCount;
|
||||
});
|
||||
|
||||
return consumersCount + purchaseListsCount > parseInt(process.env.RATE_LIMIT);
|
||||
return count > parseInt(process.env.RATE_LIMIT);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user