|
| 1 | +import axios from '@/middleware/axios-config' |
| 2 | +import type { DropdownOption } from '@/shared/data-access/models/dropdownOption' |
| 3 | +import type { Media } from '@/shared/data-access/models/media' |
| 4 | +import type { Pagination } from '@/shared/data-access/models/pagination' |
| 5 | +import type { SeasonData } from '@/shared/data-access/models/seasonData' |
| 6 | +import type { SeasonParams } from '@/shared/data-access/models/seasonParams' |
| 7 | + |
| 8 | +const BASE_URL = 'https://api.jikan.moe/v4' |
| 9 | + |
| 10 | +// export const getSeasonMediaData = async (params: SeasonParams) => { |
| 11 | + |
| 12 | +export const getSeasonMediaData = async () => { |
| 13 | + try { |
| 14 | + const res = await axios.get(`${BASE_URL}/seasons/${2024}/${'winter'}`) |
| 15 | + const data: Media[] = res.data.data.map((item: any) => ({ |
| 16 | + id: item.mal_id, |
| 17 | + title: item.title, |
| 18 | + titleEnglish: item.title_english, |
| 19 | + from: item.aired?.from, |
| 20 | + episodes: item.episodes, |
| 21 | + genres: item.genres.map((r: any) => r.name), |
| 22 | + imageSrc: item.images.jpg.image_url, |
| 23 | + synopsis: item.synopsis, |
| 24 | + score: item.score, |
| 25 | + members: item.members |
| 26 | + })) |
| 27 | + const pagination: Pagination = { |
| 28 | + first: res.data.pagination.current_page, |
| 29 | + rows: res.data.pagination.items.per_page, |
| 30 | + total: res.data.pagination.items.total |
| 31 | + } |
| 32 | + return { mediaData: { data, pagination } } |
| 33 | + } catch (error) { |
| 34 | + console.error('Error fetching top airing animes:', error) |
| 35 | + throw error |
| 36 | + } |
| 37 | +} |
| 38 | + |
| 39 | +export const getSeasonData = async () => { |
| 40 | + try { |
| 41 | + const res = await axios.get(`${BASE_URL}/seasons`) |
| 42 | + const seasonData: SeasonData[] = res.data.data.map( |
| 43 | + (item: any) => |
| 44 | + ({ |
| 45 | + year: item.year, |
| 46 | + seasonOptions: item.seasons.map( |
| 47 | + (s: string) => |
| 48 | + ({ |
| 49 | + label: s.charAt(0).toUpperCase() + s.slice(1), |
| 50 | + value: s |
| 51 | + }) satisfies DropdownOption |
| 52 | + ) |
| 53 | + }) satisfies SeasonData |
| 54 | + ) |
| 55 | + const yearOptions: DropdownOption[] = seasonData.map( |
| 56 | + (s: SeasonData) => |
| 57 | + ({ |
| 58 | + label: s.year, |
| 59 | + value: s.year.toString() |
| 60 | + }) satisfies DropdownOption |
| 61 | + ) |
| 62 | + return { yearsSeasonsData: { seasonData, yearOptions } } |
| 63 | + } catch (error) { |
| 64 | + console.error('Error fetching top airing animes:', error) |
| 65 | + throw error |
| 66 | + } |
| 67 | +} |
0 commit comments