diff options
| author | Factiven <[email protected]> | 2023-12-24 13:03:54 +0700 |
|---|---|---|
| committer | Factiven <[email protected]> | 2023-12-24 13:03:54 +0700 |
| commit | 50a0f0240d7fef133eb5acc1bea2b1168b08e9db (patch) | |
| tree | 307e09e505580415a58d64b5fc3580e9235869f1 /pages/api/v2/etc/schedule | |
| parent | Update README.md (#104) (diff) | |
| download | moopa-50a0f0240d7fef133eb5acc1bea2b1168b08e9db.tar.xz moopa-50a0f0240d7fef133eb5acc1bea2b1168b08e9db.zip | |
migrate to typescript
Diffstat (limited to 'pages/api/v2/etc/schedule')
| -rw-r--r-- | pages/api/v2/etc/schedule/index.tsx (renamed from pages/api/v2/etc/schedule/index.js) | 35 |
1 files changed, 28 insertions, 7 deletions
diff --git a/pages/api/v2/etc/schedule/index.js b/pages/api/v2/etc/schedule/index.tsx index 2ddc82a..e6f0b26 100644 --- a/pages/api/v2/etc/schedule/index.js +++ b/pages/api/v2/etc/schedule/index.tsx @@ -1,6 +1,7 @@ import axios from "axios"; import cron from "cron"; import { rateLimiterRedis, redis } from "@/lib/redis"; +import { NextApiRequest, NextApiResponse } from "next"; // Function to fetch new data async function fetchData() { @@ -37,22 +38,42 @@ const job = new cron.CronJob("0 0 * * 1", () => { }); job.start(); -export default async function handler(req, res) { +interface Title { + romaji: string; + english: string; + native: string; +} + +type CachedData = { + id: string; + title: Title; + coverImage: string; + bannerImage: string; + airingAt: number; + airingEpisode: number; +}; + +export default async function handler( + req: NextApiRequest, + res: NextApiResponse +) { try { - let cached; + let cached: CachedData | null = null; if (redis) { try { - const ipAddress = req.socket.remoteAddress; - await rateLimiterRedis.consume(ipAddress); - } catch (error) { + const ipAddress: any = req.socket.remoteAddress; + await rateLimiterRedis?.consume(ipAddress); + } catch (error: any) { return res.status(429).json({ error: `Too Many Requests, retry after ${error.msBeforeNext / 1000}`, }); } - cached = await redis.get("schedule"); + const cachedData = await redis.get("schedule"); + cached = cachedData ? JSON.parse(cachedData) : null; } + if (cached) { - return res.status(200).json(JSON.parse(cached)); + return res.status(200).json(cached); } else { const data = await fetchData(); |