Conversation
|
""" Walkthrough이 변경사항은 프로젝트의 디렉토리 구조를 대대적으로 리팩토링하고, 타입 및 목업 데이터 파일을 정리하며, 여러 컴포넌트와 훅, API 모듈의 import 경로를 일관성 있게 수정합니다. 일부 기능 파일이 새 위치로 이동하거나 통합되었고, 불필요한 타입 및 목업 데이터 파일이 삭제되었습니다. Changes
Changes Table
Sequence Diagram(s)sequenceDiagram
participant User
participant BookmarkHook
participant ReactQueryCache
participant API
User->>BookmarkHook: useCreateBookmark(eventId)
BookmarkHook->>ReactQueryCache: Optimistic update (bookmarked=true)
BookmarkHook->>API: createBookmark(eventId)
API-->>BookmarkHook: 응답(성공/실패)
BookmarkHook->>ReactQueryCache: rollback or invalidate query
sequenceDiagram
participant User
participant HostDashboardHook
participant API
User->>HostDashboardHook: useGetEventHook()
HostDashboardHook->>API: getHostDashboard(eventId)
API-->>HostDashboardHook: HostDashboardResponse 반환
Possibly related PRs
Suggested labels
Poem
Tip ⚡️ Faster reviews with caching
Enjoy the performance boost—your workflow just got faster. ✨ Finishing Touches
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. 🪧 TipsChatThere are 3 ways to chat with CodeRabbit:
SupportNeed help? Create a ticket on our support page 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)
Other keywords and placeholders
CodeRabbit Configuration File (
|
There was a problem hiding this comment.
Actionable comments posted: 6
🔭 Outside diff range comments (4)
src/features/dashboard/model/store/ParticipantStore.tsx (2)
4-12:⚠️ Potential issue인터페이스 이름 오타 수정 필요 (
ParicipantState→ParticipantState)
ParicipantState의 ‘t’가 빠져 있어 가독성과 일관성을 해칩니다. 인터페이스와create<...>제네릭 타입 모두ParticipantState로 수정을 권장합니다.-interface ParicipantState { +interface ParticipantState {
65-73: 🛠️ Refactor suggestion함수명과 동작 불일치:
toggleApproveParticipant→approveParticipant검토
현재 구현은 토글이 아닌 승인(true로 고정)만 처리합니다. 동작 의도가 ‘승인’이라면 함수명을approveParticipant로 변경하거나, 토글 기능이 필요하다면!state.approvedParticipants[orderNumber]형태로 구현을 보완하세요.src/features/event/ui/LinkInput.tsx (1)
77-77:⚠️ Potential issueautoFocus 조건 로직 오류
타이틀 입력창의autoFocus속성에 잘못된 비교식이 들어가 있어 절대true가 되지 않습니다. 아래와 같이 수정하세요.- autoFocus={activeInput.field === link.title && activeInput.field === 'title'} + autoFocus={activeInput.field === 'title'}src/pages/dashboard/ui/ticket/TIcketConfirmPage.tsx (1)
52-61:⚠️ Potential issue함수 이름에 오타가 있습니다.
cancleOrderTicket함수 이름에 오타가 있습니다. 올바른 이름은cancelOrderTicket이어야 합니다. 이는 함수 내부에서 사용하는 API 함수 이름(cancelTickets)과도 일관성을 유지하는 것이 좋습니다.-const cancleOrderTicket = async (orderIds: number[]) => { +const cancelOrderTicket = async (orderIds: number[]) => {그리고 함수 호출 부분(105-109줄)에서도 같은 이름으로 수정해야 합니다:
- cancleOrderTicket(orderIds).then(() => { + cancelOrderTicket(orderIds).then(() => {
🧹 Nitpick comments (14)
src/features/event/ui/LinkInput.tsx (1)
3-5: 에셋 폴더 명칭 일관성 검토 제안
현재 SVG 에셋을event-manage/creation디렉토리에서 불러오고 있는데, FSD 구조상event폴더로 이동시키거나, 에셋 경로를 재구조화하는 것이 유지보수에 도움이 됩니다.src/features/event/ui/EventTag.tsx (1)
3-3: 상대 경로 수정 확인:MultilineTextField컴포넌트의 import 경로가 리팩토링된 디렉토리 구조에 맞게 올바르게 업데이트되었습니다.
tsconfig의 path alias를 활용해 상대 경로 깊이를 줄이는 방안을 고려하면 유지보수성과 가독성이 더욱 향상될 수 있습니다.src/pages/event/ui/create-event/EventTitlePage.tsx (1)
3-5: 상대 경로 import 수정이 적절합니다
UnderlineTextField,useFunnelState,EventTitleFormData및eventTitleZodValidation의 import 경로가 리팩토링된 디렉토리 구조에 맞게 정확히 업데이트되었습니다.상대 경로가 깊어 유지보수가 어려울 수 있으므로,
tsconfig.json의 path alias를 도입하여 절대 경로 import 사용을 고려해보세요.src/features/event/ui/ShareEventModal.tsx (1)
1-4: 자산 및 유틸리티 import 경로 수정
profile,link,kakao이미지와shareToKakao함수의 import 경로가 리팩토링된 디렉토리 구조에 맞춰 업데이트되었습니다.이미지와 유틸 경로가 깊게 중첩되어 있어 가독성이 떨어질 수 있습니다. path alias 활용 또는 웹팩 alias 설정을 통해 경로를 단순화해보세요.
src/widgets/dashboard/ui/ticket/SelectTicketInfo.tsx (2)
1-3: 상대 경로 import 경로 업데이트
TextButton및ReadTicketResponse의 import 경로가 리팩토링된 구조에 맞게 수정되었습니다.상대 경로가 깊어 보이므로, 절대 경로 alias 도입을 고려해보세요.
19-19: JSX 간소화 및 접근성 제안
TextButtonJSX가 한 줄로 간결하게 개선되었습니다.버튼 레이블로 단순
">"대신 아이콘 컴포넌트를 사용하거나,aria-label속성을 추가해 접근성을 강화하는 것을 권장드립니다.src/widgets/event/ui/TicketInfo.tsx (1)
49-49: 디버깅용 console.log 제거 검토
console.log('API 응답:', response);는 프로덕션 환경에서 불필요할 수 있습니다. 로깅 수준을 관리하거나 삭제를 고려하세요.src/features/dashboard/hook/useHostDashboardHook.ts (1)
1-17: useGetEventHook 함수가 적절하게 구현되었습니다.이전에
useEventHook.ts에서 제거된 기능을 대체하는 새로운 훅입니다. URL 파라미터에서 이벤트 ID를 추출하고, React Query를 사용하여 호스트 대시보드 데이터를 가져오는 기능을 적절하게 구현했습니다. 이 변경은 FSD 방법론에 맞게 파일을 재구성하는 리팩토링의 일부입니다.추가 고려사항:
- 오류 처리 로직이 명시적으로 추가되면 더 좋을 것 같습니다.
enabled옵션을 추가하여eventId가 유효할 때만 쿼리가 실행되도록 하는 것이 안전할 수 있습니다.const { data: eventInfo } = useQuery<HostDashboardResponse>({ queryKey: ['eventInfo', eventId], queryFn: () => getHostDashboard(eventId), + enabled: !isNaN(eventId) && eventId > 0, + onError: (error) => { + console.error('대시보드 데이터 로딩 중 오류 발생:', error); + } });src/shared/ui/backgrounds/TicketOptionLayout.tsx (2)
26-36: 불필요한 블록문 삭제 및 주석 처리 방식 개선
Biome 경고에 따라 빈 블록을 제거하고, TODO 주석은 인라인 주석으로 남기면 가독성이 좋아집니다.- const handleNextPage = () => { - if (isLastPage) { - { - /* 데이터 전송 추가 */ - } - } else { - setCurrentPage(currentPage + 1); - { - /* 데이터 전송 추가 */ - } - } - }; + const handleNextPage = () => { + if (isLastPage) { + // TODO: 데이터 전송 추가 + } else { + setCurrentPage(currentPage + 1); + // TODO: 데이터 전송 추가 + } + };🧰 Tools
🪛 Biome (1.9.4)
[error] 32-34: This block statement doesn't serve any purpose and can be safely removed.
Standalone block statements without any block-level declarations are redundant in JavaScript and can be removed to simplify the code.
Safe fix: Remove redundant block.(lint/complexity/noUselessLoneBlockStatements)
51-53: 인디케이터 이미지에 alt 속성 추가
접근성 향상을 위해img태그에 대체 텍스트를 넣어주세요.- <img key={index} src={index + 1 === currentPage ? active : inactive} className="object-contain" /> + <img + key={index} + src={index + 1 === currentPage ? active : inactive} + alt={index + 1 === currentPage ? '현재 페이지 인디케이터' : '비활성 페이지 인디케이터'} + className="object-contain" + />src/features/ticket/hooks/useTicketHook.ts (2)
13-23:useCreateTicket훅 UX 개선 제안
현재onSuccess와onError에서alert및 전체 페이지 리로드(window.location.reload())를 사용하고 있는데,
React Query의queryClient.invalidateQueries를 활용해 리로드 없이 데이터만 갱신하는 방향을 고려하면 사용자 경험과 성능이 개선됩니다.onSuccess: () => { - alert('티켓이 성공적으로 저장되었습니다.'); - window.location.reload(); + alert('티켓이 성공적으로 저장되었습니다.'); + queryClient.invalidateQueries(['tickets', ticketData.eventId]); },
26-36:useDeleteTicket훅 UX 개선 제안
useCreateTicket와 동일하게 전체 리로드 대신invalidateQueries를 사용해 변경된 티켓 목록만 갱신하도록 리팩토링을 권장합니다.src/pages/dashboard/ui/ticket/TIcketConfirmPage.tsx (1)
100-110: onClick 핸들러 포맷팅이 개선되었습니다.이전의 한 줄짜리 체인 프로미스에서 명시적인 블록이 있는 다중 라인 화살표 함수로 변경되었습니다. 이렇게 하면 코드가 더 명확해지고 디버깅이 쉬워집니다.
하지만 여기서도
cancleOrderTicket함수 이름의 오타를 수정해야 합니다.src/features/dashboard/ui/ResponsesList.tsx (1)
24-31: 옵셔널 체이닝 사용 권장정적 분석 도구가 옵셔널 체이닝을 사용하도록 제안하고 있습니다.
response && response[0]부분을 옵셔널 체이닝으로 변경하면 코드가 더 간결해집니다.- const queryOptions = - response && response[0] - ? Object.keys(response[0]) - .filter(key => key !== 'id' && key !== 'selectedOptions') - .map(key => ({ - v1: fieldMap[key] || key, - v2: '', - })) - : []; + const queryOptions = response?.[0] + ? Object.keys(response[0]) + .filter(key => key !== 'id' && key !== 'selectedOptions') + .map(key => ({ + v1: fieldMap[key] || key, + v2: '', + })) + : [];🧰 Tools
🪛 Biome (1.9.4)
[error] 24-24: Change to an optional chain.
Unsafe fix: Change to an optional chain.
(lint/complexity/useOptionalChain)
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
⛔ Files ignored due to path filters (1)
yarn.lockis excluded by!**/yarn.lock,!**/*.lock
📒 Files selected for processing (91)
package.json(1 hunks)src/app/routes/Router.tsx(2 hunks)src/entities/event/api/eventDetail.ts(1 hunks)src/entities/event/hook/useEventHook.ts(1 hunks)src/entities/event/hook/useEventListHook.ts(1 hunks)src/features/bookmark/hook/useBookmarkHook.ts(1 hunks)src/features/bookmark/model/useBookmarkHook.ts(0 hunks)src/features/dashboard/api/event.ts(0 hunks)src/features/dashboard/api/hostDashboard.ts(1 hunks)src/features/dashboard/api/mail.ts(1 hunks)src/features/dashboard/hook/useEmailHook.ts(1 hunks)src/features/dashboard/hook/useEventHook.ts(1 hunks)src/features/dashboard/hook/useHostDashboardHook.ts(1 hunks)src/features/dashboard/hook/useParticipants.ts(1 hunks)src/features/dashboard/model/ResponseStore.tsx(0 hunks)src/features/dashboard/model/participantInformation.ts(0 hunks)src/features/dashboard/model/store/ParticipantStore.tsx(1 hunks)src/features/dashboard/model/store/ResponseStore.tsx(1 hunks)src/features/dashboard/ui/EmailInput.tsx(3 hunks)src/features/dashboard/ui/ParicipantCard.tsx(1 hunks)src/features/dashboard/ui/PariticipantsList.tsx(1 hunks)src/features/dashboard/ui/ResponsesList.tsx(1 hunks)src/features/dashboard/ui/SelectedResponseList.tsx(1 hunks)src/features/event-manage/event-create/model/event.ts(0 hunks)src/features/event-manage/event-list/model/eventList.ts(0 hunks)src/features/event/api/event.ts(1 hunks)src/features/event/api/host.ts(1 hunks)src/features/event/api/presignedUrl.ts(1 hunks)src/features/event/hooks/useEventHook.ts(1 hunks)src/features/event/hooks/useHostHook.ts(1 hunks)src/features/event/hooks/usePresignedUrlHook.ts(1 hunks)src/features/event/model/event.ts(1 hunks)src/features/event/ui/EventCategory.tsx(1 hunks)src/features/event/ui/EventFunnel.tsx(1 hunks)src/features/event/ui/EventList.tsx(1 hunks)src/features/event/ui/EventTag.tsx(1 hunks)src/features/event/ui/EventType.tsx(1 hunks)src/features/event/ui/FileUpload.tsx(1 hunks)src/features/event/ui/LinkInput.tsx(1 hunks)src/features/event/ui/ShareEventModal.tsx(1 hunks)src/features/home/hooks/useEventHook.ts(1 hunks)src/features/home/ui/EventSliderSection.tsx(1 hunks)src/features/payment/ui/TicketOption.tsx(1 hunks)src/features/ticket/api/order.ts(1 hunks)src/features/ticket/api/ticket.ts(1 hunks)src/features/ticket/hooks/useTicketHook.ts(1 hunks)src/features/ticket/model/TicketContext.tsx(3 hunks)src/pages/bookmark/ui/BookmarkPage.tsx(1 hunks)src/pages/dashboard/ui/DashbaordPage.tsx(1 hunks)src/pages/dashboard/ui/EventDetailPage.tsx(1 hunks)src/pages/dashboard/ui/EventInfoPage.tsx(1 hunks)src/pages/dashboard/ui/EventTagPage.tsx(1 hunks)src/pages/dashboard/ui/ParticipantsMangementPage.tsx(2 hunks)src/pages/dashboard/ui/ResponsesManagementPage.tsx(1 hunks)src/pages/dashboard/ui/mail/EmailEditPage.tsx(3 hunks)src/pages/dashboard/ui/mail/EmailPage.tsx(2 hunks)src/pages/dashboard/ui/mail/MailBoxPage.tsx(3 hunks)src/pages/dashboard/ui/ticket/TIcketConfirmPage.tsx(6 hunks)src/pages/dashboard/ui/ticket/TicketCreatePage.tsx(8 hunks)src/pages/dashboard/ui/ticket/TicketListPage.tsx(1 hunks)src/pages/event-manage/ui/EventInfoPage.tsx(0 hunks)src/pages/event/ui/AllEventsPage.tsx(1 hunks)src/pages/event/ui/CategoryPage.tsx(1 hunks)src/pages/event/ui/EventDetailsPage.tsx(1 hunks)src/pages/event/ui/create-event/EventInfoPage.tsx(1 hunks)src/pages/event/ui/create-event/EventOrganizerInfoPage.tsx(1 hunks)src/pages/event/ui/create-event/EventPeriodPage.tsx(1 hunks)src/pages/event/ui/create-event/EventTagPage.tsx(1 hunks)src/pages/event/ui/create-event/EventTitlePage.tsx(1 hunks)src/pages/event/ui/create-event/EventTypePage.tsx(1 hunks)src/pages/event/ui/create-event/FunnelPage.tsx(1 hunks)src/pages/event/ui/host/HostCreationPage.tsx(1 hunks)src/pages/event/ui/host/HostSelectionPage.tsx(1 hunks)src/pages/search/ui/SearchPage.tsx(1 hunks)src/shared/hooks/useInfiniteScroll.ts(1 hunks)src/shared/types/dashboardType.ts(0 hunks)src/shared/types/eventCardType.ts(0 hunks)src/shared/types/filterDataType.ts(0 hunks)src/shared/types/funnelType.ts(1 hunks)src/shared/types/hostInfoType.ts(0 hunks)src/shared/types/mailInfoType.ts(0 hunks)src/shared/types/ticketType.ts(0 hunks)src/shared/ui/backgrounds/DashboardLayout.tsx(1 hunks)src/shared/ui/backgrounds/TicketOptionLayout.tsx(1 hunks)src/widgets/dashboard/ui/email/EmailDeleteModal.tsx(1 hunks)src/widgets/dashboard/ui/email/EmailModal.tsx(4 hunks)src/widgets/dashboard/ui/email/SelectTicketModal.tsx(3 hunks)src/widgets/dashboard/ui/email/SentMailCard.tsx(3 hunks)src/widgets/dashboard/ui/ticket/SelectTicketInfo.tsx(2 hunks)src/widgets/dashboard/ui/ticket/TicketItem.tsx(2 hunks)src/widgets/event/ui/TicketInfo.tsx(3 hunks)
💤 Files with no reviewable changes (13)
- src/features/dashboard/model/participantInformation.ts
- src/features/event-manage/event-create/model/event.ts
- src/features/dashboard/api/event.ts
- src/shared/types/dashboardType.ts
- src/features/event-manage/event-list/model/eventList.ts
- src/shared/types/filterDataType.ts
- src/shared/types/ticketType.ts
- src/features/dashboard/model/ResponseStore.tsx
- src/shared/types/hostInfoType.ts
- src/pages/event-manage/ui/EventInfoPage.tsx
- src/shared/types/mailInfoType.ts
- src/shared/types/eventCardType.ts
- src/features/bookmark/model/useBookmarkHook.ts
🧰 Additional context used
🧬 Code Graph Analysis (17)
src/widgets/dashboard/ui/ticket/SelectTicketInfo.tsx (1)
src/features/ticket/model/ticket.ts (1)
ReadTicketResponse(21-27)
src/features/dashboard/api/hostDashboard.ts (1)
src/shared/types/api/http-client.ts (1)
axiosClient(6-13)
src/pages/dashboard/ui/mail/EmailEditPage.tsx (3)
src/features/dashboard/hook/useParticipants.ts (1)
useParticipants(9-27)src/features/dashboard/api/mail.ts (1)
editEmail(31-34)src/features/dashboard/hook/useEmailHook.ts (1)
useEditEmail(42-57)
src/pages/bookmark/ui/BookmarkPage.tsx (1)
src/features/bookmark/hook/useBookmarkHook.ts (1)
useBookmarks(6-11)
src/widgets/dashboard/ui/email/SentMailCard.tsx (1)
src/shared/lib/date.ts (2)
formatDate(1-9)formatTime(10-15)
src/features/ticket/api/ticket.ts (2)
src/features/ticket/model/ticket.ts (2)
CreateTicketRequest(1-12)ReadTicketResponse(21-27)src/shared/types/api/http-client.ts (1)
axiosClient(6-13)
src/features/event/model/event.ts (1)
src/shared/types/baseEventType.ts (1)
BaseEvent(5-24)
src/features/dashboard/ui/EmailInput.tsx (1)
src/features/dashboard/model/store/EmailStore.tsx (1)
useEmailStore(21-46)
src/features/ticket/api/order.ts (2)
src/shared/types/api/http-client.ts (1)
axiosClient(6-13)src/features/ticket/model/Order.ts (1)
OrderTicketRequest(1-5)
src/widgets/dashboard/ui/ticket/TicketItem.tsx (2)
src/features/ticket/model/ticket.ts (1)
ReadTicketResponse(21-27)src/features/ticket/hooks/useTicketHook.ts (1)
useDeleteTicket(26-37)
src/pages/event/ui/create-event/EventInfoPage.tsx (1)
src/features/event/model/FunnelContext.tsx (1)
useFunnelState(53-59)
src/features/payment/ui/TicketOption.tsx (1)
src/features/dashboard/model/store/TicketOptionStore.tsx (2)
TOption(3-8)useTicketOptionStore(18-33)
src/features/bookmark/hook/useBookmarkHook.ts (3)
src/features/bookmark/model/bookmarkInformation.ts (1)
BookmarkResponse(1-11)src/features/bookmark/api/bookmark.ts (3)
readBookmark(4-7)createBookmark(9-12)deleteBookmark(14-17)src/entities/event/model/eventDetail.ts (1)
EventDetailResponse(8-17)
src/features/dashboard/hook/useEmailHook.ts (3)
src/features/dashboard/model/email.ts (3)
ReadEmailResponse(16-24)EmailResponse(10-15)EmailRequest(1-9)src/features/dashboard/api/mail.ts (5)
readEmail(5-13)readPurchaserEmails(16-24)sendEmail(26-29)editEmail(31-34)deleteEmail(36-39)src/features/dashboard/model/store/EmailStore.tsx (1)
useEmailStore(21-46)
src/features/dashboard/hook/useHostDashboardHook.ts (2)
src/entities/host/model/hostDashboard.ts (1)
HostDashboardResponse(1-9)src/features/dashboard/api/hostDashboard.ts (1)
getHostDashboard(3-10)
src/shared/ui/backgrounds/TicketOptionLayout.tsx (1)
src/features/dashboard/model/store/TicketOptionStore.tsx (1)
useTicketOptionStore(18-33)
src/features/dashboard/model/store/ResponseStore.tsx (1)
src/shared/types/responseType.ts (1)
responsesData(12-20)
🪛 ESLint
src/widgets/event/ui/TicketInfo.tsx
[error] 58-58: 'error' is defined but never used.
(@typescript-eslint/no-unused-vars)
🪛 Biome (1.9.4)
src/shared/ui/backgrounds/TicketOptionLayout.tsx
[error] 32-34: This block statement doesn't serve any purpose and can be safely removed.
Standalone block statements without any block-level declarations are redundant in JavaScript and can be removed to simplify the code.
Safe fix: Remove redundant block.
(lint/complexity/noUselessLoneBlockStatements)
[error] 39-40: This block statement doesn't serve any purpose and can be safely removed.
Standalone block statements without any block-level declarations are redundant in JavaScript and can be removed to simplify the code.
Safe fix: Remove redundant block.
(lint/complexity/noUselessLoneBlockStatements)
src/features/dashboard/ui/ResponsesList.tsx
[error] 24-24: Change to an optional chain.
Unsafe fix: Change to an optional chain.
(lint/complexity/useOptionalChain)
🔇 Additional comments (135)
src/shared/ui/backgrounds/DashboardLayout.tsx (1)
5-5: SideBar import 경로가 올바르게 업데이트되었습니다.
widgets/dashboard/ui/main/SideBar로 변경된 경로가 구조 조정과 일치하며, 빌드 및 런타임 에러 없이 렌더링될 것으로 보입니다.src/pages/dashboard/ui/DashbaordPage.tsx (2)
2-2: TicketRevenue import 경로가 올바르게 업데이트되었습니다.
widgets/dashboard/ui/main/TicketRevenue로 변경된 경로가 구조 조정과 일치하며, 컴포넌트 로딩에 문제가 없습니다.
7-7: EventOverview import 경로가 올바르게 업데이트되었습니다.
widgets/dashboard/ui/main/EventOverview로 변경된 경로가 일관되게 적용되었으며, 렌더링에도 이상이 없습니다.package.json (1)
19-19: React Query Devtools 버전 업그레이드 확인
패치 버전^5.76.1로 올바르게 업데이트되었습니다.package-lock.json또는yarn.lock파일도 함께 갱신되었는지 확인해주세요.src/pages/dashboard/ui/EventInfoPage.tsx (1)
4-4: EventDatePicker import 경로 수정 적절함
리팩토링된 디렉토리 구조에 맞춰../../../features/event/ui/DatePicker로 경로가 올바르게 변경되었습니다.src/entities/event/hook/useEventHook.ts (1)
2-2: API 모듈 import 경로 업데이트 적합
eventDetail을../api/eventDetail에서 가져오도록 변경되어, 파일 구조 리팩토링을 일관되게 반영하고 있습니다.src/features/dashboard/hook/useParticipants.ts (1)
7-7: useParticipantStore 경로 수정 확인
대시보드 스토어가../model/store/ParticipantStore로 이동된 것을 정확히 반영했습니다.src/features/dashboard/ui/ParicipantCard.tsx (1)
3-3: useParticipantStore import 경로 변경 적절
UI 컴포넌트에서도 스토어 위치를../model/store/ParticipantStore로 일관성 있게 업데이트했습니다.src/features/dashboard/ui/PariticipantsList.tsx (1)
4-4:useParticipantStore경로가 올바르게store서브디렉토리로 이동되었습니다.
../model/store/ParticipantStore로의 경로 수정이 FSD 구조와 일치하며, 관련 컴포넌트에서도 동일하게 적용되어 일관성이 유지됩니다.src/pages/dashboard/ui/EventTagPage.tsx (1)
4-5: 이벤트 UI 컴포넌트의 import 경로가features/event/ui로 정상 업데이트되었습니다.
EventCategory와EventTag를 새 디렉토리 구조에서 올바르게 불러오고 있어 리팩토링 의도가 잘 반영되었습니다.src/shared/types/funnelType.ts (1)
1-1:useFunnelHook타입 import 경로가features/event/hooks로 정확히 조정되었습니다.
이전event-manage/event-create대신features/event경로를 사용하여 모듈 구조가 명료해졌습니다.src/features/event/hooks/useEventHook.ts (1)
2-2:ApiResponse타입 import 경로가shared/types/api/apiResponse로 단축되어 일관성을 확보했습니다.
깊은 상대경로 대신 간결한 상대경로를 사용해 유지보수성이 향상되었습니다.src/shared/hooks/useInfiniteScroll.ts (1)
2-2:PaginationParams및EventFiltersimport가entities/event/model/eventDetail로 업데이트되었습니다.
event모델에서eventDetail모델로 전환된 구조를 반영하여 통일감을 유지하고 있습니다.src/features/dashboard/model/store/ParticipantStore.tsx (1)
2-2: import 경로 업데이트가 올바르게 적용되었습니다.
participantsData타입을 불러오는 상대 경로가src/features/dashboard/model/store위치에 맞춰 4단계 상위 디렉토리로 변경된 것이 적절합니다.src/features/event/hooks/usePresignedUrlHook.ts (2)
2-2: import 경로 업데이트 적절합니다.
axiosClient모듈의 상대 경로가../../../shared/types/api/http-client로 수정되어 모듈 위치 변경을 정확히 반영하고 있습니다.
5-5: import 경로 업데이트 적절합니다.
ApiResponse타입의 상대 경로가../../../shared/types/api/apiResponse로 변경되어 일관성이 유지됩니다.src/app/routes/Router.tsx (1)
7-7: FunnelPage import 경로가 올바르게 반영되었습니다.
event-manage에서event/ui/create-event로 컴포넌트 위치 변경에 맞춰 경로를 수정한 것이 적절합니다.src/pages/dashboard/ui/ticket/TicketListPage.tsx (1)
3-3: TicketItem import 경로가 올바르게 반영되었습니다.
위치가widgets/dashboard/ui/ticket/TicketItem으로 변경된 것을 정확히 반영하고 있어 문제 없습니다.src/pages/event/ui/create-event/EventTypePage.tsx (1)
1-1: FSD 구조 반영된 import:EventType컴포넌트가features/event/ui디렉토리에서 올바르게 로드되고 있습니다. 경로 일관성이 확보되어 있어 보입니다.src/pages/event/ui/create-event/EventPeriodPage.tsx (1)
1-2: 리팩토링에 따른 import 경로 업데이트:useFunnelState와EventDatePicker의 import 경로가 새로운features/event구조에 맞게 변경되었습니다. 기능에는 영향이 없으며, 구조 통일성이 잘 반영되었습니다.src/pages/event/ui/CategoryPage.tsx (1)
6-6: EventList import 경로 일관성 확보:CategoryPage에서features/event/ui/EventList를 참조하도록 경로가 올바르게 수정되었습니다. 전반적인 디렉토리 구조에 잘 맞춰져 있습니다.src/pages/event/ui/AllEventsPage.tsx (1)
6-6: EventList import 동기화 완료:AllEventsPage에서도features/event/ui/EventList로 경로가 통일되어 있음을 확인했습니다.src/features/ticket/model/TicketContext.tsx (3)
2-2: 임포트 경로 업데이트
CreateTicketRequest타입의 임포트 경로가./ticket로 수정되어 FSD 리팩터링에 맞춰 일관성을 확보했습니다.
14-14: 불필요한 공백 제거
eventId: 0뒤의 trailing whitespace가 제거되어 코드가 더욱 깔끔해졌습니다.
43-43: 파일 끝에 개행 추가
파일 끝에 newline이 추가되어 POSIX 표준(편집기 호환성)을 준수합니다.src/pages/dashboard/ui/EventDetailPage.tsx (1)
4-6: 이벤트 컴포넌트 임포트 경로 리팩터링
FileUpload,LinkInput,TextEditor의 경로가features/event/ui로 일관되게 변경되었습니다. 새 위치의 파일이 정상적으로 존재하고 빌드 에러가 없는지 확인해 주세요.src/features/event/api/presignedUrl.ts (1)
1-1:axiosClient임포트 경로 단순화
공통 HTTP 클라이언트 모듈의 상대 경로가 한 단계 줄어들어 가독성이 개선되었습니다.src/features/event/api/event.ts (1)
1-1:axiosClient임포트 경로 단순화
공통 모듈의 상대 경로가../../../shared/types/api/http-client로 변경되어 디렉터리 구조에 맞춰졌습니다.src/features/event/ui/FileUpload.tsx (1)
1-1: 이미지 자산 경로 축소
FileUpload.svg의 임포트 경로가 한 단계 상위로 조정되어, 리팩터링된 디렉터리 구조와 일치합니다. 빌드 시 해당 경로가 올바르게 해석되는지 확인해 주세요.src/features/event/api/host.ts (1)
1-1: 상대 경로 import 경로 업데이트 확인
Axios 클라이언트의 import 경로가 4레벨에서 3레벨로 축소되었습니다. 디렉토리 구조 변경에 따라 올바르게 반영된 것이므로 문제 없습니다.src/features/event/hooks/useHostHook.ts (1)
4-4: ApiResponse 타입 import 경로 업데이트
공유 API 타입 패키지의 상대 경로가 축소되었습니다. 구조 변경에 맞춰 일관성 있게 반영되어 있어 적절합니다.src/pages/search/ui/SearchPage.tsx (1)
13-13: EventList 타입 import 경로 수정
이벤트 모델이features/event디렉토리로 이동됨에 따라EventList타입 import 경로가 올바르게 업데이트되었습니다.src/pages/event/ui/create-event/EventOrganizerInfoPage.tsx (1)
3-5: 여러 컴포넌트 import 경로 조정
UnderlineTextField,useFunnelState,OrganizerFormData및 관련 유효성 검증 유틸의 상대 경로가 새 구조에 맞게 일관성 있게 수정되었습니다. 잘 반영되었습니다.src/features/home/ui/EventSliderSection.tsx (1)
7-7: EventItem 타입 import 경로 수정
EventItem타입 import가model/eventDetail로 변경되어 새로운 모델 구조와 일치합니다.src/widgets/dashboard/ui/email/EmailDeleteModal.tsx (1)
1-1: 상대 경로 업데이트 확인
TertiaryButton의 import 경로가 파일 구조 변경에 맞춰 올바르게 수정되었습니다.src/pages/event/ui/create-event/FunnelPage.tsx (1)
2-3: useFunnel, EventFunnel, FunnelProvider import 경로 확인
useFunnel,EventFunnel,FunnelProvider의 import 경로가 새로운features/event구조에 맞게 정확히 조정되었습니다.Also applies to: 5-5
src/widgets/dashboard/ui/ticket/SelectTicketInfo.tsx (1)
10-10: props 구조 분해 개선
props 분해 선언에 공백을 추가하여 가독성이 향상되었습니다. 일관된 코드 스타일을 유지하고 있습니다.src/pages/event/ui/create-event/EventTagPage.tsx (2)
1-1: SVG 에셋 경로 확인 요청
SuccessIcon의 경로가 아직public/assets/event-manage/creation아래에 남아있습니다. 리팩토링된 디렉토리 구조에서 해당 경로가 유효한지 검토해주세요.
2-4: 이벤트 관련 import 경로 업데이트
useFunnelState,EventCategory,EventTag를 새로운features/event디렉토리 구조에 맞춰 잘 이동하셨습니다.src/features/event/ui/EventType.tsx (2)
1-2: SVG 아이콘 import 경로 점검
OnlineIcon및OfflineIcon경로가public/assets/event-manage/creation에 남아있습니다. 리팩토링된 구조에서 해당 디렉토리가 존재하는지 확인이 필요합니다.
4-5: 공유 컴포넌트 import 경로 일관성
KakaoMap과AddressSearch컴포넌트가shared/ui하위로 잘 조정되었습니다. 경로가 리팩토링 전후 일관되게 유지되어 있어 문제가 없어 보입니다.src/pages/event/ui/EventDetailsPage.tsx (2)
12-12: 모달 컴포넌트 import 경로 정리
ShareEventModal가features/event/ui로 이동되었으며, 새로운 위치에서 정상 참조됩니다.
19-19: 북마크 훅 import 경로 업데이트
useCreateBookmark,useDeleteBookmark를features/bookmark/hook에서 가져오도록 변경하셨습니다. 구현된 훅과 잘 매칭됩니다.src/pages/dashboard/ui/ResponsesManagementPage.tsx (1)
5-5: 스토어 import 경로 일관성 확인
useResponseStore가features/dashboard/model/store/ResponseStore로 옮겨졌습니다. 리팩토링된 구조에 적합합니다.src/features/home/hooks/useEventHook.ts (2)
2-2: API import 경로 업데이트 확인
getEventByTag가entities/event/api/eventDetail모듈로 올바르게 이동되었습니다.
4-4: 모델 타입 import 경로 검토
EventItem타입이entities/event/model/eventDetail로 잘 옮겨졌으며, React Query 반환 타입과 일치합니다.src/entities/event/hook/useEventListHook.ts (2)
1-1: 이벤트 리스트 타입 import 경로 확인
이전 경로를../../../features/event/event-list/model/eventList로 조정하여 일관성을 유지했습니다. 경로가 올바르게 매핑되었습니다.
3-3: API 함수 import 경로 확인
getAllEventsInfinite를../api/eventDetail에서 가져오도록 업데이트 했습니다. 파일 구조와 일치합니다.src/pages/event/ui/host/HostCreationPage.tsx (3)
3-4: 디자인 시스템 컴포넌트 경로 확인
DefaultTextField와MultilineTextField의 import 경로를../../../../../design-system/ui/textFields로 업데이트했습니다. 올바른 위치로 매핑되어 있습니다.
6-7: 훅 및 컨텍스트 import 경로 확인
useFunnelState를../../../../features/event/model/FunnelContext에서 가져오도록 조정했습니다. 경로가 올바르고 일관적입니다.
8-9: 공통 유효성 검사 로직 import 경로 확인
hostCreationZodValidation와HostCreationFormData를../../../../shared/lib/formValidation에서 가져오도록 변경했습니다. 올바르게 반영되었습니다.src/widgets/event/ui/TicketInfo.tsx (1)
4-4: 티켓 주문 요청 타입 import 경로 확인
OrderTicketRequest를../../../features/ticket/model/order에서 가져오도록 변경했습니다. 변경 사항이 올바르게 반영되었습니다.src/pages/event/ui/host/HostSelectionPage.tsx (2)
3-5: FunnelContext, host 목록 훅 및 아이콘 버튼 import 경로 확인
useFunnelState,useHostChannelList,IconButton의 import 경로를 FSD 구조에 맞게 조정했습니다. 경로가 올바르게 매핑되었습니다.
7-7: 호스트 삭제 훅 import 경로 확인
useHostDeletion을../../../../features/event/hooks/useHostHook에서 가져오도록 업데이트했습니다. 경로가 정확합니다.src/pages/dashboard/ui/mail/EmailEditPage.tsx (6)
5-5: import 경로가 올바르게 업데이트되었습니다.TimePicker 컴포넌트의 import 경로가 FSD(Feature-Sliced Design) 방법론에 맞게 수정되었습니다. 이는 features/event/ui 디렉토리로 이동되어 이벤트 기능과 관련된 UI 컴포넌트로 적절하게 분류되었습니다.
7-7: SelectTicketModal 컴포넌트 경로 개선SelectTicketModal 컴포넌트의 import 경로가 widgets/dashboard/ui/email 디렉토리로 변경되었습니다. 이메일 관련 위젯을 별도 디렉토리로 그룹화하여 관련 컴포넌트를 더 효과적으로 조직화했습니다.
9-9: 스토어 경로 구조 개선useEmailStore의 import 경로가 model/store 하위 디렉토리로 이동되었습니다. 이는 상태 관리 로직을 model 레이어 내에서 더 명확하게 분리하여 FSD 패턴을 잘 따르고 있습니다.
15-15: 구조 분해 할당 문법 향상useEditEmail 훅에서 반환되는 mutate 함수의 구조 분해 할당이 더 간결하고 직관적인 형태로 개선되었습니다.
38-38: 함수 호출 문법 개선editEmail 함수 호출 시 매개변수 전달 방식이 더 명확한 객체 구조로 개선되었습니다. 이는 코드 가독성을 높이고 유지보수성을 향상시킵니다.
47-48: 코드 포맷팅 및 타입 표기 간소화
- 47행: 타입 표기가 인라인으로 간소화되어 코드 가독성이 향상되었습니다.
- 48행: isEdited prop의 값이 불리언 리터럴로 변경되어 더 명확해졌습니다.
src/widgets/dashboard/ui/email/SelectTicketModal.tsx (4)
2-6: import 경로 구조화 개선여러 컴포넌트와 훅의 import 경로가 FSD 방법론에 맞게 업데이트되었습니다:
- TextButton: design-system/ui/buttons 디렉토리로 정확하게 분류
- SelectTicketInfo: 티켓 관련 UI 컴포넌트로 구조화
- useTickets: 티켓 기능 관련 훅으로 적절하게 분류
- useEmailStore: 모델 레이어 내 스토어로 구조화
- usePurchaserEmails: 이메일 관련 훅으로 분류
이러한 변경은 코드베이스의 일관성을 높이고 관련 기능끼리 더 명확하게 그룹화합니다.
19-19: 구조 분해 할당 문법 개선usePurchaserEmails 훅에서 반환되는 mutate 함수의 구조 분해 할당이 더 간결하고 직관적인 형태로 개선되었습니다.
25-25: 화살표 함수 매개변수 구문 간소화단일 매개변수를 가진 화살표 함수에서 불필요한 괄호를 제거하여 코드가 더 간결해졌습니다.
51-51: map 함수 콜백 매개변수 구문 간소화map 함수의 콜백에서 단일 매개변수를 가진 화살표 함수의 불필요한 괄호를 제거하여 코드가 더 간결해졌습니다.
src/widgets/dashboard/ui/email/SentMailCard.tsx (3)
3-8: import 경로 구조화 개선여러 컴포넌트, 유틸리티 함수 및 타입의 import 경로가 프로젝트의 새로운 디렉토리 구조에 맞게 업데이트되었습니다:
- IconButton과 TertiaryButton: design-system/ui/buttons 디렉토리로 정확하게 분류
- formatDate, formatTime: shared/lib/date로 적절히 이동
- ReadEmailResponse: 이메일 모델 타입으로 구조화
- useEmailStore: 모델 레이어 내 스토어로 명확하게 구조화
이러한 변경은 FSD 방법론을 따르며 코드베이스의 일관성과 유지보수성을 향상시킵니다.
40-42: JSX 요소 포맷팅 개선날짜와 시간 표시를 위한 JSX 구조가 더 읽기 쉽게 개선되었습니다. 여러 줄로 나누어 표현함으로써 코드 가독성이 향상되었습니다.
54-55: 버튼 컴포넌트 Props 포맷팅 개선TertiaryButton 컴포넌트의 props가 한 줄로 정리되어 코드 일관성과 가독성이 향상되었습니다. 여러 줄에 걸쳐 있던 props가 간결하게 정리되었습니다.
src/features/event/ui/EventCategory.tsx (2)
2-2: import 경로 단순화CategoryButton SVG 애셋의 import 경로가 단순화되었습니다. 이전에 다섯 단계 상위 디렉토리에서 네 단계 상위 디렉토리로 변경되어 더 직관적이고 유지보수하기 쉬운 구조가 되었습니다.
4-4: 타입 import 경로 단순화CategoryType 타입의 import 경로가 네 단계 상위 디렉토리에서 세 단계 상위 디렉토리로 변경되었습니다. 이는 프로젝트의 전체적인 디렉토리 구조 리팩토링과 일치하며, 파일 경로를 더 직관적으로 만듭니다.
src/features/dashboard/api/hostDashboard.ts (1)
1-10: 호스트 대시보드 API 모듈 분리이 파일은 이전에 event.ts 파일에 있던 getHostDashboard 함수를 별도의 모듈로 분리한 것입니다. 이는 FSD 방법론에 따라 기능별로 API를 더 명확하게 분리하여 코드 구조를 개선합니다.
함수 구현은 다음과 같은 장점이 있습니다:
- 명확한 매개변수(eventId)로 호스트 대시보드 데이터를 조회합니다
- axiosClient를 사용하여 HTTP 요청을 처리합니다
- 응답에서 필요한 데이터만 추출하여 반환합니다
이러한 분리는 관심사 분리 원칙을 따르며, 대시보드 기능과 관련된 API를 보다 집중적으로 관리할 수 있게 합니다.
src/pages/dashboard/ui/ParticipantsMangementPage.tsx (3)
7-8: 폴더 구조 개선 확인email 관련 컴포넌트들이 적절하게 서브디렉토리로 옮겨져 구조가 더 명확해졌습니다. 이는 FSD 방법론에 맞게 기능별로 파일을 구성하는 좋은 예시입니다.
55-55: 타입 표기 정리됨이전 코드에 있던 불필요한 세미콜론이 제거되어 타입 표기가 깔끔해졌습니다.
58-58: JSX 구문 간소화조건부 렌더링 코드가 한 줄로 간결하게 정리되어 가독성이 향상되었습니다.
src/entities/event/api/eventDetail.ts (2)
2-2: import 경로 수정이벤트 관련 타입들이
event모델에서eventDetail모델로 적절하게 이동되었습니다. 이는 FSD 방법론에 따라 관련된 타입들을 더 명확하게 구분하는 데 도움이 됩니다.Also applies to: 5-5
1-80:Details
✅ Verification successful
검색 기능 제거 확인 필요
PR 설명에는 사용하지 않는 타입 파일 제거에 대해 언급되어 있는데, 이 파일에서는
searchEvents함수가 제거된 것으로 보입니다. 이 함수가 더 이상 사용되지 않는지, 혹은 다른 곳으로 이동되었는지 확인이 필요합니다.
🏁 Script executed:
#!/bin/bash # 검색 기능이 다른 파일로 이동되었는지 확인 rg "searchEvents|search.*Events" --type tsLength of output: 44
searchEvents 함수 제거 확인 완료
searchEvents함수는 코드베이스 어디에서도 발견되지 않아 의도적으로 제거된 것으로 보입니다. 해당 기능이 더 이상 사용되지 않는 것이 맞다면 추가 수정은 필요 없습니다.src/features/payment/ui/TicketOption.tsx (3)
1-3: import 경로 수정티켓 옵션 관련 타입과 스토어의 import 경로가 변경되었습니다. 이는 FSD 구조에 맞게 파일 위치를 조정한 것으로 보입니다.
9-64: 코드 포맷팅 정리코드 전반적으로 들여쓰기와 공백이 일관되게 정리되었습니다. 특히 JSX 구조에서 일관성 있는 들여쓰기는 가독성을 크게 향상시킵니다.
69-88: 샘플 데이터 포맷팅 개선예제로 사용되는 옵션 배열의 포맷이 일관되게 정리되어 가독성이 향상되었습니다. 각 객체 항목 마지막에 콤마를 추가하는 것은 향후 항목을 추가할 때 편리합니다.
src/features/event/ui/EventFunnel.tsx (2)
1-9: 이벤트 관련 페이지 import 경로 정리이벤트 생성 및 호스트 관리 관련 페이지의 import 경로가
pages/event-manage/ui/에서pages/event/ui/하위의 더 명확한 서브폴더 구조로 변경되었습니다. 이는 FSD 방법론에 따라 기능별로 파일을 구성하는 데 더 적합합니다.
11-11: 공유 타입 import 경로 수정
EventFunnelInterface와StepNames타입의 import 경로가 변경되었습니다. 이 변경은 전체적인 디렉토리 구조 리팩토링의 일부로서 일관성을 유지합니다.src/features/event/ui/EventList.tsx (1)
2-5: 가져오기 경로가 FSD 구조에 맞게 수정되었습니다.파일 구조 리팩토링에 따라 경로가 적절하게 업데이트되었습니다. 이제 import 경로가 더 간결해지고 FSD(Feature-Sliced Design) 방법론에 잘 맞춰져 있습니다.
src/features/ticket/api/ticket.ts (2)
1-2: 모델 import 경로 수정이 적절합니다.
ReadTicketResponse의 import 경로가 'ticketInformation'에서 'ticket'으로 변경되었습니다. 파일 위치 변경에 따른, 적절한 수정입니다.
5-7: 코드 서식이 일관되게 개선되었습니다.API 함수들의 들여쓰기와 세미콜론 사용이 일관성 있게 정리되었습니다. 함수 로직에는 변화가 없으며, 가독성만 향상되었습니다.
Also applies to: 10-14, 17-19
src/features/dashboard/hook/useEventHook.ts (1)
1-4: 불필요한 import와 함수가 제거되었습니다.
useGetEventHook함수가 제거되고, 관련 import(useQuery,getHostDashboard)도 함께 제거되었습니다. 이 기능은 새로운 파일useHostDashboardHook.ts로 이동된 것으로 보입니다. 이 변경은, 타당한 리팩토링입니다.src/widgets/dashboard/ui/ticket/TicketItem.tsx (2)
3-6: import 경로가 적절하게 업데이트되었습니다.리팩토링된 디렉토리 구조에 맞게 import 경로가 수정되었습니다. 특히
ReadTicketResponse와useDeleteTicket의 경로가 올바르게 업데이트되었습니다.
10-10: 코드 스타일이 일관되게 정리되었습니다.구조 분해 할당과 JSX 내의 문자열 리터럴 주변 공백이 일관되게 정리되었습니다. 이러한 서식 변경은 코드 가독성을 향상시킵니다.
Also applies to: 27-27
src/widgets/dashboard/ui/email/EmailModal.tsx (4)
2-7: import 경로가 FSD 구조에 잘 반영되었습니다.
디자인 시스템, 훅, 스토어, UI 컴포넌트, 모델 모두 새 디렉토리 위치에 맞게 상대 경로가 정확히 수정되었습니다.
18-18: EmailStore 상태 구조 분해 할당이 간결해졌습니다.
여러 개의 상태 값을 한 줄로 꺼내어 가독성이 향상되었습니다.
44-45: emailData 객체에 트레일링 콤마 추가로 일관된 스타일을 유지합니다.
코드 포맷터와 일관된 객체 리터럴 스타일을 준수합니다.
61-63: TimePicker onChange 핸들러가 간결해졌습니다.
익명 함수에서 바로 setReservationDate를 호출하여 코드가 더 명확해졌습니다.src/pages/bookmark/ui/BookmarkPage.tsx (1)
6-6: 북마크 훅 import 경로가 올바르게 업데이트되었습니다.
새로운useBookmarkHook모듈 위치에 맞춰,useBookmarks훅을 정확히 참조하고 있습니다.src/features/ticket/api/order.ts (5)
1-2: axiosClient와 OrderTicketRequest import 경로가 일관되게 정리되었습니다.
상대 경로 및 따옴표 사용이 다른 API 모듈과 동일하게 포맷팅되었습니다.
6-11: getAll 메서드 구현이 일관된 스타일을 따릅니다.
axiosClient.get호출과response.data반환이 명확하게 분리되어 있어 이해하기 쉽습니다.
13-18: getDetail 메서드 구현이 일관된 포맷을 유지합니다.
파라미터 전달 방식을 다른 API 모듈과 동일하게 유지하여 가독성이 보장됩니다.
21-25: orderTickets 함수가 명확하게 분리되었습니다.
비즈니스 로직 없이 API 요청만을 수행하므로 테스트와 유지보수가 용이합니다.
28-31: cancelTickets 함수가 일관된 방식으로 정의되었습니다.
쿼리 파라미터를 URL에 직접 포함했으나, API 사양에 부합한다면 문제가 없습니다.src/shared/ui/backgrounds/TicketOptionLayout.tsx (1)
7-7: useTicketOptionStore import 경로가 새 구조에 맞게 업데이트되었습니다.
모델 스토어 디렉토리로 옮겨진TicketOptionStore를 정확히 참조합니다.src/pages/event/ui/create-event/EventInfoPage.tsx (2)
1-4: 컴포넌트 import 경로가 FSD에 맞게 정렬되었습니다.
FileUpload,TextEditor,LinkInput,useFunnelState모두 새 디렉토리 구조를 따라 정확히 참조하고 있습니다.
7-7: useFunnelState 훅 사용이 적절합니다.
훅에서 반환된setEventState를 자식 컴포넌트에 전달하여 상태 관리를 일관되게 수행합니다.src/pages/dashboard/ui/ticket/TicketCreatePage.tsx (5)
7-8: import 경로가 올바르게 수정되었습니다.
features/event-manage에서features/ticket으로 모듈 이동에 따라TicketDatePicker와CreateTicketRequest의 import가 올바르게 업데이트되었습니다.
38-42: 티켓 종류 변경 핸들러 업데이트 승인
handleTicketTypeChange내부의setTicketData호출이 괄호 제거 등 포맷팅만 조정되었으며, 로직에는 영향이 없습니다.
50-53: 입력 변경 핸들러 업데이트 승인
handleInputChange의setTicketData호출부가 멀티라인으로 정리되었고, 숫자/문자 분기 처리 로직이 유지되고 있습니다.
136-141: 가격 및 수량 입력 UI 포맷팅 변경 승인
DefaultTextField두 컴포넌트가 멀티라인으로 정렬되어 가독성이 향상되었습니다. 기능에는 변경이 없습니다.Also applies to: 143-148
159-164:TicketDatePicker사용부 포맷팅 변경 승인
TicketDatePicker컴포넌트가 새 props (isLabel,ticketState,setTicketState,onDateChange)를 그대로 유지하며 포맷만 정리되었습니다.src/features/ticket/hooks/useTicketHook.ts (2)
1-4: import 경로 및 quote 스타일 통일 확인
API 및 모델 import 경로가 FSD 구조에 맞춰 올바르게 수정되었고, 모든 문자열이 single quote로 통일되었습니다.
6-11:useTickets훅 구현 승인
enabled: !!eventId조건과queryFn설정이 명확하며, 의도된 동작을 잘 반영하고 있습니다.src/pages/dashboard/ui/mail/EmailPage.tsx (3)
3-6: import 경로 업데이트 승인
TimePicker,SelectTicketModal,useEmailStore,EmailRequest등의 import가 FSD 구조 변경에 맞춰 올바르게 조정되었습니다.
19-20: store destructuring 포맷팅 변경 승인
useEmailStore의 반환값 destructuring이 한 줄로 통일되어 가독성이 개선되었습니다.
58-64:allParticipantEmails및TimePicker.onChange포맷팅 변경 승인
map 콜백과onChange핸들러가 concise arrow function 형식으로 정리되었으며, 기능에는 변동이 없습니다.src/features/dashboard/api/mail.ts (6)
2-3: import 경로 통일 확인
emailInformation에서
6-13:readEmail함수 포맷팅 변경 승인
await, params 구조 등이 멀티라인으로 정리되었으며 기존 로직이 그대로 유지됩니다.
16-24:readPurchaserEmails함수 포맷팅 변경 승인
optional param 분기(...(ticketId !== undefined && { ticketId }))가 깔끔하게 유지되었습니다.
26-29:sendEmail함수 포맷팅 변경 승인
POST 호출부가 braces 및 return 형식으로 일관되게 정리되었습니다.
31-34:editEmail함수 포맷팅 변경 승인
PUT 호출부 형식 정리가 적절합니다.
36-39:deleteEmail함수 세미콜론 추가 확인
다른 함수와 동일하게 세미콜론이 일관되게 추가되어 스타일 통일성이 유지되었습니다.src/features/dashboard/ui/EmailInput.tsx (3)
6-7: import 경로 수정 확인
useEmailStore의 import 경로가model/store디렉토리로 올바르게 이동되었습니다.
15-20: props destructuring 포맷팅 조정 승인
EmailInputPropsdestructuring이 명확하게 정리되었으며, 기본값 처리도 적절합니다.
23-24: store destructuring 포맷팅 변경 승인
useEmailStore로부터 가져오는 상태 및 setter가 깔끔하게 한 줄로 처리되어 가독성이 향상되었습니다.src/features/dashboard/hook/useEmailHook.ts (5)
3-3: 임포트 경로 업데이트가 올바르게 적용되었습니다.리팩토링을 통해 이메일 관련 타입들이 새 위치로 이동한 것이 반영되었습니다. 이는 FSD(Feature-Sliced Design) 방법론에 더 잘 맞게 구조화되었습니다.
5-5: 스토어 폴더 구조 개선이 적용되었습니다.이메일 스토어가 모델 내의 전용 store 하위 디렉토리로 이동되어 상태 관리 코드가 더 체계적으로 구성되었습니다.
8-13: 코드 포맷팅이 일관되게 개선되었습니다.코드 블록이 여러 줄로 나뉘어 가독성이 향상되었습니다. 함수의 논리는 변경되지 않고 코드 스타일만 개선되었습니다.
16-23: 일관된 스타일로 코드가 업데이트되었습니다.들여쓰기와 세미콜론 사용이 일관되게 적용되어 코드베이스 전체의 스타일 통일성이 향상되었습니다.
26-40: 나머지 코드도 일관된 스타일로 개선되었습니다.코드의 논리나 기능은 변경되지 않았으며, 포맷팅만 개선되어 가독성과 일관성이 향상되었습니다.
Also applies to: 42-57, 59-71
src/features/event/model/event.ts (1)
1-11: 이벤트 관련 타입들이 적절하게 중앙화되었습니다.이벤트 관련 인터페이스들을 하나의 파일로 집중시켜 관리하는 것은 좋은 접근 방식입니다. 기본 타입(BaseEvent)을 확장하여 CreateEventRequest와 EventList 인터페이스를 정의한 것은 타입 재사용성과 일관성을 높이는 좋은 방법입니다.
이 중앙화된 타입 정의는 이전에 분산되어 있던 타입 파일들을 통합하여 FSD 방법론에 더 잘 맞게 구조화되었습니다.
src/features/dashboard/ui/SelectedResponseList.tsx (3)
1-1: 스토어 임포트 경로가 적절하게 업데이트되었습니다.ResponseStore가 새로운 store 디렉토리 구조에 맞게 업데이트되었습니다. 이는 상태 관리 코드의 구조적 일관성을 향상시킵니다.
6-16: 인터페이스 정의가 일관된 스타일로 개선되었습니다.들여쓰기와 포맷팅이 개선되어 타입 정의의 가독성이 향상되었습니다.
18-66: 컴포넌트 구현이 일관된 스타일로 개선되었습니다.함수형 컴포넌트의 구현과 반환된 JSX가 일관된 포맷팅으로 개선되었습니다. 들여쓰기, 줄바꿈 및 공백 사용이 일관되게 적용되어 코드 가독성이 크게 향상되었습니다.
src/pages/dashboard/ui/ticket/TIcketConfirmPage.tsx (3)
6-6: 임포트 경로가 적절하게 업데이트되었습니다.소문자 디렉토리 이름(
ticketConfirm)을 사용하도록 수정되었습니다. 이는 디렉토리 명명 규칙의 일관성을 높입니다.
23-24: 타입 정의가 개선되었습니다.
location객체의 구조와orderStatus타입이 명확하게 정의되어 타입 안전성이 향상되었습니다.Also applies to: 26-26
74-89: 컴포넌트 Props 포맷팅이 개선되었습니다.여러 줄에 걸쳐 Props를 나열하는 방식으로 변경되어 가독성이 향상되었습니다. 각 Prop을 별도의 줄에 배치하면 코드 리뷰와 유지보수가 더 쉬워집니다.
src/features/dashboard/model/store/ResponseStore.tsx (1)
1-47: Zustand 스토어 구현이 잘 되어 있습니다.FSD(Feature-Sliced Design) 방법론에 맞게 store 디렉토리로 이동된 이 파일은 응답 데이터를 관리하기 위한 Zustand 스토어를 잘 구현하고 있습니다. 상태 업데이트 로직이 불변성을 유지하면서 명확하게 작성되어 있습니다.
src/features/dashboard/ui/ResponsesList.tsx (1)
1-1: import 경로가 올바르게 수정되었습니다.리팩토링에 따라
useResponseStore의 import 경로가 새로운 구조에 맞게 올바르게 업데이트되었습니다.src/features/bookmark/hook/useBookmarkHook.ts (3)
1-11: React Query 훅 구현이 잘 되어 있습니다.FSD(Feature-Sliced Design) 방법론에 맞게
model디렉토리에서hook디렉토리로 이동된 이 파일은 북마크 데이터를 관리하기 위한 React Query 훅이 잘 구현되어 있습니다.useBookmarks는 북마크 목록을 조회하는 훅으로, 명확한 구조를 가지고 있습니다.
13-46: 최적화된 업데이트 패턴 적용이 훌륭합니다.
useCreateBookmark훅은 낙관적 업데이트(Optimistic Updates) 패턴을 올바르게 구현하여 사용자 경험을 향상시키고 있습니다. 오류 처리와 롤백 메커니즘도 적절히 구현되어 있습니다.
47-80: 삭제 기능 구현이 일관되게 잘 되어 있습니다.
useDeleteBookmark훅도 마찬가지로 낙관적 업데이트 패턴을 잘 적용하고 있으며, 적절한 오류 처리와 캐시 무효화 로직이 구현되어 있습니다. 코드 구조가useCreateBookmark와 일관성이 있어 유지 보수성이 좋습니다.
There was a problem hiding this comment.
Actionable comments posted: 0
♻️ Duplicate comments (1)
src/features/dashboard/ui/ResponsesList.tsx (1)
71-76: 중복된 이메일 필드 렌더링 문제가 해결되었습니다.이전 코드에서 발견된 중복 이메일 필드 렌더링 문제가 해결되었습니다. 이제
🧹 Nitpick comments (2)
src/shared/ui/backgrounds/TicketOptionLayout.tsx (1)
24-32: 불필요한 중괄호 블록을 제거해주세요.불필요한 독립 블록 문이 있습니다. 주석을 포함하고 있는 블록이지만 이 블록은 JavaScript에서 중요한 역할을 하지 않으므로 제거하는 것이 좋습니다.
다음과 같이 수정을 제안합니다:
if (isLastPage) { - { /* 데이터 전송 추가 */ - } } else { setCurrentPage(currentPage + 1); - { /* 데이터 전송 추가 */ - } }🧰 Tools
🪛 Biome (1.9.4)
[error] 28-30: This block statement doesn't serve any purpose and can be safely removed.
Standalone block statements without any block-level declarations are redundant in JavaScript and can be removed to simplify the code.
Safe fix: Remove redundant block.(lint/complexity/noUselessLoneBlockStatements)
src/features/dashboard/ui/ResponsesList.tsx (1)
24-31: 옵셔널 체이닝을 사용하여 코드를 개선할 수 있습니다.현재 코드는
response && response[0]의 형태로 체크하고 있는데, 옵셔널 체이닝을 사용하면 더 간결하게 작성할 수 있습니다.다음과 같이 수정을 제안합니다:
- const queryOptions = - response && response[0] - ? Object.keys(response[0]) - .filter(key => key !== 'id' && key !== 'selectedOptions') - .map(key => ({ - v1: fieldMap[key] || key, - v2: '', - })) - : []; + const queryOptions = response?.[0] + ? Object.keys(response[0]) + .filter(key => key !== 'id' && key !== 'selectedOptions') + .map(key => ({ + v1: fieldMap[key] || key, + v2: '', + })) + : [];🧰 Tools
🪛 Biome (1.9.4)
[error] 24-24: Change to an optional chain.
Unsafe fix: Change to an optional chain.
(lint/complexity/useOptionalChain)
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (6)
src/features/dashboard/ui/EmailInput.tsx(3 hunks)src/features/dashboard/ui/ResponsesList.tsx(1 hunks)src/pages/dashboard/ui/mail/MailBoxPage.tsx(3 hunks)src/pages/dashboard/ui/ticket/TIcketConfirmPage.tsx(6 hunks)src/shared/ui/backgrounds/TicketOptionLayout.tsx(1 hunks)src/widgets/dashboard/ui/email/EmailDeleteModal.tsx(3 hunks)
🚧 Files skipped from review as they are similar to previous changes (4)
- src/widgets/dashboard/ui/email/EmailDeleteModal.tsx
- src/pages/dashboard/ui/mail/MailBoxPage.tsx
- src/pages/dashboard/ui/ticket/TIcketConfirmPage.tsx
- src/features/dashboard/ui/EmailInput.tsx
🧰 Additional context used
🧬 Code Graph Analysis (1)
src/shared/ui/backgrounds/TicketOptionLayout.tsx (1)
src/features/dashboard/model/store/TicketOptionStore.tsx (1)
useTicketOptionStore(18-33)
🪛 Biome (1.9.4)
src/features/dashboard/ui/ResponsesList.tsx
[error] 24-24: Change to an optional chain.
Unsafe fix: Change to an optional chain.
(lint/complexity/useOptionalChain)
src/shared/ui/backgrounds/TicketOptionLayout.tsx
[error] 28-30: This block statement doesn't serve any purpose and can be safely removed.
Standalone block statements without any block-level declarations are redundant in JavaScript and can be removed to simplify the code.
Safe fix: Remove redundant block.
(lint/complexity/noUselessLoneBlockStatements)
[error] 35-36: This block statement doesn't serve any purpose and can be safely removed.
Standalone block statements without any block-level declarations are redundant in JavaScript and can be removed to simplify the code.
Safe fix: Remove redundant block.
(lint/complexity/noUselessLoneBlockStatements)
🔇 Additional comments (4)
src/shared/ui/backgrounds/TicketOptionLayout.tsx (2)
7-7: 스토어 임포트 경로 업데이트가 잘 적용되었습니다.FSD(Feature-Sliced Design) 방법론에 맞게
useTicketOptionStore의 임포트 경로가 업데이트되었습니다. 이는 PR의 목표인 파일 구조 리팩토링과 일치합니다.
46-51: 페이지 인디케이터 구현이 잘 개선되었습니다.이전에 불필요한
pageIndicator변수를 사용하던 코드가 제거되고, 배열을 직접 생성하여 렌더링하도록 개선되었습니다. 이는 코드의 가독성과 효율성을 향상시킵니다.src/features/dashboard/ui/ResponsesList.tsx (2)
1-1: 스토어 임포트 경로 업데이트가 잘 적용되었습니다.FSD(Feature-Sliced Design) 방법론에 맞게
useResponseStore의 임포트 경로가 업데이트되었습니다. 이는 PR의 목표인 파일 구조 리팩토링과 일치합니다.
37-37: 타입 애노테이션이 개선되었습니다.
key파라미터의 타입 애노테이션이 더 정확하게 개선되었습니다.keyof typeof responsesInfo[0]에서keyof (typeof responsesInfo)[0]로 변경되어 정확한 타입 추론이 가능해졌습니다.
Summary by CodeRabbit
신규 기능
버그 수정
리팩터
스타일
문서/타입