chore: query optimization

This commit is contained in:
2024-12-08 10:17:25 +01:00
parent a91c4d56b0
commit b154474075
5 changed files with 53 additions and 66 deletions

View File

@@ -19,10 +19,11 @@
}
],
"paths": {
"@app/*": ["./app/*"],
"@anthropic": ["./utils/anthropicClient.ts"],
"@components/*": ["./components/*"],
"@utils/*": ["./utils/*"],
"@consumer/*": ["./utils/consumer/*"],
"@prisma": ["./prisma/prisma"],
"@purchases/*": ["./utils/purchases/*"]
}
},

View File

@@ -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
}
});

View File

@@ -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(

View File

@@ -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;

View File

@@ -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);
}