Skip to content

Feat(audience): 내 관람 공연 카드 클릭 시 공연 상세 페이지로 이동 구현#306

Open
jin-evergreen wants to merge 14 commits intodevelopfrom
feat/festival-card-list-routing/#304
Open

Feat(audience): 내 관람 공연 카드 클릭 시 공연 상세 페이지로 이동 구현#306
jin-evergreen wants to merge 14 commits intodevelopfrom
feat/festival-card-list-routing/#304

Conversation

@jin-evergreen
Copy link
Member

@jin-evergreen jin-evergreen commented Mar 6, 2026

📌 Summary

내 관람 공연 카드 클릭 시 해당 공연 상세 페이지로 이동하도록 했습니다.

📚 Tasks

  • FestivalList, FestivalCard 구조 개선
  • 핸들러 함수 추가
  • 타입 정리

🔍 Describe

내 관람 공연 카드 공연 클릭 시 공연 상세 페이지로 이동

우선, FestivalList 컴포넌트의 구조를 일부 변경했습니다. 기존 컴포넌트 내부에 있던 칩 상태 관련 로직을 모두 삭제하고, FestivalCard 내부에서 기존에 분리해둔 FestivalStatusGroup을 활용하여 구현했습니다. 추가로 기존에는 FestivalList 내부에서 컴파운드 컴포넌트를 직접 조립하여 사용하는 방식이었는데, 기존에 만들어둔 FestivalCard 컴포넌트를 활용하여 코드를 단순화하였습니다. 페이지 이동의 경우 handleCardClick 핸들러 함수를 정의하여 구현했습니다.

(26.03.09 기준, 코드 리뷰를 반영하여 FestivalList를 삭제하고 해당 로직을 페이지 컴포넌트에서 처리하고 있습니다!)

👀 To Reviewer

  • 추가로 수정할 부분이 있는지, 기능이 제대로 작동하는지 확인 부탁드립니다!
  • 현재 서버측과 필드명 통일 과정에 있으므로, 홈 화면 배너에서 디데이가 NaN으로 보이는 문제는 제외하고 확인해주세요!

이번 PR 범위와 관련된 타입 정리를 진행했어요. 현재 저희는 API 별로 필요한 타입을 정의하여 사용하고 있다보니, 동일한 Festival 관련 인터페이스와 페이지네이션 관련 인터페이스가 서로 다른 이름으로 각 파일에 중복적으로 정의되어 있어요. 이를 개선하기 위해 festival.ts 파일에서 핵심이 되는 타입(Festival, Pagination)을 한번에 관리하고, 각 API 파일에서는 import 해서 사용하도록 했어요.

이 경우, 이제 기존 파일들에는 해당 API에 맞는 응답 형식인 ~~~Response 인터페이스들만 남게 되는데, 이 또한 대부분의 파일에서 중복으로 사용되고 있어요. 우선 향후 API 별로 고유한 필드가 추가되었을 때 자유롭게 확장할 수 있도록 핵심 도메인 모델은 공유하고, 응답 형식은 독립적으로 개별 인터페이스를 유지했어요. 다만 개인적인 의견일 뿐 아니라 타입의 경우 이 부분 외에도 추후에 프로젝트 전반적으로 한번 손봐야 할 것 같아서, 좋은 아이디어가 있으시다면 알려주시면 감사하겠습니다!

📸 Screenshot

2026-03-07.12.49.42.mov

@jin-evergreen jin-evergreen requested a review from a team as a code owner March 6, 2026 17:35
@github-actions github-actions bot added ✨ Feature 새로운 기능 추가 🐻‍❄️ 진석 labels Mar 6, 2026
@coderabbitai
Copy link

coderabbitai bot commented Mar 6, 2026

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

Festival 및 Pagination 타입을 중앙화하고 관련 응답 타입을 FestivalsResponse로 통합했습니다. FestivalCard와 이를 사용하는 섹션/페이지는 새 Festival 타입으로 전환되고, 카드 클릭은 onCardClick(festivalId)로 변경되어 네비게이션과 키보드 접근성(Enter/Space, role/tabIndex)을 지원합니다. 일부 API 엔드포인트와 쿼리 함수(getPlannedFestivals, getUserNickname, FestivalList, my-events 쿼리 등)가 제거되고 GET_WISHLISTS/getWishlists로 통합되었습니다.

Changes

Cohort / File(s) Summary
타입 중앙화 및 응답 통합
apps/audience/src/shared/types/festival.ts, apps/audience/src/shared/types/home-response.ts, apps/audience/src/shared/types/viewed-festival.ts, apps/audience/src/shared/types/my-events-response.ts
Festival, FestivalStatus, PaginationResponse 추가. 지역별 페스티벌/페이징 타입 제거. 여러 응답 타입을 FestivalsResponse로 통합(필드명 casing 변경: ddaydDay).
API 엔드포인트/함수 변경
apps/audience/src/entities/festival/api/festival.ts, apps/audience/src/shared/constants/end-point.ts, apps/audience/src/entities/festival/model/query-options.ts, apps/audience/src/features/my-events/query.ts
GET_WISHLISTS 도입, GET_PLANNED_FESTIVALS·GET_MY_FESTIVALS_ALL 제거. getPlannedFestivals, getUserNickname 삭제, getWishlists 추가. 쿼리 옵션에서 호출 경로 교체 및 불필요 옵션(NICKNAME) 제거. 일부 파일(예: my-events/query.ts) 삭제.
UI 컴포넌트 리팩토링 — FestivalCard
apps/audience/src/widgets/home/components/festival-card/festival-card.tsx
prop 타입을 Festival로 통합, onClickonCardClick(festivalId)로 변경, showWishList/showStatus 옵션 추가(기본 true), STATUS_BY_TEXT 매핑 및 키보드 접근성(Enter/Space, role/tabIndex) 적용. wishlist 토글 로직 유지.
상위 컴포넌트 및 페이지 변경
apps/audience/src/widgets/home/components/festival-section/festival-section.tsx, apps/audience/src/widgets/my-events/festival-list.tsx, apps/audience/src/pages/home/home.tsx, apps/audience/src/pages/home/model/use-home-festivals.ts, apps/audience/src/pages/my-events/my-events.tsx
All/Upcoming 타입들을 Festival로 전환, upcomingFestivalsplannedFestivals 명칭 변경, FestivalCard의 새 시그니처로 네비게이션 로직(ROUTE.noticeList) 및 호출부 수정. FestivalList 삭제, my-events 페이지에서 FestivalCard 사용으로 대체.
경로 헬퍼 추가
apps/audience/src/shared/constants/path.ts
동적 경로 생성용 ROUTE.noticeList(eventId), ROUTE.noticeDetails, ROUTE.noticeEdit 헬퍼 추가. 기존 ROUTE_PATH 사용처 일부가 ROUTE로 변경.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~28 minutes

Suggested labels

♻️ Refactor

Suggested reviewers

  • eunkr82
  • Sohyunnnn

검토 포인트

Must

  • FestivalPaginationResponse를 임포트한 모든 파일에서 필드 매핑이 컴포넌트/훅 사용부와 일치하는지 확인해주세요(특히 period, status, dDay, wishList).
  • onClickonCardClick(festivalId: number)로 변경된 모든 호출부가 새로운 시그니처를 따르는지(인자 전달 누락/형식 오류) 점검해주세요.
  • festival-card의 키보드 이벤트(Enter/Space), role="button"/tabIndex 조합이 접근성 표준에 부합하는지(스페이스 기본 동작 차단 포함) 검증해주세요.
  • API 엔드포인트와 제네릭 타입 변경(AllFestivalsResponseFestivalsResponse)으로 인해 타입 불일치가 발생하지 않는지 확인해주세요.
  • 삭제된 쿼리/컴포넌트(getPlannedFestivals, getUserNickname, FestivalList, my-events query 파일 등)가 다른 의존성에서 더 이상 참조되지 않는지 확인해주세요.

Suggest

  • STATUS_BY_TEXT에 누락된 상태에 대한 명확한 폴백(로깅 또는 기본 상태) 처리를 고려해 주세요.
  • showWishList / showStatus 기본값(true)이 모든 사용처에서 의도한 동작인지 검토하거나 Prop 문서/주석을 추가해 주세요.
  • 네비게이션 변경(ROUTE.noticeList)과 키보드 핸들러에 대한 단위/통합 테스트 추가를 권장합니다.
  • API 응답 casing 변경(ddaydDay)이 서버와의 계약에 맞는지 확인하고, 필요시 계약 문서를 업데이트하거나 마이그레이션 주석을 남겨 주세요.
🚥 Pre-merge checks | ✅ 3
✅ Passed checks (3 passed)
Check name Status Explanation
Title check ✅ Passed PR 제목이 [type] 형식을 따르고 있으며, 48자로 50자 이내 요구사항을 충족하고, 카드 클릭 시 공연 상세 페이지 이동이라는 주요 변경사항을 명확하게 설명하고 있어요.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Description check ✅ Passed PR 설명이 변경 사항과 관련이 있으며, 내 관람 공연 카드 클릭 시 상세 페이지로 이동하는 기능과 타입 정리 작업을 명확히 설명하고 있습니다.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.


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.

Copy link

@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: 7

🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@apps/audience/src/shared/types/home-response.ts`:
- Line 10: The types use inconsistent naming for the same field:
UpcomingFestivalItem defines dday while Festival defines dDay, and
use-home-festivals.ts currently maps upcomingFestivalData.dday → dDay; align
these by choosing one canonical field name (prefer camelCase dDay) and update
the type declaration (UpcomingFestivalItem) and any places that produce/consume
the API to use dDay, or if the API returns dday, keep the type as dday and
centralize a single mapping in use-home-festivals.ts; ensure the mapping and the
types (UpcomingFestivalItem, Festival) and usages (upcomingFestivalData.dday,
references to dDay) are consistently updated together.
- Line 1: The import currently brings in only type definitions (Festival,
PaginationResponse) from './festival'; change it to a type-only import by using
"import type" for Festival and PaginationResponse so the compiler/tree-shaking
knows these are types (update the import statement that references Festival and
PaginationResponse in home-response.ts).

In `@apps/audience/src/shared/types/my-events-response.ts`:
- Line 1: Change the plain import of Festival and PaginationResponse to a
type-only import: replace "import { Festival, PaginationResponse } from
'./festival';" with a type import so only types are imported (e.g., "import type
{ Festival, PaginationResponse } from './festival';") to match the pattern used
in viewed-festival.ts and avoid bundling runtime imports.

In `@apps/audience/src/shared/types/viewed-festival.ts`:
- Line 1: The import in viewed-festival.ts currently brings in Festival and
PaginationResponse as values; change it to a type-only import by using "import
type" for Festival and PaginationResponse so they are erased at runtime and
remove the runtime dependency on './festival'—update the statement that imports
Festival and PaginationResponse to use type-only imports (referencing Festival
and PaginationResponse) so bundlers/tree-shaking and runtime remain optimal.

In `@apps/audience/src/widgets/home/components/festival-card/festival-card.tsx`:
- Line 9: The import currently brings in the Festival symbol as a value; since
Festival is only used as a TypeScript type, change the import to a type-only
import to avoid residual runtime import and satisfy ESLint: replace the existing
import of Festival with a type import (import type { Festival } from
'@shared/types/festival') wherever Festival is referenced in festival-card.tsx
(e.g., props, interfaces, or type annotations) and ensure no runtime usages of
Festival remain.

In
`@apps/audience/src/widgets/home/components/festival-section/festival-section.tsx`:
- Line 12: 현재 Festival 타입은 값이 아니라 타입 주석으로만 사용되므로 import를 타입 전용으로 바꿔 주세요:
Festival 심볼을 가져오는 import 문을 일반 import에서 "import type { Festival } from
'@shared/types/festival'" 형식으로 변경하고 컴포넌트 festival-section.tsx 내에서 값으로 사용되는 곳이
없는지(예: new, instanceof 등) 확인해 불필요한 런타임 의존성이 생기지 않게 해주세요.

In `@apps/audience/src/widgets/my-events/festival-list.tsx`:
- Line 6: Replace the value import with a type-only import for the Festival
type: change the existing import statement that brings in Festival to use
"import type { Festival }" (so the module only imports the type and not runtime
code); update the import line where Festival is referenced in festival-list
(e.g., the import of Festival at the top of the file) to "import type { Festival
} from '@shared/types/festival'".

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro

Run ID: c3da3818-e095-4d98-bf74-9c7ea78a0018

📥 Commits

Reviewing files that changed from the base of the PR and between 0b74c7e and 68d72a4.

📒 Files selected for processing (8)
  • apps/audience/src/entities/festival/api/festival.ts
  • apps/audience/src/shared/types/festival.ts
  • apps/audience/src/shared/types/home-response.ts
  • apps/audience/src/shared/types/my-events-response.ts
  • apps/audience/src/shared/types/viewed-festival.ts
  • apps/audience/src/widgets/home/components/festival-card/festival-card.tsx
  • apps/audience/src/widgets/home/components/festival-section/festival-section.tsx
  • apps/audience/src/widgets/my-events/festival-list.tsx

Copy link

@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: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@apps/audience/src/widgets/home/components/festival-card/festival-card.tsx`:
- Around line 13-18: Make onCardClick optional on the FestivalCardProps
interface by changing its type to optional (onCardClick?: (festivalId: number)
=> void) and update the FestivalCard component to safely call the handler using
optional chaining (e.g., onCardClick?.(festival.id)) wherever it is invoked;
ensure any internal references to onCardClick in FestivalCard and related
handlers (props type FestivalCardProps, FestivalCard component render/click
handlers) account for the prop possibly being undefined.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro

Run ID: cdcf37bc-00fb-4d4e-8e43-1fa1bfa3e75b

📥 Commits

Reviewing files that changed from the base of the PR and between 68d72a4 and 9f6614c.

📒 Files selected for processing (7)
  • apps/audience/src/entities/festival/api/festival.ts
  • apps/audience/src/shared/types/home-response.ts
  • apps/audience/src/shared/types/my-events-response.ts
  • apps/audience/src/shared/types/viewed-festival.ts
  • apps/audience/src/widgets/home/components/festival-card/festival-card.tsx
  • apps/audience/src/widgets/home/components/festival-section/festival-section.tsx
  • apps/audience/src/widgets/my-events/festival-list.tsx

Copy link

@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.

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
apps/audience/src/widgets/home/components/festival-section/festival-section.tsx (1)

66-76: 🧹 Nitpick | 🔵 Trivial

Suggest: handleCardClickuseCallback으로 감싸는 것을 고려해 주세요.

현재 구현도 동작에 문제는 없지만, FestivalCardmemo로 감싸져 있거나 리스트가 길어질 경우 불필요한 리렌더링을 방지할 수 있어요.

♻️ 제안하는 수정
+import { useCallback } from 'react';
 import { generatePath, useNavigate } from 'react-router';
 
 // ...
 
-  const handleCardClick = (festivalId: number) => {
+  const handleCardClick = useCallback((festivalId: number) => {
     navigate(
       generatePath(ROUTE_PATH.NOTICE_LIST, {
         eventId: String(festivalId),
       }),
     );
-  };
+  }, [navigate]);
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In
`@apps/audience/src/widgets/home/components/festival-section/festival-section.tsx`
around lines 66 - 76, handleCardClick이 매 렌더마다 새 함수로 생성되어 FestivalCard(memo일
경우)들의 불필요한 리렌더를 유발할 수 있으니 handleCardClick을 React의 useCallback으로 감싸서 메모이제이션하세요;
FestivalSection 컴포넌트 안의 handleCardClick을 useCallback(() => { ... }, [/* 여기에 함수에서
참조하는 state/props, 예: navigate, setSelectedFestival 등 */]) 형태로 변경하고 FestivalCard로
전달되는 모든 외부 의존값들을 의존성 배열에 정확히 포함시켜 리렌더링을 최소화하세요.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Outside diff comments:
In
`@apps/audience/src/widgets/home/components/festival-section/festival-section.tsx`:
- Around line 66-76: handleCardClick이 매 렌더마다 새 함수로 생성되어 FestivalCard(memo일 경우)들의
불필요한 리렌더를 유발할 수 있으니 handleCardClick을 React의 useCallback으로 감싸서 메모이제이션하세요;
FestivalSection 컴포넌트 안의 handleCardClick을 useCallback(() => { ... }, [/* 여기에 함수에서
참조하는 state/props, 예: navigate, setSelectedFestival 등 */]) 형태로 변경하고 FestivalCard로
전달되는 모든 외부 의존값들을 의존성 배열에 정확히 포함시켜 리렌더링을 최소화하세요.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro

Run ID: 294d8505-0737-458f-8c50-b10300b1d12c

📥 Commits

Reviewing files that changed from the base of the PR and between 9f6614c and 51789eb.

📒 Files selected for processing (5)
  • apps/audience/src/entities/festival/api/festival.ts
  • apps/audience/src/pages/home/home.tsx
  • apps/audience/src/pages/home/model/use-home-festivals.ts
  • apps/audience/src/shared/types/home-response.ts
  • apps/audience/src/widgets/home/components/festival-section/festival-section.tsx

@jin-evergreen jin-evergreen changed the title Feat(audience): 내 관람 공연 카드 클릭 시 공연 상세 페이지로 라우팅 트리거 Feat(audience): 내 관람 공연 카드 클릭 시 공연 상세 페이지로 이동 구현 Mar 7, 2026
Copy link
Contributor

@Sohyunnnn Sohyunnnn left a comment

Choose a reason for hiding this comment

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

수고많으셨습니다 !!! 👍
코멘트 몇 개 적어두었으니, 한 번 확인 부탁드립니다 :)

Copy link

@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: 3

🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@apps/audience/src/entities/festival/api/festival.ts`:
- Around line 10-12: The FestivalsResponse and UpcomingFestivalResponse types
currently imported from `@shared/types/home-response` bleed page-specific
semantics into the festival entity API; create a festival-specific response
types file (e.g., festival-response.ts) next to the festival entity/API,
move/define FestivalsResponse and UpcomingFestivalResponse there, update imports
in functions like getAllFestivals and getWishlists to import from the new
festival-response module, and remove the dependency on
`@shared/types/home-response` so the entity layer no longer depends on a
page-scoped module.

In `@apps/audience/src/shared/constants/path.ts`:
- Around line 16-18: The ROUTE object currently only exposes ROUTE.noticeList
which builds the notices path; add an additional route builder (e.g.,
ROUTE.festivalDetail or ROUTE.eventDetail) to support navigating to the
event/festival detail page by returning `/events/${eventId}` and keep consistent
naming with noticeList, or confirm that noticeList is the intended single route
and leave as-is; update any usages to the new ROUTE.<name> function to preserve
consistency when more routes are added.

In
`@apps/audience/src/widgets/home/components/festival-section/festival-section.tsx`:
- Around line 11-12: FestivalSection currently imports ROUTE and calls navigate
(via useNavigate) inside the widget, coupling UI to routing; remove direct
routing from FestivalSection and instead accept an onFestivalClick prop (e.g.,
onFestivalClick: (festival: Festival) => void) and call that when a card is
clicked; move useNavigate, ROUTE and the navigate(ROUTE.noticeList(...)) logic
up to the parent/feature/page so the parent passes a handler that performs
navigate(ROUTE.noticeList(...)) — update all internal handlers in
FestivalSection (card click callbacks around FestivalSection,
festivalCardClickHandler, etc.) to invoke onFestivalClick and delete imports of
useNavigate and ROUTE from the widget.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro

Run ID: bed53fed-abfb-431e-b5eb-075ef3136dd5

📥 Commits

Reviewing files that changed from the base of the PR and between 51789eb and 26c4e20.

📒 Files selected for processing (13)
  • apps/audience/src/entities/festival/api/festival.ts
  • apps/audience/src/entities/festival/model/query-options.ts
  • apps/audience/src/features/my-events/query.ts
  • apps/audience/src/pages/home/home.tsx
  • apps/audience/src/pages/home/model/use-home-festivals.ts
  • apps/audience/src/pages/my-events/my-events.tsx
  • apps/audience/src/shared/constants/end-point.ts
  • apps/audience/src/shared/constants/path.ts
  • apps/audience/src/shared/types/festival.ts
  • apps/audience/src/shared/types/home-response.ts
  • apps/audience/src/shared/types/my-events-response.ts
  • apps/audience/src/widgets/home/components/festival-section/festival-section.tsx
  • apps/audience/src/widgets/my-events/festival-list.tsx
💤 Files with no reviewable changes (3)
  • apps/audience/src/shared/types/my-events-response.ts
  • apps/audience/src/features/my-events/query.ts
  • apps/audience/src/widgets/my-events/festival-list.tsx

Comment on lines +10 to 12
FestivalsResponse,
UpcomingFestivalResponse,
UpcomingFestivalsResponse,
} from '@shared/types/home-response';
Copy link

Choose a reason for hiding this comment

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

🛠️ Refactor suggestion | 🟠 Major

Suggest: FestivalsResponsehome-response 밖으로 분리해 주세요.

getAllFestivalsgetWishlists는 공용 festival entity API인데, 응답 타입이 @shared/types/home-response에 머물면 home이라는 페이지 의미가 entity 레이어로 스며듭니다. 이번처럼 재사용 범위가 넓어진 타입은 festival 전용 응답 타입 파일로 옮기거나 API 근처로 이동하는 편이 의존성 방향이 더 자연스럽습니다.

As per coding guidelines apps/**/src/entities/**: Entity 레이어예요. - 단일 도메인 개념을 표현해요. - 페이지/라우트 개념은 금지예요.

Also applies to: 15-18

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@apps/audience/src/entities/festival/api/festival.ts` around lines 10 - 12,
The FestivalsResponse and UpcomingFestivalResponse types currently imported from
`@shared/types/home-response` bleed page-specific semantics into the festival
entity API; create a festival-specific response types file (e.g.,
festival-response.ts) next to the festival entity/API, move/define
FestivalsResponse and UpcomingFestivalResponse there, update imports in
functions like getAllFestivals and getWishlists to import from the new
festival-response module, and remove the dependency on
`@shared/types/home-response` so the entity layer no longer depends on a
page-scoped module.

Copy link

@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: 1

♻️ Duplicate comments (1)
apps/audience/src/pages/home/home.tsx (1)

32-34: ⚠️ Potential issue | 🟠 Major

Must: 현재 카드 클릭 시 공연 상세가 아니라 공지 목록으로 이동합니다.

PR 목표가 “공연 상세 페이지로 이동”이라면, 여기서 ROUTE.noticeList(festivalId)로 보내는 건 목적지 자체가 다릅니다. 지금 구현은 /events/{id}/notices 이동이므로 상세 화면 요구사항을 충족하지 못합니다. 상세 페이지가 맞다면 전용 detail route/builder로 바꾸셔야 하고, 반대로 공지 목록이 의도라면 PR 설명과 사용자 기대를 같이 정리해 주시는 편이 좋겠습니다.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@apps/audience/src/pages/home/home.tsx` around lines 32 - 34, The click
handler handleCardClick currently navigates to ROUTE.noticeList(festivalId) (the
notices list) but the PR requires navigating to the event detail page; update
the navigation target in handleCardClick to the event detail route builder
(e.g., ROUTE.eventDetail(festivalId) or the app’s equivalent detail route
function) so clicking a card opens the performance detail page, and, if notices
was intended, update PR description to reflect that behavior instead.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@apps/audience/src/shared/constants/path.ts`:
- Around line 20-21: The noticeEdit path builder (noticeEdit) is not registered
in the router (ROUTE_PATH.NOTICE_EDIT is not mapped to any route) and will lead
to NotFound; either remove or hide the noticeEdit builder from the public
constants until a corresponding edit screen exists, or add a route entry that
mounts the edit page and maps ROUTE_PATH.NOTICE_EDIT to the edit component
(ensure the route uses the same URL pattern
`/events/:eventId/notices/:noticeId/edit` and the component name used in
routes.tsx matches the intended edit screen).

---

Duplicate comments:
In `@apps/audience/src/pages/home/home.tsx`:
- Around line 32-34: The click handler handleCardClick currently navigates to
ROUTE.noticeList(festivalId) (the notices list) but the PR requires navigating
to the event detail page; update the navigation target in handleCardClick to the
event detail route builder (e.g., ROUTE.eventDetail(festivalId) or the app’s
equivalent detail route function) so clicking a card opens the performance
detail page, and, if notices was intended, update PR description to reflect that
behavior instead.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro

Run ID: a43d3071-a1a3-4efa-a738-061d194a0f4e

📥 Commits

Reviewing files that changed from the base of the PR and between 26c4e20 and 2089485.

📒 Files selected for processing (3)
  • apps/audience/src/pages/home/home.tsx
  • apps/audience/src/shared/constants/path.ts
  • apps/audience/src/widgets/home/components/festival-section/festival-section.tsx

Copy link
Contributor

@Sohyunnnn Sohyunnnn left a comment

Choose a reason for hiding this comment

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

수고 많으셨습니다 💪🏻💪🏻

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Feature] 내 관람 공연 카드 공연 상세 페이지로 라우팅 트리거

2 participants