Skip to content

feat(v2): 4탭 IA 재구성 + 바/QR/오픈채팅·마이페이지·최신 뉴스 섹션#166

Open
imhyunho99 wants to merge 8 commits into
mainfrom
feature/home-latest-news-section
Open

feat(v2): 4탭 IA 재구성 + 바/QR/오픈채팅·마이페이지·최신 뉴스 섹션#166
imhyunho99 wants to merge 8 commits into
mainfrom
feature/home-latest-news-section

Conversation

@imhyunho99

Copy link
Copy Markdown
Contributor

왜 (목표)

Java 정본 v2 백엔드에 맞춰 앱을 4탭 IA(홈/가이드/레시피북/바)로 재구성하고, 바/QR/오픈채팅·마이페이지·최신 뉴스 섹션 등 신규 화면을 통합한다.

무엇을 (변경 요약)

  • app: 딥링크·네비게이션 IA 재구성 + 의존성 (2105bc0)
  • home: 홈 피드 + 뉴스 화면 (e7584c6)
  • bar: 바 목록·상세·QR스캔·오픈채팅(SSE)·방문세션 (c03de48)
  • recipe: 레시피북·칵테일·가이드·추천 화면 개편 (a5c1ec3)
  • mypage: 마이페이지·로그인·문의 + API 계층 정비 (b3cc51f)
  • ui: 공통 컴포넌트·테마·레이아웃 + 우상단 메뉴 (e5406d6)
  • github: PR/이슈 템플릿 · auto-assign (8fe05c6)
  • home: 추천 CTA와 인기 레시피 사이 '최신 칵테일 뉴스' 가로 섹션 추가 (d8ee8bb)

검증

  • tsc --noEmit0 errors
  • eslint .0 errors (151 warnings: 대부분 기존 inline-style/no-shadow 경고)
  • 로컬 시뮬레이터(iPhone 17) E2E: 비로그인 홈/가이드/레시피북/바·메뉴 가격게이팅, 로그인 주입 플로우 확인.

리스크 · 롤백

  • main 대비 8커밋. base d39bcaa(App Store ID)는 이미 main 에 포함되어 diff 는 정확히 이 8커밋.
  • 앱 API base URL 은 릴리스 시 운영(http://localhost/onz 로컬 스위치 → 운영값) 확인 필요.
  • 롤백: PR revert 또는 브랜치 미머지 유지.

후속 TODO

  • ⚠️ 기존 결함(이 PR 무관): __tests__/App.test.tsx(RN 스캐폴드)가 react-test-renderer 미설치로 jest 실패. 575935f Initial commit 부터 존재. devDependency 추가 또는 테스트 정리 필요.
  • 뉴스 날짜 한국식 표기, 인기 검색어 한글자 필터, 바 탭 아이콘 정리 (마이너).

imhyunho99 and others added 8 commits July 11, 2026 16:34
- 딥링크(onzcocktail://, https://onz-cocktail.kr): cocktail/:id, v/:slug 라우트
- 4탭 IA 재구성(마이 탭 제거→가이드 독립 탭), BottomTabNavigator 정비
- 의존성 추가: react-native-vision-camera(QR), react-native-sse(채팅), react-native-markdown-display(뉴스)
- ios Podfile(.lock)/Info.plist, AndroidManifest, apple-app-site-association
- .gitignore 에 .maestro(로컬 E2E) 제외 추가

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- HomeFeedScreen: hero + 뉴스/가이드 인터리브 피드 + 인기 레시피 혼합
- 우상단 케밥(⋮) 메뉴 진입점
- 뉴스 목록/상세(마크다운, 썸네일), 원문 링크

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- 바 목록/상세, 메뉴(가격 게이팅), 방문한 바 목록
- QrScanScreen: vision-camera + 카메라 없을 시 코드 수동입력 폴백 → visit-session(L1/L2)
- BarSessionStore(세션 저장/갱신), Mock 위치 탐지(native iOS/Android)
- 채팅: SSE/폴링 트랜스포트, BarChatScreen(익명 닉네임)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- 레시피북 세그먼트 제거 → 레시피(칵테일) 전용, 가이드 독립 탭 분리
- 칵테일 상세/제조단계(CocktailStepsScreen), 카드, 전체목록, 검색/검색결과 개편
- 추천 플로우 정비(RecommendationScreen/ViewModel/결과)
- 구 화면 제거: CocktailBookScreen, TestData, LoadingScreen, RecommendationFlowScreen, ResultScreen, Webview

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- 마이페이지 우상단 메뉴 도달(TopRightMenu 연동), 프로필/탈퇴/로그인 화면
- axios 인터셉터: 토큰 첨부 + 401 리프레시
- API 클라이언트(lib/api.ts) + 응답 타입(types/api.ts), DataSource 정비
- 구 WithdrawBottomSheet 제거

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- TopRightMenu(우상단 케밥 드롭다운): 마이페이지/보관함/방문바/문의/약관 진입
- 공통 컴포넌트: RemoteImage, EmptyState, ErrorState, ErrorBoundary, SkeletonList
- 테마(theme.ts)·레이아웃(layout.ts) 유틸

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
홈 상단, '나에게 맞는 칵테일 추천 받기' CTA와 '인기 레시피' 사이에 최신 뉴스를
가로 스크롤로 미리 보여주는 하이라이트 섹션을 추가한다.

- NewsScreen 과 동일하게 GET /api/v2/news 를 쓰고(unwrap<NewsFeedResponse>),
  최신순으로 내려오므로 앞에서 10건만 취한다
- 홈 보조 섹션이라 로드 실패 시 조용히 비운다 — 본 피드(/api/v2/main)에는 영향 없음
- '전체보기'는 기존 NewsScreen 으로, 카드 탭은 기존 openNews(NewsDetailScreen)로
  연결(새 화면/라우트 불필요)
- 뉴스는 제목이 길어 레시피 카드보다 넓은 200pt 카드 + 16:9 이미지로 스타일 분리

참고: 요청의 "메뉴 기준"에서 메뉴는 전역 엔드포인트가 없어(바 종속 메뉴뿐)
이번 섹션은 뉴스 기준으로 구현했다. 메뉴 혼합이 필요하면 별도 논의 필요.

tsc --noEmit 0 에러.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Comment thread src/lib/api.ts
throw new ApiError('서버 응답 형식이 올바르지 않습니다.', -1);
}
if (body.code !== 1) {
throw new ApiError(body.msg || '요청을 처리하지 못했습니다.', body.code);

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

셀프리뷰: unwrapcode === -2(토큰 재발급 필요)를 일반 실패와 동일하게 ApiError 로 throw 함. 이게 안전하려면 axios_interceptor.tsx 가 응답이 여기 도달하기 전에 reissue 를 끝냈다는 전제가 성립해야 함. 인터셉터가 -2 를 못 잡는 경로(예: 인터셉터 미적용 인스턴스/직접 호출)가 하나라도 있으면 사용자가 재발급 대신 일반 오류 토스트를 보게 됨. -2 왕복이 인터셉터에서 실제로 처리되는지 호출부 전수 확인 권장.

@imhyunho99

Copy link
Copy Markdown
Contributor Author

🔀 머지 참고

  • base main 대비 CONFLICTING — 머지 전 충돌 해소 필요. 내용 충돌 3파일 (나머지는 자동 병합):
    • src/BottomTab/Cocktail_List/CocktailListScreen.tsx
    • src/Components/CocktailDetail/CocktailDetailViewModel.tsx
    • src/Navigation/BottomTabNavigator.tsx
  • 검증: tsc --noEmit 0에러, eslint 0에러(151 warn).
  • BE는 별도 PR #123 — 앱이 v2 API에 의존하므로 BE [UI]cocktail box 구현 #123 머지/배포 후 FE 머지 권장.
  • 참고(무관 기존결함): __tests__/App.test.tsx(RN 스캐폴드)가 react-test-renderer 미설치로 jest 실패 — 575935f 부터 존재.

@Leesowon Leesowon left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

고생하셨습니다! app에 5개의 화면이 추가된건가요??

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants