35 lines
1.2 KiB
TypeScript
35 lines
1.2 KiB
TypeScript
import { CronJob } from "quirrel/blitz"
|
|
import { PrismaClient, Item } from '@prisma/client';
|
|
import { RawItemData } from '../../core/dto/rawData/RawItemData';
|
|
import { propsToClassKey } from "@mui/styles";
|
|
|
|
export default CronJob(
|
|
"api/items/refresh", // the path of this API route
|
|
"@daily", // cron schedule (see https://crontab.guru)
|
|
async () => {
|
|
const itemsResponse = await fetch('https://dev.sp-tarkov.com/SPT-AKI/Server/raw/branch/development/project/assets/database/templates/items.json');
|
|
if (itemsResponse.status >= 300) {
|
|
throw Error(`Could not retrieve items from Gitea: code ${itemsResponse.status}`)
|
|
}
|
|
const items: { [id: string]: RawItemData } = await itemsResponse.json();
|
|
const prisma: PrismaClient = new PrismaClient();
|
|
|
|
const promises: any[] = []
|
|
|
|
Object.entries(items).forEach(
|
|
async ([key, value]) => {
|
|
const {props, ...data} = RawItemData.fromRawData(value).toItemData();
|
|
promises.push(await prisma.item.upsert({
|
|
create: {props, ...data},
|
|
update: data,
|
|
where: {
|
|
internalId: data.internalId
|
|
},
|
|
}))
|
|
}
|
|
);
|
|
|
|
await Promise.all(promises);
|
|
}
|
|
)
|