[Feat] #58 마이페이지 관련 api 연동 - #75
Hidden character warning
Conversation
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
|
Warning Review limit reached
More reviews will be available in 37 minutes and 45 seconds. Learn how PR review limits work. Your organization has run out of usage credits. Purchase more in the billing tab. ⌛ How to resolve this issue?After more reviews become available, a review can be triggered using the We recommend that you space out your commits to avoid hitting the rate limit. 🚦 How do rate limits work?CodeRabbit enforces hourly rate limits for each developer per organization. Our paid plans include higher PR review limits than trial, open-source, and free plans. In all cases, reviews become available again over time. During sustained high-volume PR review activity, CodeRabbit may temporarily slow when the next review becomes available. Please see our Fair Usage Limits Policy for further information. ℹ️ Review info⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Pro Run ID: 📒 Files selected for processing (11)
Walkthrough마이페이지 기능을 목 데이터에서 실제 API 연동으로 전환합니다. 프로필 조회/수정, 게시물 조회/삭제, 룸메이트 그룹 조회/탈퇴 API를 추가하고, 프로필 편집과 체크리스트 관리를 서버 연동 훅으로 재구성합니다. Changes마이페이지 API 연동 및 프로필 편집 리팩토링
Estimated code review effort🎯 4 (Complex) | ⏱️ ~60 minutes Possibly related PRs
Suggested reviewers
🚥 Pre-merge checks | ✅ 3 | ❌ 2❌ Failed checks (1 warning, 1 inconclusive)
✅ Passed checks (3 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
✅ CI 검증 결과✅ TypeScript: 통과 🚨 일부 검증이 실패했습니다. 수정 후 다시 확인해주세요. |
✅ CI 검증 결과✅ TypeScript: 통과 🎉 모든 검증을 통과했습니다. |
|
@coderabbitai review |
✅ Actions performedReview triggered.
|
|
@coderabbitai full review |
✅ Actions performedFull review triggered. |
There was a problem hiding this comment.
Actionable comments posted: 8
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
src/features/mypage/components/MyProfileEditContent.tsx (1)
84-107:⚠️ Potential issue | 🟠 Major | ⚡ Quick win프로필 이미지 변경이 서버 요청에 반영되지 않습니다.
mapFormToProfileRequest가 만드는UpdateUserProfileRequest에profileImage/image필드가 없고(요청 타입 자체에도 없음),submitProfileForm도profilePreviewUrl/File을 페이로드에 넣지 않습니다.updateProfileImage(file)는URL.createObjectURL(file)로 미리보기 URL만 바꾸며, 서버 업데이트와 연결되지 않습니다.ProfileAvatarSection은onImageChange/isEditing를 받도록 되어 있으나 실제 구현에서 사용되지 않아(렌더에서는imageUrl/name만 전달) 이미지 변경 이벤트 경로가 없습니다.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@src/features/mypage/components/MyProfileEditContent.tsx` around lines 84 - 107, The profile image change isn’t sent to the server because mapFormToProfileRequest/UpdateUserProfileRequest lack any image field and submitProfileForm only sends form values; updateProfileImage only sets a preview URL and isn’t connected to the payload, and ProfileAvatarSection isn’t wired to emit onImageChange. Fix by adding an image field to the UpdateUserProfileRequest (or an imageId/thumbnail field as your API expects) and update mapFormToProfileRequest to include that field; in submitProfileForm include the currently selected File or uploaded image identifier from component state when calling updateUserProfile; modify updateProfileImage to store the selected File (e.g., profileImageFile state) in addition to the preview URL and ensure URL.revokeObjectURL is used when replacing previews; finally pass onImageChange and isEditing into ProfileAvatarSection so the UI emits the selected image into updateProfileImage before submitProfileForm runs.
🧹 Nitpick comments (4)
src/features/user/types/index.ts (1)
22-36: ⚡ Quick win
semester/dormitory등에 유니온 타입 적용을 검토해 주세요.기존
UserProfile은semester: Semester,dormitory: Dormitory유니온 타입을 사용하는데, 새로 추가된UserProfileData(및UpdateUserProfileRequest)는 동일 필드를string으로 정의해 타입 안정성이 낮아지고 두 타입 간 표현이 불일치합니다. 이미 상단에서Semester,Dormitory를 import 하고 있으므로 재사용을 권장합니다.♻️ 제안 변경 (해당 필드 예시)
- semester: string; - dormitory: string; + semester: Semester; + dormitory: Dormitory;🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@src/features/user/types/index.ts` around lines 22 - 36, UserProfileData currently types semester and dormitory as string which diverges from the existing UserProfile and reduces type safety; change the types of semester and dormitory in the UserProfileData type (and mirror the same change in UpdateUserProfileRequest) from string to the imported union types Semester and Dormitory respectively, ensure the top-of-file imports for Semester and Dormitory are used, and run type checks to confirm no other mismatches remain (refer to the UserProfileData type and UpdateUserProfileRequest symbol names to locate the changes).src/api/roommateGroups.ts (1)
5-17: 💤 Low value경로 상수 사용을 일관성 있게 적용해 주세요.
ROOMMATE_GROUP_API_PATHS를 정의해me만 상수로 관리하면서leaveRoommateGroup에서는 경로를 인라인으로 작성해 일관성이 떨어집니다. 경로를 한곳에서 관리하면 오타나 변경 누락을 줄일 수 있습니다.♻️ 제안 변경
const ROOMMATE_GROUP_API_PATHS = { me: "/roommate-groups/me", + leaveMember: (groupId: number) => `/roommate-groups/${groupId}/members/me`, } as const; @@ export const leaveRoommateGroup = async (groupId: number): Promise<void> => { - await apiClient.delete(`/roommate-groups/${groupId}/members/me`); + await apiClient.delete(ROOMMATE_GROUP_API_PATHS.leaveMember(groupId)); };🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@src/api/roommateGroups.ts` around lines 5 - 17, The file mixes a path constant (ROOMMATE_GROUP_API_PATHS.me) with an inline route in leaveRoommateGroup; update ROOMMATE_GROUP_API_PATHS to include the member leave path (e.g., add a key like memberMe or membersMe with a template placeholder or function-style pattern) and change leaveRoommateGroup to use that constant (referencing ROOMMATE_GROUP_API_PATHS and injecting groupId) so all API routes are managed from the same constant object.src/features/mypage/types/index.ts (1)
54-62: 💤 Low value
MyActivityMatchMock정리 대상 여부 재확인
MyActivityMatchMock은src/features/mypage/components/activity/MatchCard.tsx에서 props 타입으로 사용되고,MY_ACTIVITY_MATCHES도src/features/mypage/components/activity/MyActivityMatchList.tsx에서 사용되고 있습니다.- 다만
MyActivityContent는MyRecruitPostList/MyActivityRoomList만 렌더하며(src/features/mypage/components/MyActivityContent.tsx),MyActivityTabId가"posts" | "rooms"로 제한되어"matches"탭은 제거된 상태입니다."matches"UI가 더 이상 필요 없다면MyActivityMatchMock만이 아니라MyActivityMatchList/MatchCard/MY_ACTIVITY_MATCHES까지 함께 정리하는 방향이 맞습니다.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@src/features/mypage/types/index.ts` around lines 54 - 62, MyActivityMatchMock and related match UI artifacts appear unused because MyActivityTabId only allows "posts" | "rooms"; verify whether the "matches" tab/UI is intentionally removed and if so delete the unused types and components: remove MyActivityMatchMock from src/features/mypage/types/index.ts and then delete or refactor MatchCard (src/features/mypage/components/activity/MatchCard.tsx), MyActivityMatchList (src/features/mypage/components/activity/MyActivityMatchList.tsx) and the MY_ACTIVITY_MATCHES mock; if you intend to keep "matches" functionality instead, restore MyActivityTabId to include "matches" and ensure MyActivityContent (src/features/mypage/components/MyActivityContent.tsx) renders MyActivityMatchList and that props types (MyActivityMatchMock) match MatchCard usage.src/features/user/hooks/index.ts (1)
1-3: ⚡ Quick win상대 경로 export를
@/alias로 통일해주세요.Line 1과 Line 3의
./...export는 현재 규칙과 불일치합니다. alias로 맞추면 경로 일관성이 좋아집니다.변경 예시
-export { useMyProfile } from "./useMyProfile"; +export { useMyProfile } from "`@/features/user/hooks/useMyProfile`"; export { useUpdateUserChecklist } from "./useUpdateUserChecklist"; -export { useUpdateUserProfile } from "./useUpdateUserProfile"; +export { useUpdateUserProfile } from "`@/features/user/hooks/useUpdateUserProfile`"; export { useUserChecklist } from "./useUserChecklist"; export { useUserProfile } from "./useUserProfile"; export { useUserTags } from "./useUserTags";As per coding guidelines "Use
@/import alias to referencesrc/directory (avoid relative paths)".🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@src/features/user/hooks/index.ts` around lines 1 - 3, Update the two relative exports to use the project alias so paths are consistent with the guideline; replace the "./useMyProfile" and "./useUpdateUserProfile" exports in this barrel file with alias imports (e.g. export { useMyProfile } from "`@/features/user/hooks/useMyProfile`" and export { useUpdateUserProfile } from "`@/features/user/hooks/useUpdateUserProfile`") while keeping the existing exported symbols useMyProfile, useUpdateUserChecklist, and useUpdateUserProfile unchanged.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@src/features/mypage/components/activity/MyActivityRoomList.tsx`:
- Around line 111-117: The loading state currently renders a hardcoded English
string "Loading..." inside the isLoading branch (in MyActivityRoomList.tsx)
which breaks localization consistency; add a loading constant (e.g.
MY_JOINED_ROOM_LOADING_MESSAGE) alongside the existing
MY_JOINED_ROOM_ERROR_MESSAGE and MY_JOINED_ROOM_EMPTY_MESSAGE in the same
constants module, import it into MyActivityRoomList, and replace the hardcoded
"Loading..." passed to MyPageEmptyState with that constant (written in Korean)
so all empty/error/loading messages come from the same constants set.
- Around line 157-166: The leaveRoommateGroup call in MyActivityRoomList.tsx
does not provide user feedback or error handling; update the flow to pass
onSuccess and onError handlers (or enhance useLeaveRoommateGroup's default
callbacks) so a toast is shown on success and an error toast/handling runs on
failure. Specifically, when calling leaveRoommateGroup(confirmTarget.roomId)
from the AlertDialogAction, call the mutate API with onSuccess to show a success
toast and invalidate queries (consistent with MyRecruitPostList) and onError to
show an error toast and handle the error; alternatively, add these callbacks
into useLeaveRoommateGroup so leaveRoommateGroup automatically triggers toast
and error handling.
In `@src/features/mypage/components/activity/MyRecruitPostList.tsx`:
- Around line 25-35: Replace the local DORMITORY_LABEL and ROOM_SIZE_LABEL
definitions in MyRecruitPostList with the shared constants from your labels
module and ensure both the label strings and TypeScript types are unified:
update the central labels export to provide DORMITORY_LABEL and ROOM_SIZE_LABEL
typed as Record<Dormitory, string> and Record<RoomSize, string> (not
Record<string,string>), normalize the whitespace in the label strings (choose
the project-standard form—either "1기숙사" or "1 기숙사") and then import those typed
constants into MyRecruitPostList to remove the local duplicates.
In `@src/features/mypage/components/MyPageContent.tsx`:
- Around line 30-33: The current conversion of defaultProfileForm.birthYear to
Number yields 0 for empty string so the fallback MY_PROFILE.age never triggers;
update the logic around birthYear/profileAge to first treat empty or whitespace
birthYear as invalid (e.g., if (!defaultProfileForm.birthYear ||
defaultProfileForm.birthYear.toString().trim() === "") use MY_PROFILE.age),
otherwise parse/validate the year (use parseInt/default to NaN and check
Number.isFinite or a valid year range) before computing new Date().getFullYear()
- birthYear + 1; adjust the variables birthYear and profileAge accordingly so
empty or non-numeric inputs fall back to MY_PROFILE.age.
In `@src/features/mypage/components/MyPageMenuSection.tsx`:
- Around line 47-52: handleConfirm in MyPageMenuSection.tsx only handles
item.type === "logout" so the "withdraw" (회원 탈퇴) flow never triggers; add a
branch for item.type === "withdraw" inside handleConfirm that calls the user
withdrawal mutation/API (e.g. invoke the withdraw/leaveUser function or
withdrawMutation.mutate with necessary params), handle success/failure
(clearAuth() and navigate("/login") on success, show error on failure), and
ensure the dialog is closed after the operation; reference the handleConfirm
function and the item.type checks to add the withdraw logic and hook up the
existing auth cleanup (clearAuth) and navigation (navigate).
In `@src/features/mypage/components/profile-edit/ProfileEditFields.tsx`:
- Around line 112-115: When campus changes the handler currently clears only
"department", leaving a stale "departmentId" value; update the onChange block
(where field.onChange(value) is called) to also reset the departmentId using
setValue("departmentId", <empty_value>, { shouldDirty: true, shouldValidate:
true }) alongside setValue("department", "", ...) so both fields are cleared
(choose the empty value consistent with your form state, e.g., null or "" for
departmentId).
In `@src/features/mypage/utils/myProfileEditUtils.ts`:
- Around line 52-54: 조건문이 values.departmentId를 falsy로 검사해 0을 유효한 값으로 취급하지 못하므로,
myProfileEditUtils.ts 내 해당 if 검사에서 values.departmentId를 단순
논리부정(!values.departmentId)로 판정하지 말고 명시적으로 null/undefined만 검사하도록 변경하세요 (예:
values.departmentId == null 또는 values.departmentId === undefined). 검사 대상은
campus, gender, semester, dormitory, values.departmentId이며, 만약 도메인에서 학과 ID가 0을
허용하지 않는 것이 의도라면 스키마 z.number().int().nonnegative()를 z.number().int().positive()로
변경해 의도를 일치시키세요.
In `@src/features/roommate-group/types/index.ts`:
- Around line 4-9: RoommateGroupMember.profileImage is declared as non-null
string but other types (e.g., UserProfileData / mypage member mocks) allow
string | null, so update the RoommateGroupMember type to accept null (e.g.,
profileImage: string | null or profileImage?: string | null) to match API
contract; update any code using RoommateGroupMember (renderers or mapping
functions) to handle null/undefined profileImage accordingly so null-safe
rendering won't break.
---
Outside diff comments:
In `@src/features/mypage/components/MyProfileEditContent.tsx`:
- Around line 84-107: The profile image change isn’t sent to the server because
mapFormToProfileRequest/UpdateUserProfileRequest lack any image field and
submitProfileForm only sends form values; updateProfileImage only sets a preview
URL and isn’t connected to the payload, and ProfileAvatarSection isn’t wired to
emit onImageChange. Fix by adding an image field to the UpdateUserProfileRequest
(or an imageId/thumbnail field as your API expects) and update
mapFormToProfileRequest to include that field; in submitProfileForm include the
currently selected File or uploaded image identifier from component state when
calling updateUserProfile; modify updateProfileImage to store the selected File
(e.g., profileImageFile state) in addition to the preview URL and ensure
URL.revokeObjectURL is used when replacing previews; finally pass onImageChange
and isEditing into ProfileAvatarSection so the UI emits the selected image into
updateProfileImage before submitProfileForm runs.
---
Nitpick comments:
In `@src/api/roommateGroups.ts`:
- Around line 5-17: The file mixes a path constant (ROOMMATE_GROUP_API_PATHS.me)
with an inline route in leaveRoommateGroup; update ROOMMATE_GROUP_API_PATHS to
include the member leave path (e.g., add a key like memberMe or membersMe with a
template placeholder or function-style pattern) and change leaveRoommateGroup to
use that constant (referencing ROOMMATE_GROUP_API_PATHS and injecting groupId)
so all API routes are managed from the same constant object.
In `@src/features/mypage/types/index.ts`:
- Around line 54-62: MyActivityMatchMock and related match UI artifacts appear
unused because MyActivityTabId only allows "posts" | "rooms"; verify whether the
"matches" tab/UI is intentionally removed and if so delete the unused types and
components: remove MyActivityMatchMock from src/features/mypage/types/index.ts
and then delete or refactor MatchCard
(src/features/mypage/components/activity/MatchCard.tsx), MyActivityMatchList
(src/features/mypage/components/activity/MyActivityMatchList.tsx) and the
MY_ACTIVITY_MATCHES mock; if you intend to keep "matches" functionality instead,
restore MyActivityTabId to include "matches" and ensure MyActivityContent
(src/features/mypage/components/MyActivityContent.tsx) renders
MyActivityMatchList and that props types (MyActivityMatchMock) match MatchCard
usage.
In `@src/features/user/hooks/index.ts`:
- Around line 1-3: Update the two relative exports to use the project alias so
paths are consistent with the guideline; replace the "./useMyProfile" and
"./useUpdateUserProfile" exports in this barrel file with alias imports (e.g.
export { useMyProfile } from "`@/features/user/hooks/useMyProfile`" and export {
useUpdateUserProfile } from "`@/features/user/hooks/useUpdateUserProfile`") while
keeping the existing exported symbols useMyProfile, useUpdateUserChecklist, and
useUpdateUserProfile unchanged.
In `@src/features/user/types/index.ts`:
- Around line 22-36: UserProfileData currently types semester and dormitory as
string which diverges from the existing UserProfile and reduces type safety;
change the types of semester and dormitory in the UserProfileData type (and
mirror the same change in UpdateUserProfileRequest) from string to the imported
union types Semester and Dormitory respectively, ensure the top-of-file imports
for Semester and Dormitory are used, and run type checks to confirm no other
mismatches remain (refer to the UserProfileData type and
UpdateUserProfileRequest symbol names to locate the changes).
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro
Run ID: 1eef4c28-d098-448a-aaa8-ed1b55a8a1ee
⛔ Files ignored due to path filters (3)
public/logo.svgis excluded by!**/*.svgsrc/assets/icons/ic-circle-alert.svgis excluded by!**/*.svgsrc/assets/icons/ic-crown.svgis excluded by!**/*.svg
📒 Files selected for processing (58)
index.htmlsrc/api/index.tssrc/api/posts.tssrc/api/roommateGroups.tssrc/api/users.tssrc/assets/icons/index.tssrc/components/ui/select-field.tsxsrc/features/chat/components/chat-detail/ChatRoommateInviteSheet.tsxsrc/features/chat/constants.tssrc/features/mypage/components/MyActivityContent.tsxsrc/features/mypage/components/MyPageContent.tsxsrc/features/mypage/components/MyPageMenuSection.tsxsrc/features/mypage/components/MyPageProfileCard.tsxsrc/features/mypage/components/MyProfileEditContent.tsxsrc/features/mypage/components/activity/ActivityStat.tsxsrc/features/mypage/components/activity/ActivityTabs.tsxsrc/features/mypage/components/activity/MyActivityRoomList.tsxsrc/features/mypage/components/activity/MyRecruitPostList.tsxsrc/features/mypage/components/activity/RoomCardLayout.tsxsrc/features/mypage/components/activity/RoommateMemberList.tsxsrc/features/mypage/components/checklist/MyChecklistContent.tsxsrc/features/mypage/components/profile-edit/ProfileAvatarSection.tsxsrc/features/mypage/components/profile-edit/ProfileEditFields.tsxsrc/features/mypage/components/profile-edit/ProfileViewContent.tsxsrc/features/mypage/constants/index.tssrc/features/mypage/constants/myActivityRoom.constants.tssrc/features/mypage/constants/myProfileEditContent.constants.tssrc/features/mypage/constants/myProfileEditLabels.constants.tssrc/features/mypage/hooks/index.tssrc/features/mypage/hooks/useDeleteMyPost.tssrc/features/mypage/hooks/useMyChecklistEditor.tssrc/features/mypage/hooks/useMyProfileEditData.tssrc/features/mypage/hooks/useMyRecruitPosts.tssrc/features/mypage/index.tssrc/features/mypage/mocks.tssrc/features/mypage/queries/mypageQueryKeys.tssrc/features/mypage/schemas/myProfileEditSchema.tssrc/features/mypage/types/index.tssrc/features/mypage/types/myProfileEditContent.types.tssrc/features/mypage/types/myProfileEditData.types.tssrc/features/mypage/utils/formatPeopleCount.tssrc/features/mypage/utils/index.tssrc/features/mypage/utils/myProfileEditUtils.tssrc/features/onboarding/hooks/useSaveOnboardingChecklist.tssrc/features/roommate-group/hooks/index.tssrc/features/roommate-group/hooks/useLeaveRoommateGroup.tssrc/features/roommate-group/hooks/useMyRoommateGroups.tssrc/features/roommate-group/index.tssrc/features/roommate-group/queries/index.tssrc/features/roommate-group/queries/roommateGroupQueryKeys.tssrc/features/roommate-group/types/index.tssrc/features/user/hooks/index.tssrc/features/user/hooks/useMyProfile.tssrc/features/user/hooks/useUpdateUserChecklist.tssrc/features/user/hooks/useUpdateUserProfile.tssrc/features/user/queries/userQueryKeys.tssrc/features/user/types/index.tssrc/pages/MyActivityPage.tsx
💤 Files with no reviewable changes (2)
- src/features/mypage/index.ts
- src/features/mypage/mocks.ts
| const handleConfirm = () => { | ||
| if (item.type === "logout") { | ||
| clearAuth(); | ||
| navigate("/login"); | ||
| } | ||
| }; |
There was a problem hiding this comment.
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
# withdraw 처리 로직/API 존재 여부 확인
rg -nP '\bwithdraw\b' --type=ts --type=tsx -C2
rg -nP '(회원\s*탈퇴|탈퇴)' -C2Repository: Bangjjack/Bangjjack-Frontend
Length of output: 1305
회원 탈퇴 다이얼로그 확인 시 실제 탈퇴 요청이 연결되지 않음
src/features/mypage/components/MyPageMenuSection.tsx에서handleConfirm은logout만 처리하고,type: "withdraw"(“회원 탈퇴”)는 확인해도 동작 없이 다이얼로그가 닫힙니다.- 코드베이스에서 “회원 탈퇴/탈퇴” 관련 탈퇴 API/뮤테이션 호출 근거가 추가로 확인되지 않아, 탈퇴 플로우 구현(또는 비활성/안내 문구 보완) 필요합니다.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@src/features/mypage/components/MyPageMenuSection.tsx` around lines 47 - 52,
handleConfirm in MyPageMenuSection.tsx only handles item.type === "logout" so
the "withdraw" (회원 탈퇴) flow never triggers; add a branch for item.type ===
"withdraw" inside handleConfirm that calls the user withdrawal mutation/API
(e.g. invoke the withdraw/leaveUser function or withdrawMutation.mutate with
necessary params), handle success/failure (clearAuth() and navigate("/login") on
success, show error on failure), and ensure the dialog is closed after the
operation; reference the handleConfirm function and the item.type checks to add
the withdraw logic and hook up the existing auth cleanup (clearAuth) and
navigation (navigate).
There was a problem hiding this comment.
회원 탈퇴 기능 유지 여부 아직 미결정 상태
There was a problem hiding this comment.
@hdg0116 이해했습니다! 회원 탈퇴 기능 포함 여부가 확정되면 그때 구현하셔도 됩니다. 해당 기능을 유지하기로 결정하셨을 때 추적이 필요하다면 별도 이슈로 등록해 드릴까요?
✅ CI 검증 결과✅ TypeScript: 통과 🎉 모든 검증을 통과했습니다. |
nabbang6
left a comment
There was a problem hiding this comment.
확인햇습니당 👍
테스트해보셧을 때 문제없엇다면 바로 머지하셔도 될 것 같아요!! 고생하셧습니당
🗒️ PR 타입
🔗 관련 이슈
📌 작업사항
마이페이지 프로필
체크리스트 / 선호도
나의 활동 — 내가 쓴 모집글
GET /api/v1/posts/meAPI 연동 (getMyPosts,useMyRecruitPosts)isClosed)에 따른 뱃지·현재 인원·버튼 톤 분기 처리useDeleteMyPost)나의 활동 — 소속된 방
정리
📸 스크린샷
구현 완료하자마자 서버가 꺼져서ㅠㅠㅠ 추후에 촬영하겠습니다ㅠㅠㅠ
📣 기타사항 및 코멘트
파일 변경이 너무너무 많아서... 마이페이지쪽 훅이랑 새로생긴 UI, API쪽 파일만 확인해주시면 될 것 같아요ㅠㅠ
✅ 체크리스트
Summary by CodeRabbit
New Features
Improvements