Skip to content

[Feat/#63] 매장 상세 페이지 생성#75

Merged
skyblue1232 merged 3 commits intodevelopfrom
feat/#63/shop-detail
Mar 29, 2026
Merged

[Feat/#63] 매장 상세 페이지 생성#75
skyblue1232 merged 3 commits intodevelopfrom
feat/#63/shop-detail

Conversation

@skyblue1232
Copy link
Copy Markdown
Contributor

@skyblue1232 skyblue1232 commented Mar 29, 2026

✅ 작업 내용

📝 Description

  • 지도 핀 클릭 시 상점 바텀시트 오픈
  • 바텀시트 상점 보러가기 버튼과 상세 페이지(/main/store/[id]) 연결
  • 상점 상세 페이지 UI 및 목데이터 구성
  • 메뉴 카드 스타일 및 영업시간 토글 UI 정리
  • TabsLayout width 제한 제거로 상세 페이지 반응형 이슈 수정

작업한 내용을 체크해주세요.

  • 상세 페이지 이동 연결
  • 상세 페이지 UI 구현
  • 목데이터 작성
  • 메뉴 카드 스타일 정리
  • 영업시간 토글 수정
  • 레이아웃 반응형 수정

🚀 설계 의도 및 개선점

  • 지도 → 바텀시트 → 상세 페이지 흐름이 자연스럽게 이어지도록 연결했습니다.
  • 상세 페이지는 실제 API 연동을 고려해 목데이터 구조를 분리해두었습니다.
  • 메뉴 카드와 상세 정보 영역은 기존 메인 화면과 톤을 맞춰 일관성을 유지했습니다.
  • 반응형 문제는 상세 페이지가 아니라 공통 TabsLayout의 width 제한에서 발생해 레이아웃 구조를 수정했습니다.

📸 스크린샷 (선택)

  • 매장 상세 페이지
image

📎 기타 참고사항

  • 상세 페이지 데이터는 현재 목데이터 기반입니다.
  • 이후 상세 API 연동 시 데이터만 교체하면 됩니다.

Fixes #63

Summary by CodeRabbit

릴리스 노트

  • 새로운 기능

    • 매장 상세 정보 페이지 추가: 매장명, 주소, 연락처, 영업시간, 메뉴를 한눈에 확인할 수 있습니다.
    • 요일별 영업시간 조회: 영업시간을 펼쳐서 모든 요일의 상세 정보를 확인할 수 있습니다.
    • 메뉴 카드 표시: 각 메뉴의 이름, 가격, 수량, 픽업 시간을 확인 가능합니다.
  • UI/UX 개선

    • 하단 탭 바 레이아웃 최적화로 콘텐츠 영역 활용도 개선

@skyblue1232 skyblue1232 self-assigned this Mar 29, 2026
@skyblue1232 skyblue1232 added feat 기능 구현 및 생성 chore 자잘한 수정 style 스타일 관련 적용 labels Mar 29, 2026
@vercel
Copy link
Copy Markdown

vercel bot commented Mar 29, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
compasser-customer Ready Ready Preview, Comment Mar 29, 2026 10:22am
compasser-owner Ready Ready Preview, Comment Mar 29, 2026 10:22am

@coderabbitai
Copy link
Copy Markdown

coderabbitai bot commented Mar 29, 2026

📝 Walkthrough

개요

스토어 상세 페이지 기능을 추가하며, 레이아웃 패딩을 제거하고 동적 라우트 페이지, UI 컴포넌트, 타입 정의, 모의 데이터를 구현했습니다.

변경 사항

코호트 / 파일 요약
레이아웃 조정
apps/customer/src/app/(tabs)/layout.tsx
스크롤 가능한 콘텐츠 컨테이너에서 하단 패딩(pb-[8.4rem]) 제거 및 너비 제약 조건 변경. 외부 래퍼의 너비 제한 제거되었고, BottomTabBarmax-w-[42.5rem] 유지.
타입 정의 및 상수
apps/customer/src/app/(tabs)/main/store/_types/store-detail.ts, apps/customer/src/app/(tabs)/main/store/_constants/mockStoreDetail.ts
스토어 상세 데이터 타입(DayKey, StoreBusinessHour, StoreMenuItem, StoreDetailItem) 추가 및 10개 스토어의 모의 데이터(MOCK_MAIN_STORE_DETAIL_LIST, MOCK_MAIN_STORE_DETAIL_MAP) 정의.
스토어 상세 페이지 및 컴포넌트
apps/customer/src/app/(tabs)/main/store/[id]/page.tsx, apps/customer/src/app/(tabs)/main/store/_components/StoreDetailContent.tsx, apps/customer/src/app/(tabs)/main/store/_components/StoreMenuCard.tsx
동적 ID 라우트로 스토어 상세 페이지 추가, 스토어 정보(영업시간, 주소, 이메일) 및 메뉴 목록을 표시하는 클라이언트 컴포넌트 구현.

시퀀스 다이어그램

sequenceDiagram
    participant User as 사용자
    participant Page as StoreDetailPage<br/>(서버)
    participant MockData as MockData<br/>MOCK_MAIN_STORE_DETAIL_MAP
    participant Content as StoreDetailContent<br/>(클라이언트)
    participant MenuCard as StoreMenuCard<br/>(클라이언트)

    User->>Page: /store/[id]로 이동
    Page->>Page: params에서 ID 파싱
    Page->>MockData: 스토어 ID로 데이터 조회
    alt 스토어 존재
        MockData-->>Page: StoreDetailItem 반환
        Page->>Content: store prop 전달
        Content->>Content: 현재 요일 기준 영업시간 계산
        Content-->>User: 스토어 정보 및 메뉴 렌더링
        Content->>MenuCard: 각 메뉴 항목 렌더링
        MenuCard-->>User: 메뉴 카드 표시
    else 스토어 미존재
        Page->>Page: notFound() 호출
        Page-->>User: 404 페이지
    end
Loading

예상 코드 리뷰 소요 시간

🎯 3 (보통) | ⏱️ ~20분

관련 가능성 있는 PR

🐰✨ 스토어 상세 페이지가 피었네요,
메뉴 카드들도 반짝반짝,
영업시간은 서울 시간으로 정확히,
패딩은 빠져도 레이아웃 쌩쌩!
타입도 안전하고 목데이터도 풍성~

🚥 Pre-merge checks | ✅ 2 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (2 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed PR 제목이 주요 변경사항을 명확하게 요약하고 있으며, 매장 상세 페이지 생성이라는 핵심 변경사항과 완전히 일치합니다.

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

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/#63/shop-detail

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
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: 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/customer/src/app/`(tabs)/layout.tsx:
- Line 47: 공통 레이아웃의 하단 여백이 제거되어 스크롤 마지막 항목이 탭바에 가려지는 문제이므로, 레이아웃의 루트 스크롤 컨테이너(현재
클래스 "ds-scrollbar-hidden flex-1 overflow-y-auto"가 적용된 div)를 수정해 탭바 높이만큼의 하단 패딩을
복원하거나 safe-area-inset을 적용하세요(예: pb-safe 또는 pb-[3.2rem] 등 앱에서 사용하는 기준). 또한 개별
컴포넌트(MainListView.tsx의 pb-[2rem], order/page.tsx의 pb-[3.2rem])와 중복되지 않도록 조정하여
모바일에서 마지막 콘텐츠가 탭바 뒤에 숨지 않도록 보장하세요.

In `@apps/customer/src/app/`(tabs)/main/store/_components/StoreDetailContent.tsx:
- Line 51: currentBusinessText is hardcoded to "영업중" and therefore misreports
store status; change it to a neutral display until proper open/closed logic is
implemented by removing the "영업중" prefix. In the StoreDetailContent component
replace the string construction that uses currentBusinessText with a neutral
text showing only the hours (use todayHours.open and todayHours.close) or a
generic label like "영업시간" plus the time range, and ensure no time-comparison
logic is assumed until you add a real status calculation.

In `@apps/customer/src/app/`(tabs)/main/store/_constants/mockStoreDetail.ts:
- Around line 358-360: Summary: The type assertion for
MOCK_MAIN_STORE_DETAIL_MAP incorrectly claims every numeric key exists; change
it to a partial record. Change the assertion on MOCK_MAIN_STORE_DETAIL_MAP from
Record<number, StoreDetailItem> to Partial<Record<number, StoreDetailItem>> so
the type matches runtime (only IDs from MOCK_MAIN_STORE_DETAIL_LIST exist) and
keep/use the existing guard checks like if (!store) where callers must handle
undefined; update any callers that assumed non-null to handle possibly undefined
StoreDetailItem values.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 24de9b25-945b-46dc-a174-dca5c47b724b

📥 Commits

Reviewing files that changed from the base of the PR and between d3fe0b7 and bd10738.

⛔ Files ignored due to path filters (6)
  • apps/customer/public/images/mock/store/store-1.jpg is excluded by !**/*.jpg
  • packages/design-system/src/icons/generated/iconNames.ts is excluded by !**/generated/**
  • packages/design-system/src/icons/generated/spriteSymbols.ts is excluded by !**/generated/**
  • packages/design-system/src/icons/source/Menu.svg is excluded by !**/*.svg
  • packages/design-system/src/icons/source/ToggleDown.svg is excluded by !**/*.svg
  • packages/design-system/src/icons/source/ToggleUp.svg is excluded by !**/*.svg
📒 Files selected for processing (6)
  • apps/customer/src/app/(tabs)/layout.tsx
  • apps/customer/src/app/(tabs)/main/store/[id]/page.tsx
  • apps/customer/src/app/(tabs)/main/store/_components/StoreDetailContent.tsx
  • apps/customer/src/app/(tabs)/main/store/_components/StoreMenuCard.tsx
  • apps/customer/src/app/(tabs)/main/store/_constants/mockStoreDetail.ts
  • apps/customer/src/app/(tabs)/main/store/_types/store-detail.ts

@skyblue1232 skyblue1232 merged commit 705bdd4 into develop Mar 29, 2026
6 checks passed
@skyblue1232 skyblue1232 deleted the feat/#63/shop-detail branch March 29, 2026 10:32
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

chore 자잘한 수정 feat 기능 구현 및 생성 style 스타일 관련 적용

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Feat] 매장 상세 및 결제 페이지 생성

1 participant