Tolerate missing createdAt in user profile response

- serverTimestamp 미해석 문서나 레거시 문서에서 toIso가 던져 GET /user가 500이 되는 경로 제거
- UserProfileDto.createdAt을 optional로 두고 toIsoOrUndefined 사용 — 값이 없으면 키를 생략한다
- 스프레드로 조립하던 기존 동작(키 생략)과 동일하게 맞춤
This commit is contained in:
윤정민 2026-07-20 16:40:29 +09:00
parent 8cb31b8122
commit 852b56d00c
2 changed files with 10 additions and 4 deletions

View File

@ -29,7 +29,7 @@ import {
type Provider, type Provider,
type User, type User,
} from "../types/panit"; } from "../types/panit";
import { toIso } from "../types/dto/iso"; import { toIso, toIsoOrUndefined } from "../types/dto/iso";
import type { CheckNicknameDto, UserProfileDto } from "../types/dto/userDto"; import type { CheckNicknameDto, UserProfileDto } from "../types/dto/userDto";
/** /**
@ -46,7 +46,7 @@ function toUserProfile(user: User): UserProfileDto {
provider: user.provider, provider: user.provider,
favoriteTeamCode: user.favoriteTeamCode, favoriteTeamCode: user.favoriteTeamCode,
knowledgeLevel: user.knowledgeLevel, knowledgeLevel: user.knowledgeLevel,
createdAt: toIso(user.createdAt), createdAt: toIsoOrUndefined(user.createdAt),
lastJudgedDate: user.lastJudgedDate, lastJudgedDate: user.lastJudgedDate,
}; };
} }

View File

@ -1,7 +1,13 @@
import type { KnowledgeLevel, NotificationsMap, Provider, TeamCode } from "../panit"; import type { KnowledgeLevel, NotificationsMap, Provider, TeamCode } from "../panit";
import type { DateString } from "../dateString"; import type { DateString } from "../dateString";
/** 클라이언트에 노출되는 유저 프로필 응답. `createdAt`은 UTC ISO 8601 문자열. */ /**
* . `createdAt` UTC ISO 8601 .
*
* `createdAt` optional serverTimestamp
* 500
* ( ).
*/
export interface UserProfileDto { export interface UserProfileDto {
displayName: string; displayName: string;
email: string; email: string;
@ -9,7 +15,7 @@ export interface UserProfileDto {
provider: Provider; provider: Provider;
favoriteTeamCode?: TeamCode; favoriteTeamCode?: TeamCode;
knowledgeLevel: KnowledgeLevel; knowledgeLevel: KnowledgeLevel;
createdAt: string; createdAt?: string;
lastJudgedDate?: DateString; lastJudgedDate?: DateString;
} }