From d3125c4bb463132b63e52cfe590323d8cff22139 Mon Sep 17 00:00:00 2001 From: Valentin Kaelin Date: Fri, 22 Sep 2023 22:37:15 +0200 Subject: [PATCH] feat: update cdragon cache every 30min --- server/.adonisrc.json | 6 +++-- server/ace-manifest.json | 20 +++++++++++++++ server/app/Services/CDragonService.ts | 34 +++++++++++++++----------- server/app/Tasks/UpdateCDragonCache.ts | 11 +++++++++ server/package-lock.json | 11 +++++++++ server/package.json | 1 + server/tsconfig.json | 3 ++- 7 files changed, 69 insertions(+), 17 deletions(-) create mode 100644 server/app/Tasks/UpdateCDragonCache.ts diff --git a/server/.adonisrc.json b/server/.adonisrc.json index 922286b..bfbc3ed 100644 --- a/server/.adonisrc.json +++ b/server/.adonisrc.json @@ -5,7 +5,8 @@ "@adonisjs/core/build/commands/index.js", "@adonisjs/repl/build/commands", "@adonisjs/lucid/build/commands", - "@rocketseat/adonis-bull/build/commands" + "@rocketseat/adonis-bull/build/commands", + "@stouder-io/adonis-scheduler/build/commands/MakeTask" ], "exceptionHandlerNamespace": "App/Exceptions/Handler", "aliases": { @@ -32,7 +33,8 @@ "@adonisjs/core", "@adonisjs/lucid", "@adonisjs/redis", - "@rocketseat/adonis-bull" + "@rocketseat/adonis-bull", + "@stouder-io/adonis-scheduler" ], "aceProviders": [ "@adonisjs/repl" diff --git a/server/ace-manifest.json b/server/ace-manifest.json index 73ece13..8e940ad 100644 --- a/server/ace-manifest.json +++ b/server/ace-manifest.json @@ -649,6 +649,26 @@ "alias": "p" } ] + }, + "make:task": { + "settings": { + "loadApp": false, + "stayAlive": false + }, + "commandPath": "@stouder-io/adonis-scheduler/build/commands/MakeTask", + "commandName": "make:task", + "description": "Make a new task", + "args": [ + { + "type": "string", + "propertyName": "name", + "name": "name", + "required": true, + "description": "Name of the job class" + } + ], + "aliases": [], + "flags": [] } }, "aliases": {} diff --git a/server/app/Services/CDragonService.ts b/server/app/Services/CDragonService.ts index 8fc8180..26aeb9b 100644 --- a/server/app/Services/CDragonService.ts +++ b/server/app/Services/CDragonService.ts @@ -29,8 +29,10 @@ class CDragonService { public readonly BASE_URL = 'https://raw.communitydragon.org/latest/plugins/rcp-be-lol-game-data/global/default/' - private setupCache(dto: T[]) { - return dto.reduce((obj, item) => ((obj[item.id] = item), obj), {}) + private setupCache(key: string, dto: T[]) { + if (dto.length === 0) return + + this[key] = dto.reduce((obj, item) => ((obj[item.id] = item), obj), {}) } /** @@ -45,19 +47,23 @@ class CDragonService { * Get global Context with CDragon Data */ public async getContext() { - const items = await Jax.CDragon.items() - const champions = await Jax.CDragon.champions() - const perks = await Jax.CDragon.perks() - const perkstyles = await Jax.CDragon.perkstyles() - const summonerSpells = await Jax.CDragon.summonerSpells() - const championRoles = await RoleIdentificationService.pullData().catch(() => {}) + const [items, champions, perks, perkstyles, summonerSpells, championRoles] = await Promise.all([ + Jax.CDragon.items(), + Jax.CDragon.champions(), + Jax.CDragon.perks(), + Jax.CDragon.perkstyles(), + Jax.CDragon.summonerSpells(), + RoleIdentificationService.pullData().catch(() => {}), + ]) - this.champions = this.setupCache(champions) - this.items = this.setupCache(items) - this.perks = this.setupCache(perks) - this.perkstyles = this.setupCache(perkstyles.styles) - this.summonerSpells = this.setupCache(summonerSpells) - this.championRoles = championRoles as ChampionsPlayRate + this.setupCache('champions', champions) + this.setupCache('items', items) + this.setupCache('perks', perks) + this.setupCache('perkstyles', perkstyles.styles) + this.setupCache('summonerSpells', summonerSpells) + if (championRoles) { + this.championRoles = championRoles + } } } diff --git a/server/app/Tasks/UpdateCDragonCache.ts b/server/app/Tasks/UpdateCDragonCache.ts new file mode 100644 index 0000000..8ed1f25 --- /dev/null +++ b/server/app/Tasks/UpdateCDragonCache.ts @@ -0,0 +1,11 @@ +import { TaskContract } from '@ioc:StouderIO/Scheduler' +import CDragonService from 'App/Services/CDragonService' + +export default class UpdateCDragonCache implements TaskContract { + public readonly name: string = 'UpdateCDragonCache' + public readonly cron: string = '*/30 * * * *' // every 30 minutes + + public async run(): Promise { + await CDragonService.getContext() + } +} diff --git a/server/package-lock.json b/server/package-lock.json index aac1f04..e1b2d1c 100644 --- a/server/package-lock.json +++ b/server/package-lock.json @@ -13,6 +13,7 @@ "@adonisjs/redis": "^7.3.4", "@adonisjs/repl": "^3.1.11", "@rocketseat/adonis-bull": "^1.0.4", + "@stouder-io/adonis-scheduler": "^1.0.3", "got": "^11.8.5", "luxon": "^3.4.3", "pg": "^8.11.3", @@ -1037,6 +1038,16 @@ "url": "https://github.com/sindresorhus/is?sponsor=1" } }, + "node_modules/@stouder-io/adonis-scheduler": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@stouder-io/adonis-scheduler/-/adonis-scheduler-1.0.3.tgz", + "integrity": "sha512-F1MTFU18HyBrh7ekNJoUhUMaUgzD89juIWbn2IQQieGYg7XnTVoRcbwS1zE5W8SFdrga2+w0+4EUidCdqiamVg==", + "dependencies": { + "@poppinss/utils": "^5.0.0", + "cron-parser": "^4.7.0", + "slash": "^3.0.0" + } + }, "node_modules/@szmarczak/http-timer": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz", diff --git a/server/package.json b/server/package.json index 8e6b411..65215f7 100644 --- a/server/package.json +++ b/server/package.json @@ -29,6 +29,7 @@ "@adonisjs/redis": "^7.3.4", "@adonisjs/repl": "^3.1.11", "@rocketseat/adonis-bull": "^1.0.4", + "@stouder-io/adonis-scheduler": "^1.0.3", "got": "^11.8.5", "luxon": "^3.4.3", "pg": "^8.11.3", diff --git a/server/tsconfig.json b/server/tsconfig.json index abafffd..78a9c6e 100644 --- a/server/tsconfig.json +++ b/server/tsconfig.json @@ -30,7 +30,8 @@ "@adonisjs/repl", "@adonisjs/lucid", "@adonisjs/redis", - "@rocketseat/adonis-bull" + "@rocketseat/adonis-bull", + "@stouder-io/adonis-scheduler" ] } }