Skip to content

Commit a91a87f

Browse files
committed
fix: 시험 유형별 어학 점수 표기 규칙 적용
1 parent 387d95e commit a91a87f

4 files changed

Lines changed: 36 additions & 10 deletions

File tree

apps/web/src/app/university/application/ScoreSheet.tsx

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { useState } from "react";
22
import { IconExpandMoreFilled } from "@/public/svgs/community";
33
import type { ScoreSheet as ScoreSheetType } from "@/types/application";
4-
import { languageTestMapping } from "@/types/score";
4+
import { formatLanguageTestScore, isLanguageTestEnum, languageTestMapping } from "@/types/score";
55

66
const ScoreSheet = ({ scoreSheet }: { scoreSheet: ScoreSheetType }) => {
77
const [tableOpened, setTableOpened] = useState(false);
@@ -32,10 +32,12 @@ const ScoreSheet = ({ scoreSheet }: { scoreSheet: ScoreSheetType }) => {
3232
{applicant.gpa.toFixed(2)}
3333
</span>
3434
<span className="min-w-[30px] flex-1 overflow-hidden whitespace-nowrap text-center typo-medium-2">
35-
{languageTestMapping[applicant.testType]}
35+
{isLanguageTestEnum(applicant.testType) ? languageTestMapping[applicant.testType] : applicant.testType}
3636
</span>
3737
<span className="min-w-[30px] flex-1 overflow-hidden whitespace-nowrap text-center typo-medium-2">
38-
{applicant.testScore}
38+
{isLanguageTestEnum(applicant.testType)
39+
? formatLanguageTestScore(applicant.testType, applicant.testScore)
40+
: applicant.testScore}
3941
</span>
4042
</div>
4143
))}

apps/web/src/app/university/score/ScoreCard.tsx

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,6 @@ const formatDate = (date: string) => {
2020
return `${year}.${month}.${day}`;
2121
};
2222

23-
const formatScore = (score: string) => score.replace(/(\d+)\.0+\b/g, "$1");
24-
2523
const getStatus = (status: ScoreSubmitStatus, rejectedReason?: string | null) => {
2624
switch (status) {
2725
case "PENDING":
@@ -56,7 +54,6 @@ const getStatus = (status: ScoreSubmitStatus, rejectedReason?: string | null) =>
5654

5755
const ScoreCard = ({ name, score, status, date, isFocused = false, rejectedReason = null }: ScoreCardProps) => {
5856
const isVerified = status === "APPROVED";
59-
const formattedScore = formatScore(score);
6057

6158
return (
6259
<div
@@ -86,7 +83,7 @@ const ScoreCard = ({ name, score, status, date, isFocused = false, rejectedReaso
8683
"text-secondary-300": !isFocused,
8784
})}
8885
>
89-
{formattedScore}
86+
{score}
9087
</div>
9188
</div>
9289
</div>

apps/web/src/app/university/score/ScoreScreen.tsx

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import { useGetMyGpaScore, useGetMyLanguageTestScore } from "@/apis/Scores";
66
import BlockBtn from "@/components/button/BlockBtn";
77
import Tab from "@/components/ui/Tab";
88
import { IconSolidConnectionSmallLogo } from "@/public/svgs/my";
9-
import { languageTestMapping } from "@/types/score";
9+
import { formatLanguageTestScore, languageTestMapping } from "@/types/score";
1010
import ScoreCard from "./ScoreCard";
1111

1212
const ScoreScreen = () => {
@@ -36,7 +36,10 @@ const ScoreScreen = () => {
3636
<ScoreCard
3737
key={score.id}
3838
name={languageTestMapping[score.languageTestResponse.languageTestType]}
39-
score={score.languageTestResponse.languageTestScore}
39+
score={formatLanguageTestScore(
40+
score.languageTestResponse.languageTestType,
41+
score.languageTestResponse.languageTestScore,
42+
)}
4043
status={score.verifyStatus}
4144
// date={new Date(score.issueDate).toISOString()}
4245
date="2026-01-01"

apps/web/src/types/score.ts

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,12 +73,36 @@ const jlptLevelMapping: Record<string, string> = {
7373
"5": "N5",
7474
};
7575

76+
const integerScoreTestTypes = new Set<LanguageTestEnum>([
77+
LanguageTestEnum.TOEIC,
78+
LanguageTestEnum.TOEFL_IBT,
79+
LanguageTestEnum.TOEFL_ITP,
80+
LanguageTestEnum.DUOLINGO,
81+
LanguageTestEnum.TCF,
82+
LanguageTestEnum.TEF,
83+
LanguageTestEnum.NEW_HSK,
84+
]);
85+
86+
const trailingZeroPattern = /^-?\d+\.0+$/;
87+
88+
export const isLanguageTestEnum = (value: string): value is LanguageTestEnum => {
89+
return value in languageTestScoreInfo;
90+
};
91+
7692
export const formatLanguageTestScore = (testType: LanguageTestEnum, score: string) => {
7793
if (testType === LanguageTestEnum.JLPT) {
7894
return jlptLevelMapping[score] ?? score;
7995
}
8096

81-
return score;
97+
if (!integerScoreTestTypes.has(testType)) {
98+
return score;
99+
}
100+
101+
if (!trailingZeroPattern.test(score)) {
102+
return score;
103+
}
104+
105+
return score.replace(/\.0+$/, "");
82106
};
83107

84108
export const formatLanguageTestScoreWithMax = (testType: LanguageTestEnum, score: string) => {

0 commit comments

Comments
 (0)