Files
zap.stream/src/service/game-database.ts
2024-05-15 15:07:10 +01:00

40 lines
1.0 KiB
TypeScript

export default class GameDatabase {
readonly url = "https://api.zap.stream/api/v1";
async searchGames(search: string, limit = 10) {
const rsp = await fetch(`${this.url}/games/search?q=${encodeURIComponent(search)}&limit=${limit}`);
if (rsp.ok) {
const games = (await rsp.json()) as Array<GameInfo>;
return games.map(a => ({
...a,
genres: [...a.genres, "gaming"],
}));
}
return [];
}
async getGame(id: string) {
const cacheKey = `game:${id}`;
const cached = window.sessionStorage.getItem(cacheKey);
if (cached) {
return JSON.parse(cached) as GameInfo;
}
const rsp = await fetch(`${this.url}/games/${id}`);
if (rsp.ok) {
const info = (await rsp.json()) as GameInfo | undefined;
if (info) {
window.sessionStorage.setItem(cacheKey, JSON.stringify(info));
}
return info;
}
}
}
export interface GameInfo {
id: string;
name: string | JSX.Element;
cover?: string;
genres: Array<string>;
className?: string;
}