From 5b9a29ab4b3d1e01514ee759da30eb6793725486 Mon Sep 17 00:00:00 2001 From: Kalane Date: Tue, 14 Sep 2021 00:55:19 +0200 Subject: [PATCH] feat: add CDragonController back --- .../app/Controllers/Http/CDragonController.ts | 27 +++++++++++++++++++ server-v2/app/Serializers/RuneSerializer.ts | 27 +++++++++++++++++++ server-v2/start/routes.ts | 2 +- 3 files changed, 55 insertions(+), 1 deletion(-) create mode 100644 server-v2/app/Controllers/Http/CDragonController.ts create mode 100644 server-v2/app/Serializers/RuneSerializer.ts diff --git a/server-v2/app/Controllers/Http/CDragonController.ts b/server-v2/app/Controllers/Http/CDragonController.ts new file mode 100644 index 0000000..3b08bc3 --- /dev/null +++ b/server-v2/app/Controllers/Http/CDragonController.ts @@ -0,0 +1,27 @@ +import Redis from '@ioc:Adonis/Addons/Redis' +import { HttpContextContract } from '@ioc:Adonis/Core/HttpContext' +import RuneSerializer from 'App/Serializers/RuneSerializer' +import Jax from 'App/Services/Jax' + +export default class CDragonController { + public async runes({ response }: HttpContextContract) { + const cacheUrl = 'cdragon-runes' + + const requestCached = await Redis.get(cacheUrl) + if (requestCached) { + return response.json(requestCached) + } + + const perks = await Jax.CDragon.perks() + const perkstyles = await Jax.CDragon.perkstyles() + + const runesData = { + perks: RuneSerializer.serializePerks(perks), + perkstyles: RuneSerializer.serializeStyles(perkstyles.styles), + } + + await Redis.set(cacheUrl, JSON.stringify(runesData), 'EX', 36000) + + return response.json(runesData) + } +} diff --git a/server-v2/app/Serializers/RuneSerializer.ts b/server-v2/app/Serializers/RuneSerializer.ts new file mode 100644 index 0000000..056aad0 --- /dev/null +++ b/server-v2/app/Serializers/RuneSerializer.ts @@ -0,0 +1,27 @@ +import { PerkDTO, PerkStyleDTO } from 'App/Services/Jax/src/Endpoints/CDragonEndpoint' + +class RuneSerializer { + public serializePerks(perks: PerkDTO[]) { + return perks.reduce((acc, perk) => { + acc[perk.id] = { + name: perk.name, + desc: perk.longDesc, + icon: perk.iconPath, + } + return acc + }, {}) + } + + public serializeStyles(styles: PerkStyleDTO[]) { + return styles.reduce((acc, style) => { + acc[style.id] = { + name: style.name, + icon: style.iconPath, + slots: style.slots.filter((s) => s.type !== 'kStatMod').map((s) => s.perks), + } + return acc + }, {}) + } +} + +export default new RuneSerializer() diff --git a/server-v2/start/routes.ts b/server-v2/start/routes.ts index 4e9f001..bf6bcaa 100644 --- a/server-v2/start/routes.ts +++ b/server-v2/start/routes.ts @@ -41,7 +41,7 @@ Route.post('/summoner/overview', 'SummonersController.overview') // Route.post('/match/details', 'MatchesController.show') // Route.post('/match/details/ranks', 'MatchesController.showRanks') -// Route.get('/cdragon/runes', 'CDragonController.runes') +Route.get('/cdragon/runes', 'CDragonController.runes') Route.get('/test', async () => { const ids = [