Skip to content

Conversation

@evaain706
Copy link
Contributor

@evaain706 evaain706 commented Aug 3, 2025

📌 변경 사항 개요

QA사항수정 및 리팩토링

📝 상세 내용

  • 체험등록 성공시 체험상세페이지로 이동
  • 체험 등록시 가격인풋 number 수정
  • 로직 리팩토링

🔗 관련 이슈

🖼️ 스크린샷(선택사항)

💡 참고 사항

Summary by CodeRabbit

  • 신규 기능

    • 예약 폼과 액티비티 수정 폼에 로딩 상태 표시 기능이 추가되었습니다.
    • 예약 및 액티비티 생성 로직이 커스텀 훅으로 분리되어 더욱 안정적으로 동작합니다.
    • 예약 처리용 커스텀 훅이 도입되어 예약 성공 시 상태 초기화 및 알림 기능이 강화되었습니다.
  • 버그 수정

    • 모바일 예약창에서 가격이 실제 값으로 표시되도록 개선되었습니다.
  • 스타일

    • 태블릿 예약 모달에 라운드 스타일이 적용되었습니다.
    • 모바일 예약 모달 zIndex 조정으로 UI 겹침 문제 개선.
    • 버튼 컴포넌트에 로딩 중 시각적 피드백과 비활성화 기능이 추가되었습니다.
  • 리팩터링

    • 예약 관련 상태 초기화가 한 번에 이루어지도록 개선되었습니다.

@evaain706 evaain706 self-assigned this Aug 3, 2025
@coderabbitai
Copy link

coderabbitai bot commented Aug 3, 2025

Walkthrough

이 변경사항은 예약 및 활동 생성/수정 폼의 상태 관리와 제출 로직을 커스텀 훅으로 분리하고, 버튼 컴포넌트에 로딩 상태를 추가하며, 예약 관련 전역 상태 초기화 메서드와 타입을 도입합니다. 일부 UI 구성요소의 스타일 및 prop 타입도 조정되었습니다.

Changes

Cohort / File(s) Change Summary
활동 폼 로직 분리 및 리팩터링
src/app/(with-header)/myactivity/components/ReservationForm.tsx,
src/app/(with-header)/myactivity/hooks/useCreateActivityForm.ts,
src/app/(with-header)/myactivity/[id]/components/EditActivityForm.tsx,
src/app/(with-header)/myactivity/[id]/hooks/useEditActivityForm.ts
ReservationForm과 EditActivityForm의 상태 및 제출 로직을 각각 useCreateActivityForm, useEditActivityForm 커스텀 훅으로 분리 및 리팩터링. price 타입을 string으로 변경, 이미지 업로드 및 제출 흐름을 mutation 기반으로 전환, loading 상태 관리 추가.
InfoSection prop 타입 변경
src/app/(with-header)/myactivity/components/InfoSection.tsx
price prop의 타입을 number에서 string으로 변경, 기본값을 ''로 수정, 일부 JSX 및 스타일 정리.
버튼 컴포넌트 로딩 상태 지원
src/components/Button.tsx,
src/types/buttonTypes.ts
Button 컴포넌트에 isLoading prop 추가, 로딩 시 비활성화 및 로딩 인디케이터 표시. ButtonProps에 isLoading 속성 추가.
예약 관련 상태 관리 개선
src/components/FloatingBox/BookingInterface.tsx,
src/components/FloatingBox/hooks/useBookingMutation.ts,
src/stores/Booking/useBookingStore.ts,
src/types/bookingStoreTypes.ts
예약 완료 시 여러 상태를 개별적으로 초기화하던 것을 setToInitial 메서드로 통합. useBookingMutation 훅 신설, BookingState에 setToInitial 메서드 추가 및 타입 정의. 가격 표시 동적 반영.
UI 스타일 조정
src/ui/TabletBookingModal.tsx,
src/ui/MobileBookingModal.tsx
TabletBookingModal에 rounded-md 클래스 추가, MobileBookingModal에 zIndex 300 스타일 추가.

Sequence Diagram(s)

sequenceDiagram
  participant User
  participant ReservationForm
  participant useCreateActivityForm
  participant API

  User->>ReservationForm: 폼 입력 및 제출
  ReservationForm->>useCreateActivityForm: handleSubmit 호출
  useCreateActivityForm->>API: 이미지 업로드 및 POST /addActivity
  API-->>useCreateActivityForm: 응답(성공/실패)
  useCreateActivityForm-->>ReservationForm: 결과 및 로딩 상태 전달
  ReservationForm-->>User: 성공/실패 토스트 및 페이지 이동
Loading
sequenceDiagram
  participant User
  participant EditActivityForm
  participant useEditActivityForm
  participant API

  User->>EditActivityForm: 폼 수정 및 제출
  EditActivityForm->>useEditActivityForm: handleSubmit 호출
  useEditActivityForm->>API: 이미지 업로드 및 PATCH /activities/{id}
  API-->>useEditActivityForm: 응답(성공/실패)
  useEditActivityForm-->>EditActivityForm: 결과 및 로딩 상태 전달
  EditActivityForm-->>User: 성공/실패 토스트 및 페이지 이동
Loading
sequenceDiagram
  participant User
  participant BookingInterface
  participant useBookingMutation
  participant API
  participant BookingStore

  User->>BookingInterface: 예약 정보 입력 및 제출
  BookingInterface->>useBookingMutation: mutate 호출
  useBookingMutation->>API: POST /activities/{id}/reservation
  API-->>useBookingMutation: 응답(성공/실패)
  useBookingMutation->>BookingStore: setToInitial 호출
  useBookingMutation-->>BookingInterface: 결과 및 토스트 전달
  BookingInterface-->>User: 성공/실패 토스트 및 UI 초기화
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20분

Possibly related PRs

Suggested reviewers

  • LeeCh0129
  • minimo-9

Poem

🐇
새로워진 폼과 버튼,
로딩 중엔 깜빡이는 춤,
예약도 척척, 상태는 싹~
커스텀 훅이 알아서 착착!
둥근 모서리, 부드러운 밤,
코드 속 토끼는 아주 흡족함!

Note

⚡️ Unit Test Generation is now available in beta!

Learn more here, or try it out under "Finishing Touches" below.

✨ Finishing Touches
  • 📝 Generate Docstrings
🧪 Generate unit tests
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch fix/117

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
🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • 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 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 for this PR.
  • @coderabbitai generate sequence diagram to generate a sequence diagram of the changes in this PR.
  • @coderabbitai generate unit tests to generate unit tests for 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 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 for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

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

📜 Review details

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

📥 Commits

Reviewing files that changed from the base of the PR and between 214c0a8 and 79cfc1b.

📒 Files selected for processing (12)
  • src/app/(with-header)/myactivity/[id]/components/EditActivityForm.tsx (3 hunks)
  • src/app/(with-header)/myactivity/[id]/hooks/useEditActivityForm.ts (6 hunks)
  • src/app/(with-header)/myactivity/components/InfoSection.tsx (5 hunks)
  • src/app/(with-header)/myactivity/components/ReservationForm.tsx (3 hunks)
  • src/app/(with-header)/myactivity/hooks/useCreateActivityForm.ts (1 hunks)
  • src/components/Button.tsx (2 hunks)
  • src/components/FloatingBox/BookingInterface.tsx (3 hunks)
  • src/components/FloatingBox/hooks/useBookingMutation.ts (1 hunks)
  • src/stores/Booking/useBookingStore.ts (1 hunks)
  • src/types/bookingStoreTypes.ts (1 hunks)
  • src/types/buttonTypes.ts (1 hunks)
  • src/ui/TabletBookingModal.tsx (1 hunks)
🧰 Additional context used
🧬 Code Graph Analysis (2)
src/types/buttonTypes.ts (1)
src/app/(with-header)/mypage/reservations/components/CancelReservationModal.tsx (1)
  • CancelReservationModalProps (7-12)
src/components/Button.tsx (2)
src/lib/utils.ts (1)
  • cn (4-6)
src/app/(with-header)/mypage/reservations/components/CancelReservationModal.tsx (1)
  • CancelReservationModal (14-65)
🪛 GitHub Actions: CI
src/app/(with-header)/myactivity/[id]/hooks/useEditActivityForm.ts

[error] 179-179: @typescript-eslint/no-unused-vars: 'error' is defined but never used.

🔇 Additional comments (28)
src/ui/TabletBookingModal.tsx (1)

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

모달 컨테이너에 rounded-md 클래스를 추가하여 시각적 일관성을 개선한 변경사항입니다.

src/types/buttonTypes.ts (1)

23-23: 로딩 상태 지원을 위한 타입 확장이 적절합니다

isLoading 속성 추가로 버튼 컴포넌트의 로딩 상태 표시를 지원하여 사용자 경험을 개선합니다.

src/types/bookingStoreTypes.ts (1)

23-23: 상태 초기화 메서드 추가로 코드 품질이 개선됩니다

setToInitial 메서드 추가로 여러 개별 setter 호출을 하나의 메서드로 통합하여 상태 관리가 더욱 깔끔해집니다.

src/components/FloatingBox/BookingInterface.tsx (3)

38-38: 상태 관리 개선을 위한 적절한 추가입니다

통합된 초기화 메서드를 사용하기 위해 setToInitial을 추가했습니다.


52-52: 상태 초기화 로직이 깔끔하게 리팩토링되었습니다

여러 개별 setter 호출을 setToInitial() 하나로 통합하여 코드가 더욱 간결해지고 유지보수성이 향상되었습니다.


152-152: 하드코딩된 가격을 동적 값으로 수정한 좋은 개선입니다

기존 하드코딩된 "₩ 10,000" 문자열을 props로 전달받은 실제 price 값으로 변경하여 정확한 가격 표시가 가능해졌습니다.

src/app/(with-header)/myactivity/[id]/components/EditActivityForm.tsx (3)

27-27: 로딩 상태 관리를 위한 적절한 추가입니다

폼 제출 중 로딩 상태를 표시하기 위해 editLoading을 추가했습니다.


62-62: 버튼 로딩 상태 추가로 사용자 경험이 개선됩니다

isLoading prop 추가로 폼 제출 중 중복 클릭 방지 및 로딩 표시가 가능해져 사용자 경험이 향상됩니다.


78-78: 가격 변경 핸들러가 간소화되었습니다

setPrice를 직접 전달하여 코드가 더욱 간결해졌습니다.

src/components/Button.tsx (1)

24-24: 로딩 상태 구현이 잘 되었습니다!

isLoading prop 추가와 disabled 상태 처리가 적절하게 구현되었습니다. 사용자 경험을 위한 좋은 개선사항입니다.

Also applies to: 39-39, 48-48

src/app/(with-header)/myactivity/components/InfoSection.tsx (2)

11-11: 가격 타입 변경이 적절합니다

입력 처리를 위해 price를 string 타입으로 변경한 것이 좋은 결정입니다. 사용자 입력을 더 유연하게 처리할 수 있습니다.

Also applies to: 24-24, 66-71


45-45: 코드 포맷팅 개선

불필요한 빈 줄 제거와 AddressInput props 정리가 코드 가독성을 향상시켰습니다.

Also applies to: 63-63, 74-76

src/stores/Booking/useBookingStore.ts (1)

4-21: 상태 초기화 로직 개선이 훌륭합니다!

초기 상태를 별도 상수로 분리하고 setToInitial 메서드를 추가한 것이 매우 좋은 리팩토링입니다. 이를 통해:

  • 초기 상태 관리가 명확해졌습니다
  • 상태 리셋이 한 번의 호출로 가능해졌습니다
  • 코드 유지보수성이 향상되었습니다

Also applies to: 39-39

src/components/FloatingBox/hooks/useBookingMutation.ts (1)

35-48: 에러 처리가 잘 구현되었습니다

다양한 에러 케이스를 고려한 메시지 처리와 폴백 메시지 제공이 좋습니다.

src/app/(with-header)/myactivity/components/ReservationForm.tsx (2)

3-33: 커스텀 훅을 활용한 리팩토링이 훌륭합니다!

useCreateActivityForm 훅으로 상태 관리와 로직을 분리한 것이 매우 좋은 리팩토링입니다:

  • 컴포넌트가 프레젠테이션 레이어에 집중하게 되었습니다
  • 로직 재사용성이 향상되었습니다
  • 버튼의 로딩 상태 처리가 깔끔하게 통합되었습니다

PR 목표인 코드 품질 개선이 잘 달성되었습니다.

Also applies to: 45-45, 61-61


39-51: 리다이렉션 로직이 정상적으로 구현되었습니다

useCreateActivityForm 훅의 onSuccess 콜백에서

router.push(`/activities/${data.id}`);

를 호출하여 등록 성공 시 체험 상세 페이지로 리다이렉션되도록 이미 구현되어 있습니다. 추가 확인이나 수정은 필요하지 않습니다.

• 파일: src/app/(with-header)/myactivity/hooks/useCreateActivityForm.ts
– onSuccess 콜백 (router.push(/activities/${data.id}))

src/app/(with-header)/myactivity/[id]/hooks/useEditActivityForm.ts (5)

5-5: React Query 훅 추가 확인

useMutation 훅이 새로 추가되어 폼 제출 로직이 개선되었습니다.


24-24: 가격 상태 타입 변경 확인

가격이 숫자에서 문자열로 변경되었습니다. 이는 입력 필드에서 더 나은 사용자 경험을 제공할 것입니다.


48-48: 가격 초기화 로직 확인

data.price.toString()을 사용하여 숫자를 문자열로 변환하는 것이 적절합니다.


104-173: mutation 구현 검토

React Query의 useMutation을 사용한 리팩토링이 잘 구현되었습니다. 에러 처리와 성공 콜백이 적절히 구현되어 있습니다.


193-193: 로딩 상태 노출 확인

editLoading 상태가 적절히 노출되어 버튼 컴포넌트에서 사용할 수 있습니다.

src/app/(with-header)/myactivity/hooks/useCreateActivityForm.ts (7)

11-15: DateSlot 인터페이스 정의 확인

인터페이스가 명확하게 정의되어 있고 필요한 필드들이 포함되어 있습니다.


17-27: 상태 초기화 확인

모든 필요한 상태가 적절한 초기값으로 설정되어 있습니다. 가격이 문자열로 관리되는 것도 입력 필드와 일관성이 있습니다.


31-73: mutation 로직 구현 검토

React Query의 useMutation을 사용한 구현이 잘 되어 있습니다. 유효성 검사, 에러 처리, 성공 후 네비게이션이 모두 적절히 구현되어 있습니다.


75-91: 날짜 처리 함수들 확인

날짜 슬롯 추가, 제거, 수정 함수들이 올바르게 구현되어 있습니다.


93-121: 이미지 처리 로직 검토

메인 이미지와 서브 이미지 처리가 잘 구현되어 있습니다. 서브 이미지 개수 제한(4개)도 적절히 적용되어 있습니다.


123-137: 폼 제출 유효성 검사 확인

필수 필드들에 대한 유효성 검사가 적절히 구현되어 있습니다.


139-162: 반환값 구조 확인

훅이 반환하는 모든 값들이 적절히 구성되어 있고, 로딩 상태도 올바르게 노출되어 있습니다.

{...props}
>
{children}
{isLoading ? <span className='animate-pulse'>로딩중...</span> : children}
Copy link

Choose a reason for hiding this comment

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

🧹 Nitpick (assertive)

로딩 텍스트를 props로 받는 것을 고려해보세요

현재 '로딩중...' 텍스트가 하드코딩되어 있습니다. 다양한 컨텍스트에서 사용될 수 있도록 선택적 prop으로 받는 것을 고려해보세요.

export default function Button({
  type = 'button',
  className = '',
  children,
  variant,
  selected,
  isLoading = false,
+  loadingText = '로딩중...',
  ...props
}: ButtonProps) {
-      {isLoading ? <span className='animate-pulse'>로딩중...</span> : children}
+      {isLoading ? <span className='animate-pulse'>{loadingText}</span> : children}
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
{isLoading ? <span className='animate-pulse'>로딩중...</span> : children}
export default function Button({
type = 'button',
className = '',
children,
variant,
selected,
isLoading = false,
loadingText = '로딩중...',
...props
}: ButtonProps) {
return (
<button
type={type}
className={className}
{...props}
>
{isLoading
? <span className="animate-pulse">{loadingText}</span>
: children}
</button>
);
}
🤖 Prompt for AI Agents
In src/components/Button.tsx at line 48, the loading text '로딩중...' is hardcoded.
Modify the component to accept an optional prop for the loading text, defaulting
to '로딩중...' if not provided, and replace the hardcoded string with this prop to
allow customizable loading messages.

Comment on lines +8 to +17
export function useBookingMutation(onSuccessCallback?: () => void) {
const { id } = useParams();
const {
selectedTimeId,
participants,
setSelectedDate,
setSelectedTime,
setSelectedTimeId,
} = useBookingStore();
const setIsOpen = useBookingStore((state) => state.setIsOpen);
Copy link

Choose a reason for hiding this comment

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

🛠️ Refactor suggestion

setToInitial 메서드 사용을 권장합니다

useBookingStore에 새로 추가된 setToInitial 메서드를 사용하면 코드가 더 간결해집니다.

  const {
    selectedTimeId,
    participants,
-   setSelectedDate,
-   setSelectedTime,
-   setSelectedTimeId,
+   setToInitial,
  } = useBookingStore();
    onSuccess: () => {
      toast.success('예약되었습니다!');
-     setSelectedDate(null);
-     setSelectedTime('');
-     setSelectedTimeId(null);
+     setToInitial();
      setIsOpen(false);
      onSuccessCallback?.();
    },

Also applies to: 26-33

🤖 Prompt for AI Agents
In src/components/FloatingBox/hooks/useBookingMutation.ts around lines 8 to 17
and also lines 26 to 33, replace the multiple individual state setters from
useBookingStore with the newly added setToInitial method. This will simplify the
code by resetting the booking state to its initial values in a single call
instead of setting each state property separately.

@evaain706 evaain706 added the 🔨 Refactor 코드 리팩토링 label Aug 3, 2025
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

🔭 Outside diff range comments (1)
src/ui/MobileBookingModal.tsx (1)

51-52: 모바일 예약 모달: 잘못된 Tailwind min-h-400 클래스 수정 필요

Tailwind 기본 프리셋에 min-h-400 클래스는 정의되어 있지 않습니다. 브라우저에 적용되지 않으므로 아래와 같이 임의 값 유틸리티 방식으로 수정하세요.

수정 제안:

- <Modal.Item className='relative min-h-400'>
+ <Modal.Item className='relative min-h-[400px]'>

- <div className='flex min-h-400 items-center justify-center'>
+ <div className='flex min-h-[400px] items-center justify-center'>

- <div className='flex min-h-400 flex-col items-center justify-center gap-20'>
+ <div className='flex min-h-[400px] flex-col items-center justify-center gap-20'>

대상 위치 (파일: src/ui/MobileBookingModal.tsx):

  • 51행
  • 64행
  • 69행
📜 Review details

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

📥 Commits

Reviewing files that changed from the base of the PR and between 64109df and 45af1aa.

📒 Files selected for processing (1)
  • src/ui/MobileBookingModal.tsx (1 hunks)

return (
<Modal isOpen={isOpen} onOpenChange={setIsOpen}>
<Modal.Content>
<Modal.Content zIndex={300}>
Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue

zIndex 속성은 Modal.Content의 정의에 없을 가능성이 높습니다

Modal.Content가 Radix/Dialog 래퍼이거나 styled-component라면, 임의 prop(zIndex)은 타입 오류 또는 DOM 속성 누락 경고를 유발할 수 있습니다. 일관된 유틸리티 사용을 위해 Tailwind CSS 임의 값 또는 style/css prop으로 전달하세요.

-      <Modal.Content zIndex={300}>
+      <Modal.Content className='z-[300]'>
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
<Modal.Content zIndex={300}>
<Modal.Content className='z-[300]'>
🤖 Prompt for AI Agents
In src/ui/MobileBookingModal.tsx at line 45, the zIndex prop is passed directly
to Modal.Content, which likely does not accept it and may cause type errors or
warnings. Remove the zIndex prop from Modal.Content and instead apply the zIndex
using a Tailwind CSS arbitrary value class or by passing it via a style or css
prop to ensure proper styling without type issues.

Copy link
Contributor

@LeeCh0129 LeeCh0129 left a comment

Choose a reason for hiding this comment

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

QA사항수정 고생많으셨습니다!

Copy link
Contributor

@BokyungCodes BokyungCodes 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
Contributor

@minimo-9 minimo-9 left a comment

Choose a reason for hiding this comment

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

리팩토링 하시느라 고생많으셨습니다!

@evaain706 evaain706 merged commit b51a036 into develop Aug 3, 2025
2 checks passed
@evaain706 evaain706 deleted the fix/117 branch August 3, 2025 10:17
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

🔨 Refactor 코드 리팩토링

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants