[π Bug/312] λμ보λ μν λ³κ²½ μ μ»¬λΌ λ¦¬ν¨μΉ μ€λ₯ ν΄κ²°#313
[π Bug/312] λμ보λ μν λ³κ²½ μ μ»¬λΌ λ¦¬ν¨μΉ μ€λ₯ ν΄κ²°#313
Conversation
|
Caution Review failedThe pull request is closed. Walkthrough컬λΌλ³ 리ν¨μΉ μ½λ°± λ±λ‘(onRegisterRefetch)κ³Ό μΉ΄λ μ΄λ μλ¦Ό(onCardMoved)μ μΆκ°νκ³ , μΉ΄λ μ λ°μ΄νΈλ₯Ό μν μ ν (useUpdateCard)μ λμ ν΄ ColumnCardList, CardDetailModal, DashboardDetail μ¬μ΄μ 리ν¨μΉ/μ΄λ μ²λ¦¬ νλ¦μ μ°κ²°ν©λλ€. Changes
Estimated code review effortπ― 3 (Moderate) | β±οΈ ~25 minutes
Possibly related PRs
Suggested reviewers
Pre-merge checks and finishing touchesβ Passed checks (5 passed)
π Recent review detailsConfiguration used: CodeRabbit UI Review profile: CHILL Plan: Pro π Files selected for processing (1)
Comment |
There was a problem hiding this comment.
Actionable comments posted: 1
π§Ή Nitpick comments (1)
src/components/dashboard-detail/card/ColumnCardList.tsx (1)
120-154: μΉ΄λ μ»¬λΌ μ΄λ κ°μ§ λ‘μ§μ΄ μ ννκ² κ΅¬νλμμ΅λλ€.ꡬνμ΄ κ²¬κ³ ν©λλ€:
- oldCard μ‘΄μ¬ μ¬λΆ νμΈμΌλ‘ μμ μ± ν보
- κ°μ μ»¬λΌ λ΄ μ λ°μ΄νΈμ λ€λ₯Έ 컬λΌμΌλ‘μ μ΄λμ λͺ νν ꡬλΆ
- μ΄λ μ totalCount κ°μ μ²λ¦¬ λ° onCardMoved νΈμΆ
λ€λ§ Lines 121-122μ
letλ³μλ₯Ό ν΄λ‘μ μμ μ¬μ©νλ ν¨ν΄μ μ ννμ§λ§ κ°λ μ± μΈ‘λ©΄μμ μ½κ° 볡μ‘ν μ μμ΅λλ€.κ°λ μ±μ μν΄ λ€μκ³Ό κ°μ΄ 리ν©ν λ§μ κ³ λ €ν μ μμ΅λλ€:
const handleUpdateCard = (updated: CardDetailResponse) => { - let fromColumnId: number | null = null; - let toColumnId: number | null = null; + let movedColumns: { from: number; to: number } | null = null; infiniteSetData((prev) => { if (!prev) { return prev; } const oldCard = prev.cards.find((c) => c.id === updated.id); if (!oldCard) { return prev; } if (oldCard.columnId === updated.columnId) { return { ...prev, cards: prev.cards.map((c) => (c.id === updated.id ? updated : c)), }; } - fromColumnId = oldCard.columnId; - toColumnId = updated.columnId; + movedColumns = { from: oldCard.columnId, to: updated.columnId }; return { ...prev, cards: prev.cards.filter((c) => c.id !== updated.id), totalCount: prev.totalCount - 1, }; }); - if (fromColumnId !== null && toColumnId !== null) { - onCardMoved(fromColumnId, toColumnId); + if (movedColumns) { + onCardMoved(movedColumns.from, movedColumns.to); } };
π Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
π Files selected for processing (4)
src/components/dashboard-detail/card/ColumnCardList.tsx(6 hunks)src/components/dashboard-detail/modal/card-detail-modal/CardDetailModal.tsx(2 hunks)src/hooks/dashboard-detail/useUpdateCard.ts(1 hunks)src/pages/DashboardDetail.tsx(4 hunks)
π§° Additional context used
π Path-based instructions (2)
**/*.tsx
βοΈ CodeRabbit configuration file
**/*.tsx: reviews:
instructions: |
μ°λ¦¬ νμ λ€μμ μ½λ μ€νμΌ κ°μ΄λλ₯Ό λ°λ¦ λλ€:[κΈ°λ³Έ κ·μΉ] - λ³μλ const μ°μ μ¬μ© - νμΌλͺ μ PascalCaseλ‘ μμ± - μ»΄ν¬λνΈλ default exportλ₯Ό μ¬μ© - νμΌλͺ κ³Ό μ»΄ν¬λνΈλͺ μ λ°λμ μΌμΉ (PascalCase) - λΆνμν propsλ μ λ¬νμ§ μκΈ° - UI κ΄λ ¨ μνλ λͺ νν μ΄λ¦ μ¬μ© (isOpen, isLoading λ±) [ν¨μ λ€μ΄λ° κ·μΉ] - λͺ¨λ ν¨μλ **λμ¬ + λͺ©μ μ΄** - UI μ΄λ²€νΈ νΈλ€λ¬λ handle* μ¬μ© (handleClick, handleToggle λ±) - λ΄λΆ λ‘μ§μ calculate / convert / format λ± μλ―Έ κΈ°λ° λ€μ΄λ° μ¬μ© [λλ ν 리 & νμΌ κ΅¬μ‘°] - λλ ν 리λ kebab-case - μ»΄ν¬λνΈ νμΌμ PascalCase - assetsλ index κΈ°λ° export (Icons, Images, Logos λ±) - import μ κ·Έλ£Ή λ¨μ import μ¬μ© [μμ / νκ²½ λ³μ] - SNAKE_CASE μ¬μ© - μ: PAGE_SIZE, API_URL [ν¨μ μ μΈ κ·μΉ] - μ»΄ν¬λνΈλ μ μΈμ function Component() νν - μ»΄ν¬λνΈ λ΄λΆμ λ‘μ§ ν¨μλ νμ΄ν ν¨μ μ¬μ© - μ νΈμ± μ»΄ν¬λνΈκ° μλλ©΄ default export [μ£Όμ & λ¬Έμν] - TODO μ£Όμ μ¬μ© (λ―Έμμ± μ½λ νμ) - TSDocμ μ»΄ν¬λνΈ λ¨μλ‘ νμ© - μμλ₯Ό ν¬ν¨ν κ°λ¨ν μ€λͺ μΆκ°
Files:
src/pages/DashboardDetail.tsxsrc/components/dashboard-detail/modal/card-detail-modal/CardDetailModal.tsxsrc/components/dashboard-detail/card/ColumnCardList.tsx
**/*.ts
βοΈ CodeRabbit configuration file
**/*.ts: language: "ko-KR"reviews:
instructions: |
μ°λ¦¬ νμ λ€μμ μ½λ μ€νμΌ κ°μ΄λλ₯Ό λ°λ¦ λλ€:[κΈ°λ³Έ κ·μΉ] - λ³μλ νμ const μ°μ μ¬μ© - νμΌλͺ μ camelCaseλ‘ μμ± - νμ μλ μ½λλ μ¦μ μ κ±° (λ―Έμ¬μ© λ³μ/ν¨μ κΈμ§) - ν¨μλ₯Ό μ μΈν μ νΈ νμΌμ default export λμ named export κΆμ₯ [ν¨μ λ€μ΄λ° κ·μΉ] - λͺ¨λ ν¨μλ **λμ¬ + λͺ©μ μ΄** ννλ‘ μμ± - λ°μ΄ν° μ‘°ν ν¨μ: get / fetch / load - λ°μ΄ν° μμ ν¨μ: set / update / save / remove - μ΄λ²€νΈ ν¨μ: handle μ¬μ© - κ³μ° / λ³ν ν¨μ: calculate / convert / parse / format - 쑰건 κ²μ¬ ν¨μ: is / has / can [λλ ν 리 & νμΌ κ΅¬μ‘°] - λλ ν 리λͺ μ kebab-case μ¬μ© - μμ (icon, image, logos)μ index νμΌμ ν΅ν μΌκ΄ export - import μ `@/assets/icons` ννλ‘ κ·Έλ£Ή λ¨μ import [μμ / νκ²½ λ³μ] - SNAKE_CASE μ¬μ© - μ: PAGE_SIZE, API_URL [μ£Όμ & λ¬Έμν] - TODO μ£Όμ μ κ·Ή νμ© (κΈν PR / 미ꡬν μμ) - TSDoc μ¬μ© κ°λ₯ (μ»΄ν¬λνΈ μ€λͺ , μ¬μ© μμ μΆκ°) - @paramμ TypeScript νμ μΌλ‘ μ€λͺ νκΈ° λλ¬Έμ λΉμ¬μ©
Files:
src/hooks/dashboard-detail/useUpdateCard.ts
π§ Learnings (2)
π Learning: 2025-11-29T18:56:30.435Z
Learnt from: aahreum
Repo: sprint-19-part3-7team/Taskify-Frontend PR: 265
File: src/pages/DashboardDetail.tsx:106-116
Timestamp: 2025-11-29T18:56:30.435Z
Learning: In src/pages/DashboardDetail.tsx, column names (title field) are allowed to contain leading or trailing whitespace. Trimming whitespace from column names is not required.
Applied to files:
src/pages/DashboardDetail.tsxsrc/components/dashboard-detail/card/ColumnCardList.tsx
π Learning: 2025-12-01T01:09:10.680Z
Learnt from: aahreum
Repo: sprint-19-part3-7team/Taskify-Frontend PR: 287
File: src/lib/apis/Invitations.ts:31-35
Timestamp: 2025-12-01T01:09:10.680Z
Learning: In this codebase, mutation functions (POST/PUT/DELETE) return the full response object (`res`) instead of `res.data`, because `useMutation` internally processes `res.data`. Only GET methods return `res.data` directly.
Applied to files:
src/components/dashboard-detail/modal/card-detail-modal/CardDetailModal.tsx
𧬠Code graph analysis (1)
src/hooks/dashboard-detail/useUpdateCard.ts (3)
src/types/card.ts (1)
CardDetailResponse(10-22)src/lib/apis/cards.ts (2)
UpdateCardType(3-11)updateCard(51-54)src/hooks/useMutation.ts (1)
TData(11-59)
π Additional comments (7)
src/pages/DashboardDetail.tsx (3)
1-1: 컬λΌλ³ 리ν¨μΉ κ΄λ¦¬λ₯Ό μν useRef λμ μ΄ μ μ ν©λλ€.
useRefλ₯Ό μ¬μ©νμ¬ μ»¬λΌλ³ 리ν¨μΉ ν¨μλ₯Ό μ μ₯νλ λ°©μμ 리λ λλ§μ μ λ°νμ§ μμΌλ©΄μλ μ΅μ μ½λ°±μ μ μ§ν μ μλ μ¬λ°λ₯Έ μ κ·Όμ λλ€.Also applies to: 37-37
118-129: μΉ΄λ μ΄λ κ°μ§ λ° μλ 리ν¨μΉ λ‘μ§μ΄ μ ꡬνλμμ΅λλ€.λ ν¨μμ μν μ΄ λͺ ννλ©° ꡬνμ΄ μ νν©λλ€:
registerRefetch: 컬λΌλ³ 리ν¨μΉ ν¨μ λ±λ‘handleCardMoved: μΉ΄λ μ΄λ μ μμͺ½ μ»¬λΌ μλ 리ν¨μΉλμΌ μ»¬λΌ λ΄ μ΄λμ μ‘°κΈ° λ°ννμ¬ λΆνμν 리ν¨μΉλ₯Ό λ°©μ§ν μ λ μ’μ΅λλ€.
207-208: ColumnCardListμ μ props μ λ¬μ΄ μ¬λ°λ¦ λλ€.컬λΌλ³ 리ν¨μΉ λ±λ‘κ³Ό μΉ΄λ μ΄λ μλ¦Όμ μν μ½λ°±μ΄ μ μ ν μ λ¬λκ³ μμ΅λλ€.
src/components/dashboard-detail/modal/card-detail-modal/CardDetailModal.tsx (2)
9-9: useUpdateCard ν μΌλ‘μ 리ν©ν λ§μ΄ μ μ ν©λλ€.μΉ΄λ μ λ°μ΄νΈ λ‘μ§μ 컀μ€ν ν μΌλ‘ μΆμννμ¬ μ¬μ¬μ©μ±κ³Ό μ μ§λ³΄μμ±μ΄ ν₯μλμμ΅λλ€. import μ 리λ κΉλνκ² μ²λ¦¬λμμ΅λλ€.
Also applies to: 14-14
78-83: μλ‘μ΄ λ¦¬ν¨μΉ μ λ΅μ λ§μΆ μ λ°μ΄νΈ νλ¦μ΄ μ¬λ°λ¦ λλ€.
cardDetailQuery.refetch()λμeditModal.handleModalCloseAll()μ μ¬μ©νκ³ , 컬λΌλ³ 리ν¨μΉλonUpdateCard(updated)λ₯Ό ν΅ν΄ μμμμ μ²λ¦¬νλλ‘ λ³κ²½ν κ²μ΄ μλ‘μ΄ μν€ν μ²μ μΌκ΄μ± μκ² κ΅¬νλμμ΅λλ€.src/hooks/dashboard-detail/useUpdateCard.ts (1)
1-21: μΉ΄λ μ λ°μ΄νΈ λ‘μ§μ μ¬μ¬μ© κ°λ₯ν ν μΌλ‘ μ μΆμννμ΅λλ€.ꡬνμ΄ κΉλνκ³ νμ μμ μ±λ ν보λμ΄ μμ΅λλ€:
UseUpdateCardOptionsμΈν°νμ΄μ€λ‘ λͺ νν API μ 곡onSuccessμ½λ°±μ ν΅ν μ μ°ν νμ²λ¦¬ μ§μ- Lines 13-15μ λ°©μ΄μ κ°λκ° κ²¬κ³ μ±μ λμ
ν μ½λ© κ°μ΄λλΌμΈλ μ μ€μλμμ΅λλ€ (camelCase νμΌλͺ , default export, λμ¬+λͺ©μ μ΄ λ€μ΄λ°).
src/components/dashboard-detail/card/ColumnCardList.tsx (1)
24-25: 컬λΌλ³ 리ν¨μΉ λ° μΉ΄λ μ΄λ κ°μ§λ₯Ό μν props μΆκ°κ° μ μ ν©λλ€.μλ‘μ΄ propsλ₯Ό ν΅ν΄ μμ μ»΄ν¬λνΈμμ ν΅μ μ΄ λͺ ννκ² κ΅¬νλμμ΅λλ€.
Also applies to: 36-37
β PR 체ν¬λ¦¬μ€νΈ
1. μ½λ & κΈ°λ₯
2. UI
3. 컨벀μ
π μ΄μ λ²νΈ
β¨ μμ ν λ΄μ©
π 리뷰 μμ² / μ½λ©νΈ
π‘ μ°Έκ³ μ¬ν
Summary by CodeRabbit
New Features
κ°μ μ¬ν
βοΈ Tip: You can customize this high-level summary in your review settings.