Skip to content

Feat/159 mypage UI api#160

Merged
shinwokkang merged 4 commits intodevfrom
feat/159-mypage-ui-api
Mar 2, 2026
Merged

Feat/159 mypage UI api#160
shinwokkang merged 4 commits intodevfrom
feat/159-mypage-ui-api

Conversation

@shinwokkang
Copy link
Contributor

📌 개요 (Summary)

  • 변경 사항에 대한 간략한 요약을 적어주세요.
  • 관련 이슈가 있다면 링크를 걸어주세요 (예: [fix] cicd / build 문제 #123).

🛠️ 변경 사항 (Changes)

  • 새로운 기능 추가
  • 버그 수정
  • 코드 리팩토링
  • 문서 업데이트
  • 기타 (설명: )

📸 스크린샷 (Screenshots)

(UI 변경 사항이 있다면 첨부해주세요)

✅ 체크리스트 (Checklist)

  • 빌드가 성공적으로 수행되었나요? (pnpm build)
  • 린트 에러가 없나요? (pnpm lint)
  • 불필요한 콘솔 로그나 주석을 제거했나요?

@shinwokkang shinwokkang self-assigned this Mar 1, 2026
@shinwokkang shinwokkang added the ✨ feat 새로운 기능 추가 label Mar 1, 2026
@vercel
Copy link

vercel bot commented Mar 1, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
check-mo Ready Ready Preview, Comment Mar 1, 2026 4:05am
checkmo Ready Ready Preview, Comment Mar 1, 2026 4:05am

@coderabbitai
Copy link

coderabbitai bot commented Mar 1, 2026

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch feat/159-mypage-ui-api

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.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@gemini-code-assist
Copy link
Contributor

Summary of Changes

Hello, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

이 PR은 사용자가 마이페이지에서 참여 중인 모임을 탈퇴할 수 있도록 기능을 추가합니다. UI 컴포넌트에 탈퇴 버튼과 확인 모달을 구현하고, 이를 지원하기 위한 새로운 API 엔드포인트와 서비스 로직, 그리고 React Query 뮤테이션 훅을 포함합니다.

Highlights

  • 모임 탈퇴 기능 UI 추가: MyMeetingCard.tsx에 모임 탈퇴 기능을 위한 드롭다운 메뉴와 확인 모달이 추가되었습니다.
  • 모임 탈퇴 뮤테이션 훅 구현: 새로운 React Query 뮤테이션 훅 useLeaveClubMutation이 모임 탈퇴 요청 처리를 위해 구현되었습니다.
  • 모임 탈퇴 API 엔드포인트 정의: 모임 탈퇴를 위한 새로운 API 엔드포인트가 Clubs.ts에 정의되었습니다.
  • 모임 탈퇴 서비스 로직 추가: clubService.tsleaveClub 서비스 함수가 추가되어 API 호출을 처리합니다.

🧠 New Feature in Public Preview: You can now enable Memory to help Gemini Code Assist learn from your team's feedback. This makes future code reviews more consistent and personalized to your project's style. Click here to enable Memory in your admin console.

Changelog
  • src/components/base-ui/MyPage/items/MyMeetingCard.tsx
    • 모임 탈퇴 기능을 위한 '더보기' 버튼과 드롭다운 메뉴를 추가했습니다.
    • 탈퇴 확인 모달(ConfirmModal)을 통합했습니다.
    • 외부 클릭 시 드롭다운 메뉴가 닫히도록 useEffect를 사용하여 로직을 구현했습니다.
    • useLeaveClubMutation 훅을 사용하여 탈퇴 기능을 연동했습니다.
  • src/hooks/mutations/useClubMutations.ts
    • 새로운 useLeaveClubMutation 훅을 추가하여 모임 탈퇴 API 호출을 관리합니다.
    • 탈퇴 성공 시 토스트 메시지를 표시하고 myList 쿼리를 무효화합니다.
    • 탈퇴 실패 시 에러 메시지를 토스트로 표시합니다.
  • src/lib/api/endpoints/Clubs.ts
    • CLUBS 객체에 모임 탈퇴를 위한 leave 엔드포인트를 추가했습니다.
  • src/services/clubService.ts
    • leaveClub 비동기 함수를 추가하여 CLUBS.leave 엔드포인트를 통해 DELETE 요청을 보냅니다.
    • searchClubs, getLatestNotice, getNextMeeting 함수의 코드 스타일을 정렬했습니다.
Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for Github and other Google products, sign up here.

You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

Copy link
Contributor

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

이 PR은 마이페이지에서 사용자가 모임에서 탈퇴할 수 있는 기능을 추가합니다. 전반적으로 기능 구현은 잘 이루어졌습니다. 몇 가지 코드 개선점을 제안합니다. MyMeetingCard 컴포넌트에서 외부 클릭 감지 로직을 커스텀 훅으로 분리하여 재사용성을 높이는 것을 고려해볼 수 있습니다. 또한, ConfirmModal 사용 시 중복되는 상태 업데이트 로직을 정리하고, useLeaveClubMutation 훅에서 에러 타입을 명확히 하여 타입 안정성을 높이는 것을 제안합니다.

Comment on lines +21 to +29
useEffect(() => {
const handleClickOutside = (e: MouseEvent) => {
if (menuRef.current && !menuRef.current.contains(e.target as Node)) {
setMenuOpen(false);
}
};
document.addEventListener("mousedown", handleClickOutside);
return () => document.removeEventListener("mousedown", handleClickOutside);
}, []);
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

useEffect 로직은 메뉴나 드롭다운 외부 클릭을 감지하는 데 매우 유용하게 사용됩니다. 이 로직을 useOnClickOutside와 같은 커스텀 훅으로 분리하면 다른 컴포넌트에서도 재사용할 수 있고, MyMeetingCard 컴포넌트의 코드를 더 간결하게 만들 수 있습니다. 이는 코드의 유지보수성을 높이는 좋은 방법입니다.

Comment on lines +36 to +39
const handleConfirmLeave = () => {
leaveClub(club.clubId);
setIsConfirmModalOpen(false);
};
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

ConfirmModal 컴포넌트는 확인 동작(onConfirm)이 실행된 후 자동으로 취소 동작(onCancel)을 호출하여 스스로 닫히도록 설계되어 있습니다. 따라서 handleConfirmLeave 함수 내에서 setIsConfirmModalOpen(false)를 호출하는 것은 중복이며, 제거해야 합니다. ConfirmModal이 모달을 닫는 책임을 갖도록 하는 것이 좋습니다.

  const handleConfirmLeave = () => {
    leaveClub(club.clubId);
  };

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

수정완료되었습니다.

@shinwokkang shinwokkang merged commit 9adfdde into dev Mar 2, 2026
4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

✨ feat 새로운 기능 추가

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant