Skip to content

fix: 모든 페이지 기능/API 에러 해결#157

Merged
Yejiin21 merged 19 commits intodevelopfrom
fix/#151/event-error
May 31, 2025
Merged

fix: 모든 페이지 기능/API 에러 해결#157
Yejiin21 merged 19 commits intodevelopfrom
fix/#151/event-error

Conversation

@Yejiin21
Copy link
Copy Markdown
Contributor

@Yejiin21 Yejiin21 commented May 31, 2025

Summary by CodeRabbit

  • 신규 기능

    • 이벤트 목록과 슬라이더에서 종료된 이벤트가 자동으로 제외되어, 지난 이벤트가 더 이상 표시되지 않습니다.
    • 이벤트 카드 클릭 시 상세 페이지로 이동할 수 있습니다.
    • 이벤트 상세 페이지에서 로그인한 사용자만 북마크(좋아요) 버튼을 볼 수 있습니다.
    • 이벤트 상세 페이지의 공식 웹사이트 링크가 여러 개의 참조 링크로 동적으로 표시됩니다.
    • 티켓 옵션 드래그앤드랍 기능에 옵션 삭제 기능이 추가되었습니다.
  • 버그 수정

    • 전화번호 입력 시 하이픈 포함 13자리로 정확히 입력해야 하며, 형식에 맞지 않으면 오류 메시지가 안내됩니다.
    • 티켓 옵션 삭제 시, 이미 응답이 있는 옵션은 삭제할 수 없다는 안내가 제공됩니다.
  • 스타일

    • 대시보드 및 참여자 카드, 리스트, 차트 등 UI 요소의 간격, 폰트 크기, 배경색 등 레이아웃 및 시각적 일관성이 개선되었습니다.
    • 메뉴 및 검색 아이콘의 크기가 명확하게 지정되었습니다.
  • 리팩터

    • 이벤트, 사용자 관련 API 요청 헤더를 skipAuth에서 isPublicApi로 일괄 변경해 인증 처리 방식을 일관성 있게 조정하였습니다.
    • 대시보드 응답 리스트의 렌더링 구조가 간소화되어 유지보수성이 향상되었습니다.
    • 이벤트 정보 저장 시 페이지 이동 대신 데이터 갱신이 이루어집니다.
  • 기타

    • 불필요한 콘솔 로그 및 코드 중복이 제거되었습니다.

@Yejiin21 Yejiin21 requested review from hyeeuncho and xaexunxang May 31, 2025 15:44
@Yejiin21 Yejiin21 self-assigned this May 31, 2025
@Yejiin21 Yejiin21 added 🛠️ BugFix 오류 해결 과정 기록 🪄 Refactoring 코드 리팩토링 labels May 31, 2025
@Yejiin21 Yejiin21 linked an issue May 31, 2025 that may be closed by this pull request
@coderabbitai
Copy link
Copy Markdown

coderabbitai bot commented May 31, 2025

## Walkthrough

이 변경 사항은 여러 컴포넌트와 API 모듈에 걸쳐 UI, 상태 관리, 폼 검증, API 요청 헤더, 드래그 앤 드롭 기능, 이벤트 필터링 및 렌더링 로직을 개선합니다. 인증 관련 HTTP 헤더 키가 통일되었고, 이벤트 및 참가자 리스트의 렌더링 방식, 폼 검증, 드래그 앤 드롭 삭제 기능 등이 추가·수정되었습니다.

## Changes

| 파일/그룹                                         | 변경 요약 |
|-------------------------------------------------|-----------|
| src/entities/event/api/event.ts, src/features/join/api/user.ts, src/shared/types/api/http-client.ts | API 요청 헤더를 `{ skipAuth: true }`에서 `{ isPublicApi: true }`로 변경; 인터셉터 로직도 해당 키로 수정 |
| src/features/dashboard/ui/MultiplePieCharts.tsx | Pie 차트 컨테이너에 배경색 추가, import 및 JSX 포맷 개선 |
| src/features/dashboard/ui/ParicipantCard.tsx    | 참가자 카드의 레이아웃, 폰트 사이즈, 버튼 렌더링 방식 개선 |
| src/features/dashboard/ui/PariticipantsList.tsx | useParticipantStore 구조분해 문법 및 헤더 gap 값 수정, order 추출 로직 단순화 |
| src/features/dashboard/ui/ResponsesList.tsx     | 텍스트 응답 렌더링 로직을 요약 케이스 내부로 통합, 코드 간결화 및 스타일 소폭 변경 |
| src/features/event/ui/DatePicker.tsx            | 초기 날짜 상태를 eventState 또는 initial 값으로 설정, useEffect에서 state가 null일 때만 업데이트 |
| src/features/event/ui/EventList.tsx, src/features/home/ui/EventSliderSection.tsx | 이벤트 리스트에서 종료된 이벤트 필터링, 클릭 시 상세 페이지 이동 추가, 슬라이더 레이아웃 보정 |
| src/features/ticket/hooks/useTicketOptionDnD.ts | 드래그 앤 드롭으로 티켓 옵션 삭제 기능 추가, attach/detach 로직 정제 |
| src/features/ticket/hooks/useTicketOptionHook.ts| 삭제 성공 시 쿼리 무효화 추가, 에러 메시지에 따른 알림 분기 처리 |
| src/pages/dashboard/ui/EventInfoPage.tsx        | 저장 후 페이지 이동 대신 React Query 캐시 무효화로 동작 변경 |
| src/pages/event/ui/EventDetailsPage.tsx         | 로그인 상태에 따라 북마크 버튼 표시, 주소 및 웹사이트 링크 렌더링 개선, 검색 아이콘 클릭 시 이동 추가 |
| src/pages/menu/ui/MenuPage.tsx                   | 헤더 내 검색 아이콘에 명시적 width 클래스 추가 |
| src/shared/lib/formValidation.ts                 | 전화번호 검증을 길이 13자(하이픈 포함)로 엄격화, 에러 메시지 명확화 |

## Sequence Diagram(s)

```mermaid
sequenceDiagram
    participant User
    participant EventList
    participant Router

    User->>EventList: 이벤트 카드 클릭
    EventList->>Router: /event-details/{event.id}로 이동
sequenceDiagram
    participant User
    participant TicketOptionDnD
    participant useDeleteTicketOptionMutation

    User->>TicketOptionDnD: 옵션을 '삭제' 영역으로 드래그
    TicketOptionDnD->>useDeleteTicketOptionMutation: 삭제 뮤테이션 실행
    useDeleteTicketOptionMutation-->>TicketOptionDnD: 성공/실패 콜백
Loading
sequenceDiagram
    participant Form
    participant formValidation

    Form->>formValidation: 전화번호 입력값 검증
    formValidation-->>Form: 13자리(하이픈 포함) 아니면 에러 반환
Loading

Possibly related PRs

Suggested reviewers

  • hyeeuncho
  • xaexunxang

Poem

🐇
오늘도 코드를 깡총깡총,
이벤트 끝난 건 쏙 빼고,
티켓 옵션 드래그로 휘리릭~
폼 검증은 더 엄격하게,
북마크는 로그인한 토끼만!
변화의 바람, 하얀 배경에
토끼는 기쁘게 춤춘다.
🌸


<!-- walkthrough_end -->


---

<details>
<summary>📜 Recent review details</summary>

**Configuration used: CodeRabbit UI**
**Review profile: CHILL**
**Plan: Pro**


<details>
<summary>📥 Commits</summary>

Reviewing files that changed from the base of the PR and between 63513a71bcc88f46e752d5838be47c29d0feb4c0 and 7065b44c6a688ce5701e4ddd0c489ac1c1d3398d.

</details>

<details>
<summary>📒 Files selected for processing (1)</summary>

* `src/features/event/ui/EventList.tsx` (3 hunks)

</details>

<details>
<summary>🚧 Files skipped from review as they are similar to previous changes (1)</summary>

* src/features/event/ui/EventList.tsx

</details>

</details>
<!-- internal state start -->


<!-- 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 -->

<!-- internal state end -->
<!-- finishing_touch_checkbox_start -->

<details open="true">
<summary>✨ Finishing Touches</summary>

- [ ] <!-- {"checkboxId": "7962f53c-55bc-4827-bfbf-6a18da830691"} --> 📝 Generate Docstrings

</details>

<!-- finishing_touch_checkbox_end -->
<!-- tips_start -->

---

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.

<details>
<summary>❤️ Share</summary>

- [X](https://twitter.com/intent/tweet?text=I%20just%20used%20%40coderabbitai%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20the%20proprietary%20code.%20Check%20it%20out%3A&url=https%3A//coderabbit.ai)
- [Mastodon](https://mastodon.social/share?text=I%20just%20used%20%40coderabbitai%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20the%20proprietary%20code.%20Check%20it%20out%3A%20https%3A%2F%2Fcoderabbit.ai)
- [Reddit](https://www.reddit.com/submit?title=Great%20tool%20for%20code%20review%20-%20CodeRabbit&text=I%20just%20used%20CodeRabbit%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20proprietary%20code.%20Check%20it%20out%3A%20https%3A//coderabbit.ai)
- [LinkedIn](https://www.linkedin.com/sharing/share-offsite/?url=https%3A%2F%2Fcoderabbit.ai&mini=true&title=Great%20tool%20for%20code%20review%20-%20CodeRabbit&summary=I%20just%20used%20CodeRabbit%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20proprietary%20code)

</details>

<details>
<summary>🪧 Tips</summary>

### Chat

There are 3 ways to chat with [CodeRabbit](https://coderabbit.ai?utm_source=oss&utm_medium=github&utm_campaign=GoTogether-Inc/frontend&utm_content=157):

- Review comments: Directly reply to a review comment made by CodeRabbit. Example:
  - `I pushed a fix in commit <commit_id>, please review it.`
  - `Explain this complex logic.`
  - `Open a follow-up GitHub issue for this discussion.`
- Files and specific lines of code (under the "Files changed" tab): Tag `@coderabbitai` in a new review comment at the desired location with your query. Examples:
  - `@coderabbitai explain this code block.`
  -	`@coderabbitai modularize this function.`
- PR comments: Tag `@coderabbitai` in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
  - `@coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.`
  - `@coderabbitai read src/utils.ts and explain its main purpose.`
  - `@coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.`
  - `@coderabbitai help me debug CodeRabbit configuration file.`

### Support

Need help? Create a ticket on our [support page](https://www.coderabbit.ai/contact-us/support) for assistance with any issues or questions.

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

### CodeRabbit Commands (Invoked using PR comments)

- `@coderabbitai pause` to pause the reviews on a PR.
- `@coderabbitai resume` to resume the paused reviews.
- `@coderabbitai review` to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
- `@coderabbitai full review` to do a full review from scratch and review all the files again.
- `@coderabbitai summary` to regenerate the summary of the PR.
- `@coderabbitai generate docstrings` to [generate docstrings](https://docs.coderabbit.ai/finishing-touches/docstrings) for this PR.
- `@coderabbitai generate sequence diagram` to generate a sequence diagram of the changes in this PR.
- `@coderabbitai resolve` resolve all the CodeRabbit review comments.
- `@coderabbitai configuration` to show the current CodeRabbit configuration for the repository.
- `@coderabbitai help` to get help.

### Other keywords and placeholders

- Add `@coderabbitai ignore` anywhere in the PR description to prevent this PR from being reviewed.
- Add `@coderabbitai summary` to generate the high-level summary at a specific location in the PR description.
- Add `@coderabbitai` anywhere in the PR title to generate the title automatically.

### CodeRabbit Configuration File (`.coderabbit.yaml`)

- You can programmatically configure CodeRabbit by adding a `.coderabbit.yaml` file to the root of your repository.
- Please see the [configuration documentation](https://docs.coderabbit.ai/guides/configure-coderabbit) for more information.
- If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: `# yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json`

### Documentation and Community

- Visit our [Documentation](https://docs.coderabbit.ai) for detailed information on how to use CodeRabbit.
- Join our [Discord Community](http://discord.gg/coderabbit) to get help, request features, and share feedback.
- Follow us on [X/Twitter](https://twitter.com/coderabbitai) for updates and announcements.

</details>

<!-- tips_end -->

@github-actions
Copy link
Copy Markdown

Copy link
Copy Markdown

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 2

🔭 Outside diff range comments (1)
src/features/home/ui/EventSliderSection.tsx (1)

93-93: 💡 Verification agent

🧩 Analysis chain

네비게이션 로직의 일관성을 확인하세요.

네비게이션 버튼이 여전히 원본 events.length를 사용하고 있는데, 이는 filteredEvents.length와 다를 수 있습니다. 이로 인해 인덱스 범위를 벗어나는 문제가 발생할 수 있습니다.

다음 스크립트를 실행하여 이벤트 슬라이더 컴포넌트에서 필터링된 이벤트와 네비게이션 로직의 일관성을 확인하세요:

Also applies to: 98-98


🏁 Script executed:

#!/bin/bash
# 이벤트 슬라이더에서 네비게이션 로직과 필터링된 이벤트 사용 패턴 확인

echo "=== EventSliderSection에서 events와 filteredEvents 사용 패턴 분석 ==="
rg -A 10 -B 5 "handleNext|handlePrev" src/features/home/ui/EventSliderSection.tsx

echo "=== 유사한 슬라이더 컴포넌트에서 네비게이션 패턴 확인 ==="
rg -A 5 -B 5 "startIndex.*length" src/

Length of output: 3635


네비게이션 로직: filteredEvents.length 사용으로 일관성 유지하세요.

현재 handlePrev/handleNextevents.length를 넘겨주고 있어, 전체 이벤트 개수를 기준으로 인덱스를 순환합니다. 하지만 화면에 표시되는 건 filteredEvents이기 때문에, 필터된 이벤트 개수(filteredEvents.length)로 순환해야 일부 인덱스에서 빈 배열이 반환되는 문제를 방지할 수 있습니다.

수정 위치:

  • 파일: src/features/home/ui/EventSliderSection.tsx
  • 라인: onClick 호출부 (약 93, 98번째 줄)

제안하는 변경 사항:

- <IconButton
-   onClick={() => handlePrev(setStartIndex, startIndex, events.length)}
-   ...
- />
+ <IconButton
+   onClick={() => handlePrev(setStartIndex, startIndex, filteredEvents.length)}
+   ...
+/>

- <IconButton
-   onClick={() => handleNext(setStartIndex, startIndex, events.length)}
-   ...
- />
+ <IconButton
+   onClick={() => handleNext(setStartIndex, startIndex, filteredEvents.length)}
+   ...
+/>
📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between a50ff9a and 63513a7.

📒 Files selected for processing (16)
  • src/entities/event/api/event.ts (5 hunks)
  • src/features/dashboard/ui/MultiplePieCharts.tsx (3 hunks)
  • src/features/dashboard/ui/ParicipantCard.tsx (1 hunks)
  • src/features/dashboard/ui/PariticipantsList.tsx (3 hunks)
  • src/features/dashboard/ui/ResponsesList.tsx (1 hunks)
  • src/features/event/ui/DatePicker.tsx (2 hunks)
  • src/features/event/ui/EventList.tsx (3 hunks)
  • src/features/home/ui/EventSliderSection.tsx (2 hunks)
  • src/features/join/api/user.ts (1 hunks)
  • src/features/ticket/hooks/useTicketOptionDnD.ts (3 hunks)
  • src/features/ticket/hooks/useTicketOptionHook.ts (2 hunks)
  • src/pages/dashboard/ui/EventInfoPage.tsx (2 hunks)
  • src/pages/event/ui/EventDetailsPage.tsx (6 hunks)
  • src/pages/menu/ui/MenuPage.tsx (1 hunks)
  • src/shared/lib/formValidation.ts (1 hunks)
  • src/shared/types/api/http-client.ts (1 hunks)
🧰 Additional context used
🧬 Code Graph Analysis (4)
src/features/join/api/user.ts (2)
src/features/join/model/userInformation.ts (2)
  • UserInfoRequest (8-12)
  • UserInfoResponse (1-6)
src/shared/types/api/http-client.ts (1)
  • axiosClient (6-13)
src/features/dashboard/ui/ParicipantCard.tsx (1)
src/shared/lib/date.ts (2)
  • formatDate (1-9)
  • formatTime (10-15)
src/features/dashboard/ui/ResponsesList.tsx (1)
src/features/dashboard/model/store/ResponseStore.tsx (1)
  • useResponseStore (21-61)
src/pages/event/ui/EventDetailsPage.tsx (1)
src/app/provider/authStore.ts (1)
  • useAuthStore (16-28)
🪛 ESLint
src/features/event/ui/EventList.tsx

[error] 6-6: 'ReactQueryDevtools' is defined but never used.

(@typescript-eslint/no-unused-vars)

⏰ Context from checks skipped due to timeout of 90000ms (1)
  • GitHub Check: storybook
🔇 Additional comments (35)
src/pages/menu/ui/MenuPage.tsx (1)

23-23: UI 일관성 개선이 적절합니다.

검색 아이콘에 w-4 클래스를 추가하여 버튼 컨테이너(w-5) 내에서 적절한 여백을 확보한 것이 좋습니다.

src/features/dashboard/ui/MultiplePieCharts.tsx (3)

2-2: 코드 포맷팅 개선이 좋습니다.

import 문에 적절한 공백을 추가하여 가독성을 향상시켰습니다.


26-26: 명시적인 배경색 설정이 좋습니다.

bg-white 클래스를 추가하여 컨테이너의 배경색을 명확히 설정한 것이 UI 일관성에 도움이 됩니다.


35-35: 코드 정리가 적절합니다.

Pie 컴포넌트의 props를 한 줄로 정리하여 코드를 더 간결하게 만들었습니다.

src/entities/event/api/event.ts (1)

10-10: 인증 헤더 키 통일화가 적절합니다.

모든 공개 API 호출에서 skipAuth: trueisPublicApi: true로 일관되게 변경한 것이 좋습니다. 이는 http-client.ts의 인터셉터 로직과 일치하는 변경사항입니다.

Also applies to: 28-28, 52-52, 66-66, 79-79

src/shared/types/api/http-client.ts (1)

17-17:

Details

✅ Verification successful

인증 헤더 키 변경이 올바릅니다.

skipAuth에서 isPublicApi로 헤더 키를 변경한 것이 다른 API 파일들의 변경사항과 일치합니다. 이 변경으로 공개 API 요청이 인증을 우회할 수 있습니다.

모든 API 파일에서 일관되게 헤더 키가 업데이트되었는지 확인하기 위해 다음 스크립트를 실행합니다:


🏁 Script executed:

#!/bin/bash
# 설명: skipAuth 헤더를 사용하는 다른 API 호출이 있는지 확인
# 예상 결과: skipAuth 사용 사례가 없어야 함

echo "=== skipAuth 헤더를 사용하는 파일 검색 ==="
rg -A 2 -B 2 "skipAuth.*true" --type ts --type tsx

echo "=== isPublicApi 헤더를 사용하는 파일 검색 ==="
rg -A 2 -B 2 "isPublicApi.*true" --type ts --type tsx

Length of output: 316


rg에서 --type tsx를 인식하지 못해 글롭(glob) 패턴으로 .ts.tsx 파일을 모두 검색하도록 스크립트를 수정합니다.


🏁 Script executed:

#!/bin/bash
echo "=== skipAuth 사용 여부 확인 ==="
rg -n 'skipAuth' --glob '*.ts' --glob '*.tsx'

echo "=== isPublicApi 사용 여부 확인 ==="
rg -n 'isPublicApi' --glob '*.ts' --glob '*.tsx'

Length of output: 794


인증 헤더 키 변경 일관성 확인 완료

skipAuth 관련 코드를 모두 제거했고, 모든 API 호출이 isPublicApi를 사용하도록 업데이트된 것을 확인했습니다.

  • 발견된 isPublicApi 사용 위치:
    • src/entities/event/api/event.ts (라인 10, 28, 52, 66, 79)
    • src/features/join/api/user.ts (라인 6, 13)
    • src/shared/types/api/http-client.ts (라인 17)

더 이상의 조치가 필요 없습니다.

src/features/join/api/user.ts (1)

6-6:

Details

✅ Verification successful

인증 헤더 키 변경이 올바르게 적용되었습니다.

skipAuth에서 isPublicApi로의 헤더 키 변경이 일관되게 적용되었습니다. 이 변경은 HTTP 클라이언트 인터셉터의 업데이트와 일치합니다.

Also applies to: 13-13


🏁 Script executed:

#!/bin/bash
# HTTP 클라이언트가 새로운 isPublicApi 헤더를 올바르게 처리하는지 확인
rg -A 10 -B 5 "isPublicApi" --type ts

Length of output: 6617


isPublicApi 헤더 처리 일관 적용 확인

인터셉터에서 isPublicApi 헤더를 정상 처리하며, 관련 API 호출에도 일관되게 적용되었습니다.

  • src/shared/types/api/http-client.ts: 요청 인터셉터에서 config.headers?.isPublicApi 확인
  • src/features/join/api/user.ts, src/entities/event/api/event.ts 등: headers: { isPublicApi: true }로 일관 적용
src/features/dashboard/ui/PariticipantsList.tsx (3)

22-22: 구문 일관성 개선이 좋습니다.

후행 쉼표 추가로 코드 일관성이 향상되었습니다.


41-41: 코드 가독성 향상이 좋습니다.

다중 라인 체이닝을 단일 라인으로 리팩토링하여 가독성이 향상되었습니다. 로직은 동일하게 유지되었습니다.


69-69: UI 간격 조정이 적절합니다.

CSS gap 값 조정 (gap-15 md:gap-24에서 gap-3 md:gap-16으로)으로 더 적절한 간격을 제공합니다.

src/pages/dashboard/ui/EventInfoPage.tsx (2)

13-13: React Query 캐시 관리 도입이 좋습니다.

useQueryClient 도입으로 더 나은 상태 관리가 가능해졌습니다.

Also applies to: 16-16


63-63: UX 동작 변경 검증이 필요합니다.

성공 후 페이지 이동 대신 캐시 무효화로 변경되었습니다. 이로 인해 사용자가 동일한 페이지에 머무르게 되는데, 이것이 의도된 UX인지 확인이 필요합니다.

이벤트 정보 저장 후 사용자가 동일한 페이지에 머무르는 것이 올바른 UX 플로우인지 확인해주세요. 일반적으로 저장 후 대시보드나 목록 페이지로 이동하는 것이 예상되는 동작일 수 있습니다.

src/features/ticket/hooks/useTicketOptionHook.ts (3)

78-78: 코드 정리가 좋습니다.

불필요한 빈 줄 제거로 코드가 더 깔끔해졌습니다.


127-127: 캐시 무효화 로직 추가가 좋습니다.

티켓 옵션 삭제 시 attachedTicketOptions 쿼리도 무효화하여 데이터 일관성을 보장합니다.


129-137: 에러 처리 개선이 훌륭합니다.

특정 에러 메시지에 따른 맞춤형 알림 제공으로 사용자 경험이 크게 향상되었습니다. "이미 응답된 티켓 옵션입니다." 에러에 대한 명확한 안내는 특히 유용합니다.

src/features/event/ui/EventList.tsx (3)

7-7: 네비게이션 구현이 잘 되었습니다.

useNavigate 훅을 올바르게 임포트하고 초기화했습니다.

Also applies to: 21-21


70-78: 이벤트 필터링 로직이 일관성 있게 구현되었습니다.

종료된 이벤트를 제외하는 필터링 로직이 EventSliderSection.tsx와 일관성 있게 구현되었습니다. 오늘 날짜를 자정으로 설정하고 이벤트의 종료일(또는 시작일)과 비교하는 방식이 적절합니다.


82-98: 클릭 가능한 이벤트 카드 구현이 우수합니다.

각 이벤트 카드를 클릭했을 때 상세 페이지로 이동하는 기능이 올바르게 구현되었습니다. div 컨테이너에 onClick 핸들러를 추가하여 전체 카드 영역을 클릭 가능하게 만든 것이 좋은 UX 개선입니다.

src/shared/lib/formValidation.ts (1)

12-15: 전화번호 유효성 검사가 더 정확해졌습니다.

기존의 .min(1) 검사 대신 .refine() 메소드를 사용하여 정확히 13자 길이를 강제하는 것이 한국 휴대폰 번호 형식("010-1234-5678")에 적합합니다. 에러 메시지도 더 구체적이고 사용자 친화적입니다.

src/features/dashboard/ui/ParicipantCard.tsx (4)

20-21: 레이아웃 간격 개선이 잘 되었습니다.

요소 간 간격을 늘리고(gap-8 md:gap-20) 주문 ID에 왼쪽 마진을 추가하여 가독성이 향상되었습니다.


26-28: 구매 일자 표시 개선이 우수합니다.

구매 일자를 별도 div로 감싸서 멀티라인으로 표시하는 것이 가독성을 향상시킵니다. formatDateformatTime 함수의 활용도 적절합니다.


34-34: 버튼 렌더링이 간소화되었습니다.

불필요한 중괄호와 줄바꿈을 제거하여 코드가 더 깔끔해졌습니다.


36-36: 일관된 폰트 크기 적용이 우수합니다.

모든 상태 텍스트("완료", "미완료", "승인됨")에 동일한 반응형 폰트 크기 클래스(text-10 md:text-12)를 적용하여 UI 일관성이 향상되었습니다.

Also applies to: 38-38, 42-42, 44-44

src/features/home/ui/EventSliderSection.tsx (4)

29-36: 이벤트 필터링 로직이 일관성 있게 구현되었습니다.

EventList.tsx와 동일한 방식으로 종료된 이벤트를 필터링하는 로직이 구현되었습니다. 날짜를 자정으로 정규화하여 비교하는 방식이 적절합니다.


38-47: 이벤트 표시 로직이 올바르게 수정되었습니다.

filteredEvents를 사용하도록 슬라이싱 및 연결 로직이 적절히 수정되었습니다.


53-53: 빈 상태 조건이 올바르게 수정되었습니다.

filteredEvents.length를 확인하도록 변경한 것이 논리적으로 올바릅니다.


73-88: 레이아웃 일관성을 위한 placeholder 추가가 우수합니다.

단일 이벤트일 때 invisible placeholder 카드를 추가하여 레이아웃 일관성을 유지하는 것이 좋은 UX 개선입니다.

src/features/ticket/hooks/useTicketOptionDnD.ts (1)

51-58: 새로운 삭제 기능이 잘 구현되었습니다.

드래그 앤 드롭으로 옵션을 삭제하는 새로운 기능이 올바르게 구현되었습니다. ID 검증과 삭제 뮤테이션 호출이 적절합니다.

src/pages/event/ui/EventDetailsPage.tsx (3)

66-68: 검색 아이콘 상호작용성 개선이 훌륭합니다.

검색 아이콘에 클릭 이벤트와 커서 스타일을 추가하여 사용자 경험이 크게 개선되었습니다.


88-93: 인증 상태에 따른 조건부 렌더링이 적절합니다.

로그인하지 않은 사용자에게는 좋아요 버튼을 숨기는 것이 적절한 UX 개선입니다. useAuthStore를 활용한 구현도 올바릅니다.


142-150: 동적 참조 링크 렌더링으로 유연성이 향상되었습니다.

하드코딩된 정적 링크에서 referenceLinks 배열을 순회하는 동적 렌더링으로 변경되어 데이터 기반의 유연한 UI가 구현되었습니다.

src/features/event/ui/DatePicker.tsx (2)

29-35: 상태 초기화 로직이 개선되었습니다.

initialStartDateinitialEndDate로의 폴백 로직 추가로 더 유연한 초기화가 가능해졌습니다.


44-57: 함수형 상태 업데이트와 변수 네이밍 개선이 훌륭합니다.

prev => prev ?? value 패턴 사용으로 불필요한 상태 업데이트를 방지하고, startDateObjendDateObj로 변수명을 변경하여 상태 변수와의 섀도잉을 방지한 것이 좋은 개선입니다.

src/features/dashboard/ui/ResponsesList.tsx (2)

17-17: 스토어 구조분해할당 단순화가 좋습니다.

필요한 프로퍼티만 구조분해하여 코드가 더 명확해졌습니다.


25-60: 렌더링 로직 통합으로 가독성이 향상되었습니다.

별도의 renderTextResponses 함수를 제거하고 인라인으로 처리하여 코드 흐름이 더 명확해졌습니다. 텍스트 응답과 차트 렌더링이 조건부로 잘 처리되어 있습니다.

@github-actions
Copy link
Copy Markdown

Copy link
Copy Markdown
Member

@m3k0813 m3k0813 left a comment

Choose a reason for hiding this comment

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

LGTM👍

@Yejiin21 Yejiin21 merged commit 18363fa into develop May 31, 2025
2 checks passed
@Yejiin21 Yejiin21 deleted the fix/#151/event-error branch May 31, 2025 16:05
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

🛠️ BugFix 오류 해결 과정 기록 🪄 Refactoring 코드 리팩토링

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[fix] 이벤트 기능 에러 수정

2 participants