diff --git a/projects/backend/src/index.ts b/projects/backend/src/index.ts index 87177d4..bb3e10c 100644 --- a/projects/backend/src/index.ts +++ b/projects/backend/src/index.ts @@ -17,6 +17,7 @@ import { PlayerService } from "./service/player.service"; import { cron } from "@elysiajs/cron"; import { PlayerDocument, PlayerModel } from "./model/player"; import { scoresaberService } from "@ssr/common/service/impl/scoresaber"; +import { delay } from "@ssr/common/utils/utils"; // Load .env file dotenv.config({ @@ -36,6 +37,8 @@ app.use( timezone: "Europe/London", run: async () => { const pages = 10; + const cooldown = 60_000 / 200; // 200 requests per minute + let toTrack: PlayerDocument[] = await PlayerModel.find({}); const toRemoveIds: string[] = []; @@ -63,6 +66,7 @@ app.use( console.log(`Tracking ${toTrack.length} player statistics...`); for (const player of toTrack) { await PlayerService.trackScoreSaberPlayer(player); + await delay(cooldown); } console.log("Finished tracking player statistics."); }, diff --git a/projects/common/src/utils/utils.ts b/projects/common/src/utils/utils.ts index 7179875..2b02b13 100644 --- a/projects/common/src/utils/utils.ts +++ b/projects/common/src/utils/utils.ts @@ -4,3 +4,12 @@ export function isProduction() { return process.env.NODE_ENV === "production"; } + +/** + * Delays a promise + * + * @param ms the number of milliseconds to delay + */ +export function delay(ms: number) { + return new Promise(resolve => setTimeout(resolve, ms)); +}