diff --git a/apps/web/src/apis/universities/getSearchFilter.ts b/apps/web/src/apis/universities/getSearchFilter.ts index c881c955..6094fb57 100644 --- a/apps/web/src/apis/universities/getSearchFilter.ts +++ b/apps/web/src/apis/universities/getSearchFilter.ts @@ -1,6 +1,7 @@ import { useQuery } from "@tanstack/react-query"; import type { AxiosError } from "axios"; import { useMemo } from "react"; +import { isMatchedHomeUniversityName } from "@/constants/university"; import type { CountryCode, HomeUniversityName, LanguageTestType, ListUniversity } from "@/types/university"; import { QueryKeys } from "../queryKeys"; import { type SearchFilterResponse, universitiesApi } from "./api"; @@ -53,7 +54,9 @@ const useGetUniversitySearchByFilter = ( // homeUniversityName으로 필터링 const filteredData = useMemo(() => { if (!query.data || !homeUniversityName) return query.data; - return query.data.filter((university) => university.homeUniversityName === homeUniversityName); + return query.data.filter((university) => + isMatchedHomeUniversityName(university.homeUniversityName, homeUniversityName), + ); }, [query.data, homeUniversityName]); return { diff --git a/apps/web/src/apis/universities/getSearchText.ts b/apps/web/src/apis/universities/getSearchText.ts index 1ca20e45..ed9cefbb 100644 --- a/apps/web/src/apis/universities/getSearchText.ts +++ b/apps/web/src/apis/universities/getSearchText.ts @@ -2,6 +2,7 @@ import { useQuery } from "@tanstack/react-query"; import type { AxiosError } from "axios"; import { useMemo } from "react"; +import { isMatchedHomeUniversityName } from "@/constants/university"; import type { HomeUniversityName, ListUniversity } from "@/types/university"; import { QueryKeys } from "../queryKeys"; import { type SearchTextResponse, universitiesApi } from "./api"; @@ -44,7 +45,9 @@ const useUniversitySearch = (searchValue: string, homeUniversityName?: HomeUnive // homeUniversityName 필터링 if (homeUniversityName) { - filtered = filtered.filter((university) => university.homeUniversityName === homeUniversityName); + filtered = filtered.filter((university) => + isMatchedHomeUniversityName(university.homeUniversityName, homeUniversityName), + ); } // 검색어 필터링 diff --git a/apps/web/src/app/university/[homeUniversity]/[id]/_ui/UniversityDetailPreparingFallback.tsx b/apps/web/src/app/university/[homeUniversity]/[id]/_ui/UniversityDetailPreparingFallback.tsx index 7ac99802..c6c6669f 100644 --- a/apps/web/src/app/university/[homeUniversity]/[id]/_ui/UniversityDetailPreparingFallback.tsx +++ b/apps/web/src/app/university/[homeUniversity]/[id]/_ui/UniversityDetailPreparingFallback.tsx @@ -4,9 +4,15 @@ import { IconSolidConnectionSmallLogo } from "@/public/svgs/my"; interface UniversityDetailPreparingFallbackProps { backHref: string; + title?: string; + description?: string; } -const UniversityDetailPreparingFallback = ({ backHref }: UniversityDetailPreparingFallbackProps) => { +const UniversityDetailPreparingFallback = ({ + backHref, + title = "대학 정보를 준비중입니다.", + description = "아직 데이터가 준비되지 않았어요. 잠시 후 다시 확인해주세요.", +}: UniversityDetailPreparingFallbackProps) => { return (
-

대학 정보를 준비중입니다.

-

아직 데이터가 준비되지 않았어요. 잠시 후 다시 확인해주세요.

+

{title}

+

{description}

uni.homeUniversityName === homeUniversityInfo.name); + const filteredUniversities = universities.filter((uni) => + isMatchedHomeUniversityName(uni.homeUniversityName, homeUniversityInfo.name), + ); for (const university of filteredUniversities) { params.push({ @@ -125,14 +127,18 @@ const CollegeDetailPage = async ({ params }: PageProps) => { const universityDetailResult = await getUniversityDetailWithStatus(collegeId); if (!universityDetailResult.ok) { - if (universityDetailResult.status === 404) { - notFound(); - } + const isNotFoundError = universityDetailResult.status === 404; return ( <> - + ); } diff --git a/apps/web/src/app/university/[homeUniversity]/page.tsx b/apps/web/src/app/university/[homeUniversity]/page.tsx index 0105a888..f9490a38 100644 --- a/apps/web/src/app/university/[homeUniversity]/page.tsx +++ b/apps/web/src/app/university/[homeUniversity]/page.tsx @@ -3,7 +3,7 @@ import { notFound } from "next/navigation"; import { getSearchUniversitiesAllRegions } from "@/apis/universities/server"; import TopDetailNavigation from "@/components/layout/TopDetailNavigation"; -import { getHomeUniversityBySlug, HOME_UNIVERSITY_SLUGS } from "@/constants/university"; +import { getHomeUniversityBySlug, HOME_UNIVERSITY_SLUGS, isMatchedHomeUniversityName } from "@/constants/university"; import type { HomeUniversitySlug } from "@/types/university"; import UniversityListContent from "./_ui/UniversityListContent"; @@ -55,8 +55,8 @@ const UniversityListPage = async ({ params }: PageProps) => { const allUniversities = await getSearchUniversitiesAllRegions(); // homeUniversityName으로 프론트에서 필터링 - const filteredUniversities = allUniversities.filter( - (university) => university.homeUniversityName === universityInfo.name, + const filteredUniversities = allUniversities.filter((university) => + isMatchedHomeUniversityName(university.homeUniversityName, universityInfo.name), ); return ( diff --git a/apps/web/src/constants/university.ts b/apps/web/src/constants/university.ts index 312fd005..d9a63c43 100644 --- a/apps/web/src/constants/university.ts +++ b/apps/web/src/constants/university.ts @@ -75,6 +75,29 @@ export const getHomeUniversityBySlug = (slug: string): HomeUniversityInfo | unde return HOME_UNIVERSITY_LIST.find((uni) => uni.slug === slug); }; +export const normalizeHomeUniversityName = (value: string | null | undefined): HomeUniversity | undefined => { + if (!value) { + return undefined; + } + + const normalized = value.trim(); + const matchedUniversity = HOME_UNIVERSITY_LIST.find( + (university) => university.name === normalized || university.shortName === normalized, + ); + + return matchedUniversity?.name; +}; + +export const isMatchedHomeUniversityName = ( + left: string | null | undefined, + right: string | null | undefined, +): boolean => { + const normalizedLeft = normalizeHomeUniversityName(left); + const normalizedRight = normalizeHomeUniversityName(right); + + return normalizedLeft !== undefined && normalizedRight !== undefined && normalizedLeft === normalizedRight; +}; + /** * 유효한 홈 대학교 슬러그 목록 */