|
1 | 1 | import serverFetch from "@/utils/serverFetchUtil"; |
2 | 2 |
|
3 | | -import { ListUniversity } from "@/types/university"; |
| 3 | +import { AllRegionsUniversityList, ListUniversity, RegionEnumExtend } from "@/types/university"; |
4 | 4 |
|
| 5 | +// --- 타입 정의 --- |
5 | 6 | interface UniversitySearchResponse { |
6 | 7 | univApplyInfoPreviews: ListUniversity[]; |
7 | 8 | } |
8 | 9 |
|
9 | | -export const getSearchUniversitiesByText = async (value: string): Promise<ListUniversity[]> => { |
10 | | - // 검색어가 없으면 빈 배열을 반환하여 불필요한 요청을 막습니다. |
11 | | - if (!value || value.trim() === "") { |
| 10 | +export const getUniversitiesByText = async (value: string): Promise<ListUniversity[]> => { |
| 11 | + if (value === null || value === undefined) { |
12 | 12 | return []; |
13 | 13 | } |
14 | | - |
15 | 14 | const endpoint = `/univ-apply-infos/search/text?value=${encodeURIComponent(value)}`; |
16 | 15 | const response = await serverFetch<UniversitySearchResponse>(endpoint); |
17 | | - |
18 | 16 | return response.ok ? response.data.univApplyInfoPreviews : []; |
19 | 17 | }; |
| 18 | + |
| 19 | +export const getAllUniversities = async (): Promise<ListUniversity[]> => { |
| 20 | + return getUniversitiesByText(""); |
| 21 | +}; |
| 22 | + |
| 23 | +export const getCategorizedUniversities = async (): Promise<AllRegionsUniversityList> => { |
| 24 | + // 1. 단 한 번의 API 호출로 모든 대학 데이터를 가져옵니다. |
| 25 | + const allUniversities = await getAllUniversities(); |
| 26 | + |
| 27 | + const categorizedList: AllRegionsUniversityList = { |
| 28 | + [RegionEnumExtend.ALL]: allUniversities, |
| 29 | + [RegionEnumExtend.AMERICAS]: [], |
| 30 | + [RegionEnumExtend.EUROPE]: [], |
| 31 | + [RegionEnumExtend.ASIA]: [], |
| 32 | + [RegionEnumExtend.CHINA]: [], |
| 33 | + }; |
| 34 | + if (!allUniversities) return categorizedList; |
| 35 | + |
| 36 | + for (const university of allUniversities) { |
| 37 | + const region = university.region as RegionEnumExtend; // API 응답의 region 타입을 enum으로 간주 |
| 38 | + |
| 39 | + if (region && categorizedList.hasOwnProperty(region)) { |
| 40 | + categorizedList[region].push(university); |
| 41 | + } |
| 42 | + } |
| 43 | + |
| 44 | + return categorizedList; |
| 45 | +}; |
0 commit comments