From 459cd2c0cedb2ebf6cae8435eae89665a8115bb3 Mon Sep 17 00:00:00 2001 From: manNomi Date: Sun, 21 Jun 2026 16:10:08 +0900 Subject: [PATCH] =?UTF-8?q?fix:=20=EC=9D=B8=EA=B8=B0=20=ED=8C=8C=EA=B2=AC?= =?UTF-8?q?=ED=95=99=EA=B5=90=20=EC=83=81=EC=84=B8=20=EB=A7=81=ED=81=AC=20?= =?UTF-8?q?=EB=B3=B4=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/apis/universities/api.ts | 1 + apps/web/src/apis/universities/api.ts | 1 + .../_ui/PopularUniversityCard.tsx | 9 +++-- apps/web/src/app/(home)/page.tsx | 34 +++++++++++++++++-- 4 files changed, 40 insertions(+), 5 deletions(-) diff --git a/apps/university-web/src/apis/universities/api.ts b/apps/university-web/src/apis/universities/api.ts index 6b0055a3..88b1de5d 100644 --- a/apps/university-web/src/apis/universities/api.ts +++ b/apps/university-web/src/apis/universities/api.ts @@ -5,6 +5,7 @@ export interface RecommendedUniversitiesResponseRecommendedUniversitiesItem { id: number; term: string; koreanName: string; + homeUniversityName?: HomeUniversityName; region: string; country: string; logoImageUrl: string; diff --git a/apps/web/src/apis/universities/api.ts b/apps/web/src/apis/universities/api.ts index 6b0055a3..88b1de5d 100644 --- a/apps/web/src/apis/universities/api.ts +++ b/apps/web/src/apis/universities/api.ts @@ -5,6 +5,7 @@ export interface RecommendedUniversitiesResponseRecommendedUniversitiesItem { id: number; term: string; koreanName: string; + homeUniversityName?: HomeUniversityName; region: string; country: string; logoImageUrl: string; diff --git a/apps/web/src/app/(home)/_ui/PopularUniversitySection/_ui/PopularUniversityCard.tsx b/apps/web/src/app/(home)/_ui/PopularUniversitySection/_ui/PopularUniversityCard.tsx index 1c725e09..ab055b4c 100644 --- a/apps/web/src/app/(home)/_ui/PopularUniversitySection/_ui/PopularUniversityCard.tsx +++ b/apps/web/src/app/(home)/_ui/PopularUniversitySection/_ui/PopularUniversityCard.tsx @@ -20,9 +20,12 @@ const PopularUniversityCard = ({ quality = 60, // 기본값을 60으로 낮춤 }: PopularUniversityCardProps) => { const homeUniversitySlug = getHomeUniversitySlugByName(university.homeUniversityName); - const universityDetailHref = homeUniversitySlug - ? `/university/${homeUniversitySlug}/${university.id}` - : "/university"; + + if (!homeUniversitySlug) { + return null; + } + + const universityDetailHref = `/university/${homeUniversitySlug}/${university.id}`; return ( diff --git a/apps/web/src/app/(home)/page.tsx b/apps/web/src/app/(home)/page.tsx index 0b4c5bb0..5a400505 100644 --- a/apps/web/src/app/(home)/page.tsx +++ b/apps/web/src/app/(home)/page.tsx @@ -1,6 +1,7 @@ import type { Metadata } from "next"; import { getHomeNewsList } from "@/apis/news/server/getNewsList"; import { getCategorizedUniversities, getRecommendedUniversity } from "@/apis/universities/server"; +import { getHomeUniversitySlugByName } from "@/constants/university"; import { type ListUniversity, RegionEnumExtend } from "@/types/university"; import { createUrl } from "@/utils/seo"; import FindLastYearScoreBar from "./_ui/FindLastYearScoreBar"; @@ -61,13 +62,42 @@ const resolveRecommendedUniversitiesHomeUniversityName = ( const homeUniversityNameById = new Map( allUniversities.map((university) => [university.id, university.homeUniversityName]), ); + const homeUniversityNamesByTermAndName = new Map>(); + + allUniversities.forEach((university) => { + const key = `${university.term}:${university.koreanName}`; + const names = homeUniversityNamesByTermAndName.get(key) ?? new Set(); + + names.add(university.homeUniversityName); + homeUniversityNamesByTermAndName.set(key, names); + }); return recommendedUniversities.map((university) => ({ ...university, - homeUniversityName: university.homeUniversityName ?? homeUniversityNameById.get(university.id), + homeUniversityName: + university.homeUniversityName ?? + homeUniversityNameById.get(university.id) ?? + getUniqueHomeUniversityName(homeUniversityNamesByTermAndName, university), })); }; +const getUniqueHomeUniversityName = ( + homeUniversityNamesByTermAndName: Map>, + university: ListUniversity, +) => { + const names = homeUniversityNamesByTermAndName.get(`${university.term}:${university.koreanName}`); + + if (!names || names.size !== 1) { + return undefined; + } + + return names.values().next().value; +}; + +const hasUniversityDetailRoute = (university: ListUniversity) => { + return getHomeUniversitySlugByName(university.homeUniversityName) !== undefined; +}; + const HomePage = async () => { const newsList = await getHomeNewsList(); const { data } = await getRecommendedUniversity(); @@ -78,7 +108,7 @@ const HomePage = async () => { const resolvedRecommendedUniversities = resolveRecommendedUniversitiesHomeUniversityName( recommendedUniversities, allUniversities, - ); + ).filter(hasUniversityDetailRoute); return ( <>