Skip to content

[Qa] 일정 기능 관련 QA 작업#134

Merged
seseoju merged 15 commits intodevelopfrom
feature/133
Feb 25, 2026
Merged

[Qa] 일정 기능 관련 QA 작업#134
seseoju merged 15 commits intodevelopfrom
feature/133

Conversation

@seseoju
Copy link
Member

@seseoju seseoju commented Feb 25, 2026

🛠️ 변경 사항

실제로 어떤 작업을 했는지 구체적으로 작성해주세요.

  • UI 수정 (Design)
  • 기능 추가 (Feature)
  • 버그 수정 (Bug)
  • 리팩토링 (Refactor)
  • 성능 개선 (Performance)
  • 테스트 추가 (Chore)
  • 기타: QA

세부 변경 내용

  • 일정 관련 QA 변경사항을 반영했습니다.
  • 일정 등록/수정 폼 변경 비즈니스 로직을 추상화한 useScheduleFormState 훅을 분리했습니다.
  • entity/schedule/lib/formatter.ts에 일정 기능에 필요한 포매팅(distance, pace, meetingAt)을 통합해 관련 페이지에 적용했습니다.
  • 일정 상세의 정적 지도 이미지는 해당 요소의 동적 너비, 높이를 참조해 네이버 Static Map의 HTTP Referer 인증 방식 URL에 파라미터에 추가합니다. 커스텀 핀도 추가되었습니다.

🔍 관련 이슈

관련 이슈를 링크해주세요. ex) close #23, related #23


📸 스크린샷 / GIF (선택)

UI 변경이 있다면 첨부해주세요.

Before After

⚠️ 주의 사항 / 리뷰 포인트

리뷰어가 특히 봐줬으면 하는 부분이나 고민했던 지점을 작성해주세요.


🔄 연관 작업

후속 작업이나 연관된 PR이 있다면 링크해주세요.

@seseoju seseoju requested a review from yummjin February 25, 2026 19:16
@seseoju seseoju self-assigned this Feb 25, 2026
@seseoju seseoju added the QA QA 사항을 적용합니다. label Feb 25, 2026
@gemini-code-assist
Copy link
Contributor

Summary of Changes

Hello @seseoju, 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은 일정 기능과 관련된 전반적인 QA 작업을 반영하며, 사용자 경험과 코드 품질을 향상시키는 데 중점을 둡니다. 일정 생성 및 수정 폼의 로직을 추상화하여 관리 효율성을 높였고, 데이터 포맷팅을 중앙 집중화하여 일관성을 확보했습니다. 또한, 지도 표시 기능을 개선하고 폼 유효성 검사를 강화하여 데이터 무결성을 높였습니다.

Highlights

  • 일정 폼 로직 추상화: 일정 생성 및 수정 페이지에서 사용되는 폼의 비즈니스 로직을 useScheduleFormState 커스텀 훅으로 분리하여 코드 재사용성과 유지보수성을 높였습니다. 이 훅은 폼 값 관리, 위치 선택 처리, 그리고 시간 유효성 검사(과거 시간 설정 방지)를 담당합니다.
  • 일정 관련 데이터 포맷팅 통합 및 개선: entity/schedule/lib/formatter.ts 파일에 거리, 페이스, 모임 시간 등 일정 관련 데이터를 포맷팅하는 함수들을 통합하고, 페이스 포맷을 '분'초' 형식으로 변경했습니다. 이 포맷팅 로직은 일정 목록 및 상세 페이지에 일관되게 적용됩니다.
  • 정적 지도 이미지 및 마커 개선: 일정 상세 페이지의 정적 지도 이미지가 이제 해당 요소의 동적 너비와 높이를 참조하여 Naver Static Map API URL에 파라미터로 추가됩니다. 또한, 커스텀 마커 핀이 지도에 표시되도록 개선되었습니다.
  • 일정 참여자 및 생성자 역할 표시 개선: 일정 참여자 및 생성자의 역할(리더/멤버)을 표시하는 로직이 개선되었으며, MEMBER_ROLE_LABELROLE_CHIP_TYPE_MAP 상수를 활용하여 일관된 UI를 제공합니다. 참여자 목록 및 상세 헤더에서 이 변경사항이 반영되었습니다.
  • 폼 유효성 검사 강화: 일정 폼의 유효성 검사 스키마에 최대 인원, 거리, 페이스에 대한 최대값 제한이 추가되었고, 상세 설명 필드에 대한 최소 길이 검사가 적용되었습니다. 또한, 준비물 입력 시 빈 값을 추가하지 않도록 수정되었습니다.

🧠 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
  • apps/web/src/entities/schedule/lib/formatter.ts
    • formatPace 함수가 '분'초' 형식으로 페이스를 포맷하도록 수정되었습니다.
    • formatMeetingListDate 함수가 추가되어 일정 목록에 필요한 모임 날짜/시간을 포맷합니다.
  • apps/web/src/entities/schedule/model/schedule.types.ts
    • ScheduleParticipant 타입이 CrewScheduleDetailResponse의 participants 타입으로 직접 참조하도록 변경되었습니다.
  • apps/web/src/entities/schedule/ui/ScheduleListItem.tsx
    • 로컬 formatMeetingAt 함수가 제거되고, 통합된 formatter.ts의 함수들을 사용하도록 업데이트되었습니다.
  • apps/web/src/pages/schedule/ui/ScheduleCreatePage.tsx
    • useScheduleFormState 훅을 사용하여 폼 상태 관리 로직이 추상화되었습니다.
    • 일정 생성 성공 시 모든 일정 쿼리를 무효화하도록 useMutation 설정이 업데이트되었습니다.
  • apps/web/src/pages/schedule/ui/ScheduleDetailPage.tsx
    • 일정 생성자 역할(creatorRole)을 직접 전달하도록 transformScheduleDetail 및 ScheduleDetailHeaderSection의 props가 변경되었습니다.
    • 일정 참여자 매핑 로직이 간소화되었습니다.
    • 일정이 가득 찼을 때(isFull) 신청/취소 버튼의 표시 조건에 !isCreator 조건이 추가되었습니다.
  • apps/web/src/pages/schedule/ui/ScheduleEditPage.tsx
    • useScheduleFormState 훅을 사용하여 폼 상태 관리 로직이 추상화되었습니다.
    • 일정 수정 성공 시 모든 일정 쿼리를 무효화하도록 useMutation 설정이 업데이트되었습니다.
  • apps/web/src/pages/schedule/ui/ScheduleLocationPage.tsx
    • reverseGeocode 함수가 임포트되었습니다.
    • handleRegisterLocation 함수가 지도에서 조정된 좌표에 대해 비동기적으로 주소를 역지오코딩하도록 수정되었습니다.
  • apps/web/src/pages/schedule/ui/ScheduleMembersPage.tsx
    • 참여자 목록 매핑 로직이 간소화되었고, ScheduleParticipantListItem의 key가 member.memberId로 변경되었습니다.
  • apps/web/src/shared/constants/member-role.ts
    • 역할에 따른 칩 타입을 정의하는 ROLE_CHIP_TYPE_MAP 상수가 추가되었습니다.
  • apps/web/src/shared/ui/naver-map/NaverMap.css.ts
    • NaverMap 컴포넌트의 마커 아이콘 래퍼에 대한 CSS 스타일이 추가되었습니다.
  • apps/web/src/shared/ui/naver-map/NaverMap.tsx
    • 마커 아이콘 래퍼에 대한 CSS 모듈이 적용되었고, 기본 줌 레벨이 14에서 17로 변경되었습니다.
  • apps/web/src/widgets/mypage/ui/MyProfileSection.tsx
    • ROLE_CHIP_TYPE_MAP 상수가 shared/constants/member-role.ts에서 임포트되도록 변경되었습니다.
  • apps/web/src/widgets/schedule-form/model/scheduleForm.ts
    • PARTICIPANTS_MAX 상수가 추가되었습니다.
    • scheduleFormSchema에 distance, pace, maxParticipants에 대한 최대값 유효성 검사가 추가되었습니다.
    • description 필드에 최소 길이 유효성 검사가 추가되었습니다.
    • formatSupplies 함수가 항상 배열을 반환하도록 수정되었습니다.
    • isScheduleDateTimeInPast 함수가 추가되어 예정된 시간이 과거인지 확인합니다.
  • apps/web/src/widgets/schedule-form/model/useScheduleFormState.ts
    • 새 파일이 추가되어 일정 폼의 상태 관리, 위치 선택 통합, 시간 유효성 검사를 처리하는 커스텀 훅을 제공합니다.
  • apps/web/src/widgets/schedule-form/ui/ScheduleForm.tsx
    • PARTICIPANTS_MAX가 임포트되었고, maxParticipants 입력 필드에 대한 유효성 검사 오류 표시가 추가되었습니다.
    • addSupply 함수가 빈 준비물 항목을 추가하지 않도록 수정되었습니다.
  • apps/web/src/widgets/schedule/styles/ScheduleParticipantListItem.css.ts
    • leaderBadge 및 leaderBadgeStar 스타일이 creatorBadge 및 creatorBadgeStar로 이름이 변경되고, 위치 조정이 있었습니다.
  • apps/web/src/widgets/schedule/ui/ScheduleDetailHeaderSection.tsx
    • creatorRole prop을 사용하도록 업데이트되었고, 역할 칩 표시를 위해 ROLE_CHIP_TYPE_MAP 및 MEMBER_ROLE_LABEL이 사용되었습니다.
  • apps/web/src/widgets/schedule/ui/ScheduleDetailInfoSection.tsx
    • StaticMap 컴포넌트에 address prop이 추가되었습니다.
  • apps/web/src/widgets/schedule/ui/ScheduleParticipantList.tsx
    • ScheduleParticipantListItem의 key가 participant.memberId로 변경되었습니다.
  • apps/web/src/widgets/schedule/ui/ScheduleParticipantListItem.tsx
    • participant prop 타입이 ScheduleParticipant로 변경되었고, isLeader 대신 isCreator를 사용하도록 업데이트되었습니다.
  • apps/web/src/widgets/schedule/ui/StaticMap.tsx
    • NAVER_MAP_MARKER_ICON_URL이 임포트되었고, getStaticMapUrl 함수가 동적 너비/높이 및 커스텀 마커를 포함하도록 수정되었습니다.
    • 지도 클릭 핸들러에서 reverseGeocode 호출이 제거되었고, address prop을 사용하도록 변경되었습니다.
Activity
  • 일정 기능 관련 QA 작업이 진행되었습니다.
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

일정 기능 관련 QA 변경사항을 반영한 PR이네요. 전반적으로 코드 품질을 높이는 좋은 변경들이 많습니다. 특히, useScheduleFormState 훅을 분리하여 폼 관련 비즈니스 로직을 추상화하고, formatter.ts에 포매팅 함수를 통합하여 코드 중복을 줄인 점이 인상적입니다. 또한, 정적 지도 이미지 URL 생성 로직을 개선하여 다양한 화면 크기에 대응하고 커스텀 핀을 추가한 것도 좋은 개선입니다. 한 가지 개선점을 제안합니다. 일정 상세 페이지에서 일정이 꽉 찼을 경우 참여자가 취소할 수 없는 문제가 있어 수정을 제안했습니다. 자세한 내용은 개별 코멘트를 확인해주세요.

</div>
</Show>
<Show when={!isCreator && isParticipating}>
<Show when={!isCreator && !isFull && isParticipating}>
Copy link
Contributor

Choose a reason for hiding this comment

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

high

일정이 꽉 찼을 경우, 이미 참여하고 있는 사용자가 참여를 취소할 수 없는 문제가 있습니다. !isFull 조건 때문에 취소하기 버튼이 보이지 않게 됩니다. 사용자는 일정의 참여 인원 상태와 관계없이 자신의 참여를 취소할 수 있어야 합니다.

Suggested change
<Show when={!isCreator && !isFull && isParticipating}>
<Show when={!isCreator && isParticipating}>

@github-actions
Copy link

@seseoju seseoju merged commit c0d7792 into develop Feb 25, 2026
1 of 2 checks passed
@seseoju seseoju deleted the feature/133 branch February 25, 2026 19:27
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

QA QA 사항을 적용합니다.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Qa] 일정 기능 관련 QA

1 participant