Conversation
feat(user): 마이페이지 프로필 편집 및 이미지 업로드 구현 - 마이페이지 편집 페이지 UI 및 프로필 수정 로직 구현 - 프로필 이미지 업로드 API (Supabase Storage 연동) - user/me API에 PATCH 메서드 추가 (닉네임, MBTI 수정) - user 도메인 API client, hooks, constants 구성 - auth constants 및 lib/storage 유틸 추가 - API 명세서 업데이트 - dev 최신 반영 (사건기록, 홈 화면 개선) Co-Authored-By: Claude <noreply@anthropic.com> @
nickname 컬럼이 VarChar(100)이므로 검증 상한을 20자에서 100자로 수정. 서버 검증(route.ts)과 클라이언트 검증(edit page) 모두 반영. Co-Authored-By: Claude <noreply@anthropic.com>
- Stylelint declaration-empty-line-before 규칙 위반 해소 - 프로필 이미지 업로드 시 매직 바이트 검증 추가 - 스토리지 업로드 후 DB 실패 시 보상 삭제 처리 - PATCH 요청 JSON 파싱 실패 시 400 응답 분기 - PATCH 사용자 미존재 시 404 응답 추가 - 약관 동의 createMany에 skipDuplicates 적용 - UserTermsAgreement 모델에 unique 제약 추가 Co-Authored-By: Claude <noreply@anthropic.com>
- src/stores/profileEditStore.ts 신규 생성 - page.tsx에서 useState 5개를 Zustand store로 이관 - setFieldError/clearFieldError 액션으로 에러 처리 단순화 Co-Authored-By: Claude <noreply@anthropic.com>
- isError와 !user 에러 메시지 분리 - 프로필 이미지 accept에 SVG 추가 (프론트/백엔드 동시 적용) - errors.general 인라인 스타일을 SCSS Module 클래스로 이관 Co-Authored-By: Claude <noreply@anthropic.com>
- PATCH를 multipart/form-data 기반으로 변경 - 텍스트 필드(email, nickname, mbti) + 이미지 파일을 한 번에 처리 - Supabase Storage 업로드 로직을 PATCH에 통합 - 별도 profile-image 엔드포인트 삭제 - 프론트 hooks에서 useUploadProfileImage 제거, 단일 호출로 단순화 Co-Authored-By: Claude <noreply@anthropic.com>
Merge conflict resolution left a duplicate UserTermsAgreement model at line 679 with a missing closing brace, causing the model to merge into the following enum and triggering a Prisma validation error. Remove the duplicate block; the canonical declaration at line 68 already includes the @@unique constraint. Co-Authored-By: Claude <noreply@anthropic.com>
- prisma/schema.prisma: 중복 UserTermsAgreement 모델 제거 - page.module.scss: 존재하지 않는 text-body2 mixin을 text-body-s로 수정 - seed.ts: ConflictTypeGroup 생성 추가 및 groupId 연결 - judge/route.ts, result/route.ts: resultConflictGroup include 추가 - judgment.mapper.ts: resultConflictGroup 매핑 추가 - types/judgment.ts: ConflictTypeGroupDto, cardImageUrl 필드 추가 Co-Authored-By: Claude <noreply@anthropic.com>
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
|
Caution Review failedThe pull request is closed. ℹ️ Recent review info⚙️ Run configurationConfiguration used: Repository UI (base), Organization UI (inherited) Review profile: CHILL Plan: Pro Plus Run ID: ⛔ Files ignored due to path filters (1)
📒 Files selected for processing (21)
📝 Walkthrough워크스루Supabase Storage를 이용한 프로필 이미지 업로드를 포함한 마이페이지 편집 기능 전체 스택(API 라우트·훅·상태 저장소·UI)을 추가하고, 최초 로그인 시 약관 동의 레코드를 트랜잭션으로 생성하는 흐름을 도입했습니다. 분쟁 AI 판결 DTO에 변경 사항마이페이지 프로필 편집 기능
약관 동의 레코드 처리
AI 판결 resultConflictGroup 포함 확장
시드 데이터 및 API 문서 갱신
시퀀스 다이어그램sequenceDiagram
participant Client as ProfileEditPage
participant Route as PATCH /api/user/me
participant Supabase as Supabase Storage
participant DB as Prisma DB
Client->>Route: FormData(email, nickname, mbti, profileImage)
Route->>Route: 입력값 검증(이메일 정규식, 닉네임 길이, MBTI, 이미지 시그니처)
alt 이미지 포함 시
Route->>Route: 매직 넘버 재검증
Route->>Supabase: storage.upload upsert(profileImage)
Supabase-->>Route: 공개 URL + 타임스탬프 쿼리
end
Route->>DB: prisma.user.update(변경 필드)
DB-->>Route: 업데이트된 사용자 레코드
Route-->>Client: 200 { id, email, nickname, profileImageUrl, mbti }
예상 코드 리뷰 노력🎯 4 (Complex) | ⏱️ ~60 minutes 관련 가능성이 있는 PR
제안된 리뷰어
시 🐇
✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
Comment |
Summary
prisma/schema.prisma: merge 충돌로 인한 중복UserTermsAgreement모델 제거page.module.scss: 존재하지 않는text-body2mixin →text-body-s로 수정seed.ts:ConflictTypeGroup생성 추가 및groupId연결judge/route.ts,result/route.ts:resultConflictGroupinclude 추가judgment.mapper.ts:resultConflictGroup매핑 추가types/judgment.ts:ConflictTypeGroupDto,cardImageUrl필드 추가Test plan
npx tsc --noEmit타입 체크 통과npm run build빌드 통과🤖 Generated with Claude Code
Summary by CodeRabbit
릴리스 노트
New Features
Bug Fixes