diff --git a/server/app/Controllers/Http/CDragonController.ts b/server/app/Controllers/Http/CDragonController.ts new file mode 100644 index 0000000..fef6e35 --- /dev/null +++ b/server/app/Controllers/Http/CDragonController.ts @@ -0,0 +1,27 @@ +import Redis from '@ioc:Adonis/Addons/Redis' +import { HttpContextContract } from '@ioc:Adonis/Core/HttpContext' +import Jax from 'App/Services/Jax' +import RuneTransformer from 'App/Transformers/RuneTransformer' + +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: RuneTransformer.transformPerks(perks), + perkstyles: RuneTransformer.transformStyles(perkstyles.styles), + } + + await Redis.set(cacheUrl, JSON.stringify(runesData), 'EX', 36000) + + return response.json(runesData) + } +} diff --git a/server/app/Transformers/RuneTransformer.ts b/server/app/Transformers/RuneTransformer.ts new file mode 100644 index 0000000..8b1834f --- /dev/null +++ b/server/app/Transformers/RuneTransformer.ts @@ -0,0 +1,22 @@ +import { PerkDTO, PerkStyleDTO } from 'App/Services/Jax/src/Endpoints/CDragonEndpoint' + +class RuneTransformer { + public transformPerks (perks: PerkDTO[]) { + return perks.map((perk) => ({ + id: perk.id, + name: perk.name, + desc: perk.longDesc, + icon: perk.iconPath, + })) + } + + public transformStyles (styles: PerkStyleDTO[]) { + return styles.map(style => ({ + id: style.id, + name: style.name, + icon: style.iconPath, + })) + } +} + +export default new RuneTransformer() diff --git a/server/start/routes.ts b/server/start/routes.ts index 83ccebc..d63a725 100644 --- a/server/start/routes.ts +++ b/server/start/routes.ts @@ -22,6 +22,8 @@ import Route from '@ioc:Adonis/Core/Route' Route.get('/', async () => ({ hi: 'Hello World from LeagueStats API', uptime: process.uptime() })) +Route.get('/cdragon/runes', 'CDragonController.runes') + Route.post('/summoner/basic', 'SummonersController.basic') Route.post('/summoner/overview', 'SummonersController.overview') Route.post('/summoner/champions', 'SummonersController.champions')