mirror of
https://github.com/ktds-dg0501/kt-event-marketing-fe.git
synced 2025-12-06 08:16:23 +00:00
- 이벤트 목록 페이지에 Mock 데이터 적용 (evt_2025012301 등 4개 이벤트) - 이벤트 상세 페이지 Analytics API 임시 주석처리 (서버 이슈) - Participation API 프록시 라우트 URL 구조 수정 (/events/ 제거) - EventID localStorage 저장 기능 추가 - 상세한 console.log 추가 (생성된 eventId, objective, timestamp) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
7.3 KiB
7.3 KiB
User API 타입 변경사항 (2025-01-30)
📋 주요 변경사항 요약
userId 및 storeId 타입 변경: number → string (UUID)
백엔드 API 스펙에 따라 userId와 storeId가 UUID 형식의 문자열로 변경되었습니다.
| 항목 | 기존 (Old) | 변경 (New) |
|---|---|---|
| userId | number (예: 1) |
string (예: "550e8400-e29b-41d4-a716-446655440000") |
| storeId | number (예: 1) |
string (예: "6ba7b810-9dad-11d1-80b4-00c04fd430c8") |
🔄 영향을 받는 인터페이스
LoginResponse
Before:
interface LoginResponse {
token: string;
userId: number;
userName: string;
role: string;
email: string;
}
After:
interface LoginResponse {
token: string;
userId: string; // UUID format
userName: string;
role: string;
email: string;
}
RegisterResponse
Before:
interface RegisterResponse {
token: string;
userId: number;
userName: string;
storeId: number;
storeName: string;
}
After:
interface RegisterResponse {
token: string;
userId: string; // UUID format
userName: string;
storeId: string; // UUID format
storeName: string;
}
ProfileResponse
Before:
interface ProfileResponse {
userId: number;
userName: string;
phoneNumber: string;
email: string;
role: string;
storeId: number;
storeName: string;
industry: string;
address: string;
businessHours: string;
createdAt: string;
lastLoginAt: string;
}
After:
interface ProfileResponse {
userId: string; // UUID format
userName: string;
phoneNumber: string;
email: string;
role: string;
storeId: string; // UUID format
storeName: string;
industry: string;
address: string;
businessHours: string;
createdAt: string;
lastLoginAt: string;
}
User
Before:
interface User {
userId: number;
userName: string;
email: string;
role: string;
phoneNumber?: string;
storeId?: number;
storeName?: string;
industry?: string;
address?: string;
businessHours?: string;
}
After:
interface User {
userId: string; // UUID format
userName: string;
email: string;
role: string;
phoneNumber?: string;
storeId?: string; // UUID format
storeName?: string;
industry?: string;
address?: string;
businessHours?: string;
}
📝 수정된 파일 목록
1. Type Definitions
- ✅
src/entities/user/model/types.tsLoginResponse.userId:number→stringRegisterResponse.userId:number→stringRegisterResponse.storeId:number→stringProfileResponse.userId:number→stringProfileResponse.storeId:number→stringUser.userId:number→stringUser.storeId:number→string
2. Stores
- ✅
src/stores/authStore.tsUser.id: UUID 주석 추가
3. Components
- ✅ No changes required (타입 추론 사용)
src/features/auth/model/useAuth.tssrc/app/(auth)/login/page.tsxsrc/app/(auth)/register/page.tsx
🧪 API 응답 예시
로그인 응답
Before:
{
"token": "eyJhbGciOiJIUzI1NiIs...",
"userId": 1,
"userName": "홍길동",
"role": "USER",
"email": "user@example.com"
}
After:
{
"token": "eyJhbGciOiJIUzI1NiIs...",
"userId": "550e8400-e29b-41d4-a716-446655440000",
"userName": "홍길동",
"role": "USER",
"email": "user@example.com"
}
회원가입 응답
Before:
{
"token": "eyJhbGciOiJIUzI1NiIs...",
"userId": 1,
"userName": "홍길동",
"storeId": 1,
"storeName": "홍길동 고깃집"
}
After:
{
"token": "eyJhbGciOiJIUzI1NiIs...",
"userId": "550e8400-e29b-41d4-a716-446655440000",
"userName": "홍길동",
"storeId": "6ba7b810-9dad-11d1-80b4-00c04fd430c8",
"storeName": "홍길동 고깃집"
}
프로필 조회 응답
Before:
{
"userId": 1,
"userName": "홍길동",
"phoneNumber": "01012345678",
"email": "user@example.com",
"role": "USER",
"storeId": 1,
"storeName": "홍길동 고깃집",
"industry": "restaurant",
"address": "서울특별시 강남구",
"businessHours": "09:00-18:00",
"createdAt": "2025-01-01T00:00:00",
"lastLoginAt": "2025-01-10T12:00:00"
}
After:
{
"userId": "550e8400-e29b-41d4-a716-446655440000",
"userName": "홍길동",
"phoneNumber": "01012345678",
"email": "user@example.com",
"role": "USER",
"storeId": "6ba7b810-9dad-11d1-80b4-00c04fd430c8",
"storeName": "홍길동 고깃집",
"industry": "restaurant",
"address": "서울특별시 강남구",
"businessHours": "09:00-18:00",
"createdAt": "2025-01-01T00:00:00",
"lastLoginAt": "2025-01-10T12:00:00"
}
🚨 주의사항
1. localStorage 초기화 필요
기존에 number 타입으로 저장된 사용자 정보가 있다면 localStorage를 초기화해야 합니다:
// 브라우저 콘솔에서 실행
localStorage.removeItem('accessToken');
localStorage.removeItem('user');
2. UUID 형식
- UUID는 표준 UUID v4 형식입니다:
550e8400-e29b-41d4-a716-446655440000 - 하이픈(
-)을 포함한 36자 문자열 - 비교 시 대소문자 구분 없음 (일반적으로 소문자 사용)
3. 기존 Mock 데이터
기존에 number 타입으로 작성된 Mock 데이터는 UUID 문자열로 변경해야 합니다:
Before:
const mockUser = {
userId: 1,
storeId: 1,
// ...
};
After:
const mockUser = {
userId: "550e8400-e29b-41d4-a716-446655440000",
storeId: "6ba7b810-9dad-11d1-80b4-00c04fd430c8",
// ...
};
4. 하위 호환성
- 이전 number 타입과는 호환되지 않습니다
- 기존 세션은 모두 무효화됩니다
- 사용자는 다시 로그인해야 합니다
✅ 마이그레이션 체크리스트
- TypeScript 인터페이스 업데이트
- 타입 정의 파일 수정 완료
- 빌드 테스트 통과
- localStorage 초기화 (사용자)
- 개발 서버 테스트 (사용자)
- 실제 API 연동 테스트 (사용자)
🔗 관련 문서
- API 문서: http://kt-event-marketing-api.20.214.196.128.nip.io/api/v1/users/swagger-ui/index.html
- OpenAPI Spec: http://kt-event-marketing-api.20.214.196.128.nip.io/api/v1/users/v3/api-docs
📌 변경 이유
백엔드 아키텍처 개선:
- 분산 시스템에서 ID 충돌 방지
- 데이터베이스 독립적인 고유 식별자
- 보안 강화 (ID 추측 불가)
- 마이크로서비스 간 데이터 통합 용이
UUID의 장점:
- 전역적으로 고유한 식별자 (Globally Unique Identifier)
- Auto-increment ID의 한계 극복
- 분산 환경에서 중앙 조정 없이 생성 가능
- 보안성 향상 (순차적 ID 노출 방지)
🔄 롤백 방법
만약 이전 버전으로 돌아가야 한다면:
-
Git을 통한 코드 복원:
git log --oneline # 커밋 찾기 git revert <commit-hash> # 또는 특정 커밋으로 복원 -
localStorage 초기화:
localStorage.removeItem('accessToken'); localStorage.removeItem('user'); -
개발 서버 재시작:
npm run dev
문서 작성일: 2025-01-30 마지막 업데이트: 2025-01-30 변경 적용 버전: v1.1.0