Skip to content

Commit 7563142

Browse files
committed
web: Cache requests to brawlify events endpoint
1 parent a0d2f37 commit 7563142

File tree

2 files changed

+31
-26
lines changed

2 files changed

+31
-26
lines changed

web/api/lib/brawler-names.json

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,8 @@
11
{
2+
"16000094": "Kaze",
3+
"16000093": "Jae-Yong",
4+
"16000092": "Finx",
5+
"16000091": "Lumi",
26
"16000090": "Ollie",
37
"16000089": "Meeple",
48
"16000088": "Buzz Lightyear",

web/api/services/BrawlstarsService.ts

Lines changed: 27 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -42,11 +42,11 @@ function getApiUrl(tag: string) {
4242
}
4343
*/
4444

45-
const BRAWLIFY_CACHE_MINUTES = 60 * 24
46-
4745
export default class BrawlstarsService {
4846
private readonly clicker?: ClickerService;
49-
private brawlifyCache = new Cache<string, Record<number, string>>(BRAWLIFY_CACHE_MINUTES)
47+
// TODO move caches to mariadb
48+
private brawlifyBrawlersCache = new Cache<string, Record<number, string>>(60 * 24)
49+
private brawlifyEventsCache = new Cache<string, { current: ActiveEvent[], upcoming: ActiveEvent[] }>(10)
5050

5151
constructor() {
5252
if (clickhouseUrl != undefined) {
@@ -65,27 +65,30 @@ export default class BrawlstarsService {
6565
}
6666

6767
// TODO official API does not show all future events as of 2022-01-07
68-
public async getActiveEvents() {
69-
const response = await request<{ active: StarlistEvent[], upcoming: StarlistEvent[] }>(
70-
'events',
71-
brawlapiUrl,
72-
'fetch_events',
73-
{ },
74-
{ 'Authorization': 'Bearer ' + brawlapiToken },
75-
1000,
76-
);
68+
public async getActiveEvents(): Promise<{ current: ActiveEvent[], upcoming: ActiveEvent[] }> {
69+
return this.brawlifyEventsCache.getOrUpdate('events', async () => {
70+
const response = await request<{ active: StarlistEvent[], upcoming: StarlistEvent[] }>(
71+
'events',
72+
brawlapiUrl,
73+
'fetch_events',
74+
{ },
75+
{ 'Authorization': 'Bearer ' + brawlapiToken },
76+
1000,
77+
);
7778

78-
const mapper = (events: StarlistEvent[]) => events.map((event) => ({
79-
id: event.map.id.toString(),
80-
map: event.map.name,
81-
mode: unformatMode(event.map.gameMode.name),
82-
start: event.startTime,
83-
end: event.endTime,
84-
}) as ActiveEvent);
85-
return {
86-
current: mapper(response.active),
87-
upcoming: mapper(response.upcoming),
88-
}
79+
const mapper = (events: StarlistEvent[]) => events.map((event) => ({
80+
id: event.map.id.toString(),
81+
map: event.map.name,
82+
mode: unformatMode(event.map.gameMode.name),
83+
start: event.startTime,
84+
end: event.endTime,
85+
}) satisfies ActiveEvent);
86+
87+
return {
88+
current: mapper(response.active),
89+
upcoming: mapper(response.upcoming),
90+
}
91+
})
8992
}
9093

9194
public async getPlayerRanking(countryCode: string) {
@@ -150,9 +153,7 @@ export default class BrawlstarsService {
150153
}
151154

152155
private async getBrawlerMeta(): Promise<Record<number, string>> {
153-
// TODO move caches to mariadb
154-
155-
return this.brawlifyCache.getOrUpdate('brawlers', async () => {
156+
return this.brawlifyBrawlersCache.getOrUpdate('brawlers', async () => {
156157
const response = await request<{ list: StarlistBrawler[] }>(
157158
'brawlers',
158159
brawlapiUrl,

0 commit comments

Comments
 (0)