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