animeController.ts
1 import Elysia, { t } from 'elysia' 2 import { filterAnimeList, getAnimeById, getEpisode, getEpisodeVideo } from '../service/animeService' 3 import { animeCache } from '../cache/animeCache' 4 5 const router = new Elysia() 6 export default router 7 8 router.get( 9 '/animes', 10 ({ query }) => { 11 return filterAnimeList(animeCache, { 12 title: query.title, 13 releaseDate: query.releaseDate, 14 genreList: query.genreList?.split(','), 15 }) 16 }, 17 { 18 query: t.Object({ 19 title: t.Optional(t.String()), 20 genreList: t.Optional(t.String()), 21 releaseDate: t.Optional(t.Numeric()), 22 }), 23 }, 24 ) 25 26 router.get( 27 '/animes/:id', 28 ({ params, error }) => { 29 const retrievedAnime = getAnimeById(params.id) 30 if (!retrievedAnime) return error(404, 'Not Found') 31 32 return retrievedAnime 33 }, 34 { 35 params: t.Object({ 36 id: t.Numeric(), 37 }), 38 }, 39 ) 40 41 router.get( 42 '/animes/:id/:episode', 43 async ({ params, error }) => { 44 const retrievedAnime = await getAnimeById(params.id) 45 if (!retrievedAnime) return error(404, 'Anime Not Found') 46 47 const retrievedEpisode = getEpisode(retrievedAnime, params.episode) 48 if (!retrievedEpisode) return error(404, 'Episode Not Found') 49 50 const retrievedEpisodeVideo = await getEpisodeVideo(retrievedEpisode.url) 51 if (!retrievedEpisodeVideo) return error(404, 'Episode Video Not Found') 52 53 return { 54 anime: retrievedAnime, 55 episode: { ...retrievedEpisode, video_url: retrievedEpisodeVideo }, 56 } 57 }, 58 { 59 params: t.Object({ 60 id: t.Numeric(), 61 episode: t.Numeric(), 62 }), 63 }, 64 )