diff --git a/apps/university-web/src/apis/universities/api.ts b/apps/university-web/src/apis/universities/api.ts
index a418af231..9585b4f8e 100644
--- a/apps/university-web/src/apis/universities/api.ts
+++ b/apps/university-web/src/apis/universities/api.ts
@@ -31,7 +31,7 @@ export interface RecommendedUniversitiesResponseRecommendedUniversitiesItem {
country: string;
logoImageUrl: string;
backgroundImageUrl: string;
- studentCapacity: number;
+ studentCapacity: number | null;
languageRequirements: RecommendedUniversitiesResponseRecommendedUniversitiesItemLanguageRequirementsItem[];
}
@@ -52,7 +52,7 @@ export interface WishListResponseItem {
country: string;
logoImageUrl: string;
backgroundImageUrl: string;
- studentCapacity: number;
+ studentCapacity: number | null;
languageRequirements: WishListResponseItemLanguageRequirementsItem[];
}
@@ -91,7 +91,7 @@ export interface UniversityDetailResponse {
logoImageUrl: string;
backgroundImageUrl: string;
detailsForLocal: string;
- studentCapacity: number;
+ studentCapacity: number | null;
tuitionFeeType: string;
semesterAvailableForDispatch: string;
languageRequirements: UniversityDetailResponseLanguageRequirementsItem[];
@@ -116,7 +116,7 @@ export interface SearchTextResponseUnivApplyInfoPreviewsItem {
country: string;
logoImageUrl: string;
backgroundImageUrl: string;
- studentCapacity: number;
+ studentCapacity: number | null;
languageRequirements: SearchTextResponseUnivApplyInfoPreviewsItemLanguageRequirementsItem[];
homeUniversityName?: HomeUniversityName;
}
@@ -138,7 +138,7 @@ export interface SearchFilterResponseUnivApplyInfoPreviewsItem {
country: string;
logoImageUrl: string;
backgroundImageUrl: string;
- studentCapacity: number;
+ studentCapacity: number | null;
languageRequirements: SearchFilterResponseUnivApplyInfoPreviewsItemLanguageRequirementsItem[];
}
diff --git a/apps/university-web/src/app/university/[homeUniversity]/[id]/_ui/UniversityDetail/index.tsx b/apps/university-web/src/app/university/[homeUniversity]/[id]/_ui/UniversityDetail/index.tsx
index f18248dc0..37c8cd10a 100644
--- a/apps/university-web/src/app/university/[homeUniversity]/[id]/_ui/UniversityDetail/index.tsx
+++ b/apps/university-web/src/app/university/[homeUniversity]/[id]/_ui/UniversityDetail/index.tsx
@@ -14,6 +14,11 @@ interface UniversityDetailProps {
}
const UniversityDetail = ({ university, koreanName }: UniversityDetailProps) => {
+ const capacityLabel =
+ university.studentCapacity === null || university.studentCapacity === undefined
+ ? "모집 인원 미정"
+ : `모집 ${university.studentCapacity}명`;
+
return (
@@ -39,7 +44,7 @@ const UniversityDetail = ({ university, koreanName }: UniversityDetailProps) =>
{}0회 파견
{university.country}
- 모집 {university.studentCapacity}명
+ {capacityLabel}
const imageUrl = resolveMetadataImageUrl(universityData.backgroundImageUrl);
const countryExchangeKeyword = `${universityData.country} 교환학생`;
- const description = `${convertedKoreanName}(${universityData.englishName}) ${countryExchangeKeyword} 프로그램. 모집인원 ${universityData.studentCapacity}명. ${homeUniversityInfo?.shortName || ""} 학생을 위한 교환학생 정보.`;
+ const capacityDescription =
+ universityData.studentCapacity === null || universityData.studentCapacity === undefined
+ ? "모집인원 미정"
+ : `모집인원 ${universityData.studentCapacity}명`;
+ const description = `${convertedKoreanName}(${universityData.englishName}) ${countryExchangeKeyword} 프로그램. ${capacityDescription}. ${homeUniversityInfo?.shortName || ""} 학생을 위한 교환학생 정보.`;
const title = `${convertedKoreanName} - ${countryExchangeKeyword} 정보 | 솔리드커넥션`;
return {
diff --git a/apps/university-web/src/components/ui/UniverSityCard/index.tsx b/apps/university-web/src/components/ui/UniverSityCard/index.tsx
index 810f02420..8bf12e118 100644
--- a/apps/university-web/src/components/ui/UniverSityCard/index.tsx
+++ b/apps/university-web/src/components/ui/UniverSityCard/index.tsx
@@ -14,6 +14,10 @@ type UniversityCardProps = {
const UniversityCard = ({ university, showCapacity = true, linkPrefix = "/university" }: UniversityCardProps) => {
const convertedKoreanName = university.koreanName;
+ const capacityLabel =
+ university.studentCapacity === null || university.studentCapacity === undefined
+ ? "모집 인원 미정"
+ : `모집 ${university.studentCapacity}명`;
const mappedHomeUniversitySlug = getHomeUniversitySlugByName(university.homeUniversityName);
const hasExplicitPrefix = linkPrefix !== "/university";
@@ -51,7 +55,7 @@ const UniversityCard = ({ university, showCapacity = true, linkPrefix = "/univer
{university.country} | {university.region}
- {showCapacity && 모집 {university.studentCapacity}명}
+ {showCapacity && {capacityLabel}}
{university.languageRequirements.slice(0, 3).map((requirement) => {
diff --git a/apps/university-web/src/types/university.ts b/apps/university-web/src/types/university.ts
index 3885d73a9..fb3791d38 100644
--- a/apps/university-web/src/types/university.ts
+++ b/apps/university-web/src/types/university.ts
@@ -57,7 +57,7 @@ export interface University {
backgroundImageUrl: string;
detailsForLocal: string; // 지역 정보
- studentCapacity: number;
+ studentCapacity: number | null;
tuitionFeeType: string; // 등록금 납부 유형
semesterAvailableForDispatch: string; // 파견 가능 학기
@@ -85,7 +85,7 @@ export interface ListUniversity {
country: string;
logoImageUrl: string;
backgroundImageUrl: string;
- studentCapacity: number;
+ studentCapacity: number | null;
languageRequirements: LanguageRequirement[];
}
diff --git a/apps/web/src/apis/universities/api.ts b/apps/web/src/apis/universities/api.ts
index a418af231..9585b4f8e 100644
--- a/apps/web/src/apis/universities/api.ts
+++ b/apps/web/src/apis/universities/api.ts
@@ -31,7 +31,7 @@ export interface RecommendedUniversitiesResponseRecommendedUniversitiesItem {
country: string;
logoImageUrl: string;
backgroundImageUrl: string;
- studentCapacity: number;
+ studentCapacity: number | null;
languageRequirements: RecommendedUniversitiesResponseRecommendedUniversitiesItemLanguageRequirementsItem[];
}
@@ -52,7 +52,7 @@ export interface WishListResponseItem {
country: string;
logoImageUrl: string;
backgroundImageUrl: string;
- studentCapacity: number;
+ studentCapacity: number | null;
languageRequirements: WishListResponseItemLanguageRequirementsItem[];
}
@@ -91,7 +91,7 @@ export interface UniversityDetailResponse {
logoImageUrl: string;
backgroundImageUrl: string;
detailsForLocal: string;
- studentCapacity: number;
+ studentCapacity: number | null;
tuitionFeeType: string;
semesterAvailableForDispatch: string;
languageRequirements: UniversityDetailResponseLanguageRequirementsItem[];
@@ -116,7 +116,7 @@ export interface SearchTextResponseUnivApplyInfoPreviewsItem {
country: string;
logoImageUrl: string;
backgroundImageUrl: string;
- studentCapacity: number;
+ studentCapacity: number | null;
languageRequirements: SearchTextResponseUnivApplyInfoPreviewsItemLanguageRequirementsItem[];
homeUniversityName?: HomeUniversityName;
}
@@ -138,7 +138,7 @@ export interface SearchFilterResponseUnivApplyInfoPreviewsItem {
country: string;
logoImageUrl: string;
backgroundImageUrl: string;
- studentCapacity: number;
+ studentCapacity: number | null;
languageRequirements: SearchFilterResponseUnivApplyInfoPreviewsItemLanguageRequirementsItem[];
}
diff --git a/apps/web/src/app/my/favorite/_ui/FavoriteContent/_hooks/useSortedUniversities.ts b/apps/web/src/app/my/favorite/_ui/FavoriteContent/_hooks/useSortedUniversities.ts
index ea05c9563..d2fa146d3 100644
--- a/apps/web/src/app/my/favorite/_ui/FavoriteContent/_hooks/useSortedUniversities.ts
+++ b/apps/web/src/app/my/favorite/_ui/FavoriteContent/_hooks/useSortedUniversities.ts
@@ -28,7 +28,9 @@ const useSortedUniversities = (): UseSortedUniversitiesReturn => {
switch (sequence) {
// '모집인원 순'일 경우 studentCapacity를 기준으로 내림차순 정렬
case filterType.NUMBER_OF_RECRUIT:
- return newWishUniversity.sort((a: University, b: University) => b.studentCapacity - a.studentCapacity);
+ return newWishUniversity.sort(
+ (a: University, b: University) => (b.studentCapacity ?? -1) - (a.studentCapacity ?? -1),
+ );
default:
return wishUniversity; // 원본 순서(최신순) 그대로 반환
}
diff --git a/apps/web/src/components/ui/UniverSityCard/index.tsx b/apps/web/src/components/ui/UniverSityCard/index.tsx
index 9bbbf1b44..6a3e5842e 100644
--- a/apps/web/src/components/ui/UniverSityCard/index.tsx
+++ b/apps/web/src/components/ui/UniverSityCard/index.tsx
@@ -14,6 +14,10 @@ type UniversityCardProps = {
const UniversityCard = ({ university, showCapacity = true, linkPrefix = "/university" }: UniversityCardProps) => {
const convertedKoreanName = university.koreanName;
+ const capacityLabel =
+ university.studentCapacity === null || university.studentCapacity === undefined
+ ? "모집 인원 미정"
+ : `모집 ${university.studentCapacity}명`;
const mappedHomeUniversitySlug = getHomeUniversitySlugByName(university.homeUniversityName);
const hasExplicitPrefix = linkPrefix !== "/university";
@@ -55,7 +59,7 @@ const UniversityCard = ({ university, showCapacity = true, linkPrefix = "/univer
{university.country} | {university.region}
- {showCapacity && 모집 {university.studentCapacity}명}
+ {showCapacity && {capacityLabel}}
{university.languageRequirements.slice(0, 3).map((requirement) => {
diff --git a/apps/web/src/types/university.ts b/apps/web/src/types/university.ts
index 3885d73a9..fb3791d38 100644
--- a/apps/web/src/types/university.ts
+++ b/apps/web/src/types/university.ts
@@ -57,7 +57,7 @@ export interface University {
backgroundImageUrl: string;
detailsForLocal: string; // 지역 정보
- studentCapacity: number;
+ studentCapacity: number | null;
tuitionFeeType: string; // 등록금 납부 유형
semesterAvailableForDispatch: string; // 파견 가능 학기
@@ -85,7 +85,7 @@ export interface ListUniversity {
country: string;
logoImageUrl: string;
backgroundImageUrl: string;
- studentCapacity: number;
+ studentCapacity: number | null;
languageRequirements: LanguageRequirement[];
}