[Feat] DoDo - app 전반적 기능 구현 - #4
Merged
Merged
Conversation
- (tabs)/_layout.tsx: 웹 헤더(로고+nav+프로필)를 홈/산책/커뮤니티/마이도도 4개 하단 탭바로 재설계 - (tabs)/index.tsx: 홈 화면 구현 (AI 건강 레포트 카드, 펫 정보 카드, 공지사항 리스트) — 백엔드 연동 전이라 mock 데이터 사용 - (tabs)/walk.tsx, community.tsx, mypage.tsx: 나머지 탭 플레이스홀더 추가 - constants/theme.ts: DoDo 디자인 토큰(brand, background, border 등) 추가 - (tabs)/explore.tsx: Expo 기본 템플릿 화면 제거 - RN Web 탭 라벨 텍스트가 한글 받침에서 잘리는 flex-shrink 이슈 수정
- (tabs)/community/index.tsx: 인기 게시물/최근 게시물 리스트, 상단 "내 활동" 링크, 우측 하단 글쓰기 FAB — PC 사이드바(글쓰기/내 활동)를 앱 패턴으로 재배치 - (tabs)/community/[boardId].tsx: 게시물 상세 (작성자/사진/본문/좋아요·싫어요/ 댓글) 한 화면으로 통합, boardId 기준 mock 데이터 조회 - (tabs)/community/_layout.tsx: 리스트→상세 이동용 자체 Stack 네비게이터, 커스텀 뒤로가기 버튼 헤더에 연결 - (tabs)/community/new.tsx, my.tsx: 글쓰기/내 활동 화면 스텁 추가 - 백엔드 연동 전이라 mock 데이터 사용
- (tabs)/community/new.tsx: 게시글 작성 폼 (제목/내용/이미지 첨부) + 하단 고정 액션바(취소/임시저장/게시하기), 제목·내용 입력 시에만 게시하기 활성화 - (tabs)/community/my.tsx: 내 활동 화면 — 내 게시글/내 댓글 탭 전환, 페이지네이션 UI. PC 사이드바(프로필/글쓰기/내활동)는 중복이라 제외 - components/community/post-row.tsx: 게시물 리스트 행을 공용 컴포넌트로 분리해 커뮤니티 목록·내 활동 화면에서 재사용 - (tabs)/community/_layout.tsx: new/my 화면 헤더(뒤로가기) 옵션 추가 - 이미지 첨부는 UI만 구현, 실제 업로드는 이슈7(expo-image-picker) 이후 연동
- (tabs)/walk.tsx: 반려동물 선택 칩(5마리) + 울타리 정보(반경/사용상태) + 수정 버튼 UI 구현, 칩 선택에 따라 하단 정보 전환 - 지도는 실제 렌더링 대신 플레이스홀더로 표시 — @mj-studio/react-native-naver-map은 네이티브 모듈이라 이슈1(앱 식별자 확정 + 네이버 지도 콘솔 등록) 완료 후 설치 예정 - 산책(실시간 위치 추적) 화면은 이번 범위에서 제외, 울타리 설정만 우선 구현
- app.json: 앱 식별자(com.dodo.app) 확정, @mj-studio/react-native-naver-map config plugin 등록(Client ID 포함) - (tabs)/walk.tsx + components/walk/fence-map.tsx: 산책 울타리 화면에 실제 네이버 지도(NaverMapView, NaverMapCircleOverlay) 연동 - components/walk/fence-map.web.tsx: 네이버 지도가 네이티브 전용 모듈이라 react-native-web에서 렌더링이 안 되는 문제 대응 — 지도 렌더링 부분만 컴포넌트 단위로 분리해 웹 프리뷰에서는 안내 플레이스홀더로 대체 (route 파일 단위 분리는 expo-router에서 동작하지 않아 컴포넌트 레벨로 해결) - shared/lib/auth/tokenStorage.ts: accessToken/refreshToken은 expo-secure-store, 비민감 프로필 정보는 AsyncStorage에 저장. 웹은 SecureStore 미지원이라 AsyncStorage로 폴백 처리 - shared/lib/auth/authStore.ts: Zustand 기반 인증 상태 스토어 (웹의 'dodo:auth-state-change' 커스텀 이벤트를 대체) - shared/lib/auth/oauth.ts: expo-auth-session/expo-web-browser 기반 소셜 로그인 플로우, CSRF state 검증 포함 - shared/lib/auth/refreshAccessToken.ts: 동시 요청 시 중복 리프레시를 막는 in-flight promise 공유 처리 - shared/api/axios.ts: 요청 시 accessToken 자동 주입(+ 만료 임박 시 사전 갱신), 401 응답 시 리프레시 후 재시도 인터셉터 추가 - app/_layout.tsx: react-native-url-polyfill 적용, 앱 시작 시 세션 hydrate - OAuth 시작/리프레시 엔드포인트는 백엔드 스펙 미확정 상태라 Spring Security 기본 컨벤션을 가정한 TODO로 표시해 둔 상태
- (tabs)/mypage/index.tsx: 프로필 카드 + 메뉴 리스트로 재구성 (PC 사이드바를 마이페이지 표준 패턴으로 변환), 로그아웃은 실제 authStore.clearSession() 연동 - pets/index.tsx, pets/new.tsx: 반려동물 리스트 + 등록 폼 (종/성별 칩 선택, 생년월일 입력 시 만 나이 자동 계산) - pets/[petId]/index.tsx, weight.tsx, notes.tsx: 반려동물 상세정보, 체중 관리(react-native-svg 기반 추이 그래프 + 기록 추가/삭제), 특이사항 관리(카테고리 필터/추가/삭제) - family/index.tsx, apply.tsx, received.tsx: 가족 관리 메인 (펫별 구성원/초대코드 발급), 가족 신청 관리, 받은 신청 목록. 등록된 펫이 없으면 등록 유도 화면으로 전환 - device.tsx, walk-log.tsx, ai-report.tsx, profile-edit.tsx, notifications.tsx: 프로필 수정은 구현 완료, 나머지는 스텁으로 우선 라우팅만 연결 - react-native-svg 설치 - 특이사항 카테고리 드롭다운이 다른 카드에 가려 보이던 z-index 버그 수정
- SafeAreaView 컴포넌트 대신 useSafeAreaInsets 훅으로 전환 (SafeAreaView가 New Architecture에서 검은 화면 유발) - 홈/커뮤니티/산책 화면 상단 패딩에 insets.top 반영 - 탭 바 높이에 insets.bottom 반영, 루트 Stack에 배경색 contentStyle 추가
- Naver Maps SDK(com.naver.maps:map-sdk) 아티팩트가 없어 빌드 실패하던 문제 해결 - 커스텀 Expo config plugin으로 android/build.gradle에 네이버 Maven 저장소 주입
- 프론트가 구글/네이버에 직접 인가 코드를 요청하고 백엔드는 코드 교환만 수행하는 구조로 변경 - POST /auth/social-login, POST /auth/reissue 연동 (accessTokenExpiresIn 단위가 로그인은 ms, 재발급은 초 단위인 실제 백엔드 특성 반영) - 마이도도 로그아웃 버튼에 실제 로그아웃 API 연동 - .env에 배포 주소/구글 클라이언트 ID 반영, 네이버는 백엔드 미배포로 선택값 처리
- @stomp/stompjs: 산책 실시간 위치 STOMP 연동용 - expo-image-picker: 사진 업로드 기능용 (앨범 접근 권한 플러그인 설정 포함)
- 도메인별 axios 함수/타입 전체 작성 (활동/커뮤니티/가족/울타리/파일/메인/펫/유저) - 산책 실시간 위치용 STOMP 훅, 이미지 피커/캘린더/지역선택 등 재사용 컴포넌트 추가 - 지역(시/도·시/군/구) 데이터는 웹(dodo-frontend)에서 그대로 이식
- 구글 로그인을 네이티브 SDK에서 웹과 동일한 브라우저 리다이렉트 방식으로 재작성 (Android가 커스텀 스킴 직접 리다이렉트를 차단하는 정책 문제 해결) - 네이버 로그인도 동일 방식으로 활성화 - 회원가입을 약관 동의 → 프로필(닉네임 중복확인/지역선택/사진) → 알림설정 → 완료 4단계 위저드로 재구현, 웹의 안전한 재시도 로직까지 이식
- 회원정보 수정, 알림 설정, 회원 탈퇴(이메일 인증 2단계) 연동 - 반려동물 등록/수정/상세/특이사항/체중 관리 연동, 사진·생년월일 캘린더 입력 추가 - 가족 관리/신청/받은신청 연동, 가족 프로필 사진+이름 그리드로 표시 - 목데이터 파일 삭제
- 게시글 피드/상세/작성/수정/삭제, 댓글 CRUD, 좋아요·싫어요 반응 연동 - 게시글 이미지 여러 장 첨부, 임시저장 및 재진입 시 불러오기 연동 - 내 활동(내 게시글/내 댓글) 연동
- 반려동물 프로필/AI 건강 리포트 요약 연동, 여러 마리 시 선택 전환 지원
- 울타리 설정을 실제 API 연동 + 생성/수정 UI 신규 구현 - 산책 활동 기록 기능 신규 구현: 시작/일시정지/종료, 기록 목록, 경로 리플레이, 주변 인기 활동 - 실시간 위치 표시용 지도 컴포넌트 및 좌표 방어 로직 추가
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
📄 작업 내용 (Description)
산책 탭에 실제 GPS 위치를 연동하고, 커뮤니티 게시글 이미지 표시, 마이도도 펫 정보 표시, 웹소켓/이미지 피커 안정성 등 API 연동 이후 발견된 이슈들을 개선했습니다.
name/petName) 응답 불확실성에 대응하는getPetListName유틸 추가 및 전 화면 적용useCurrentLocation) 연동, 지도 마커·울타리 색상 개선🔗 관련 이슈 (Related Issues)
#4✅ 체크리스트 (Checklist)
Style)Test)📸 스크린샷 (Screenshots)
💬 기타 사항 (Etc)
activity-tracking-screen.tsx,fence-settings-screen.tsx는 GPS 연동과 펫 이름 방어 처리가 함께 반영되어 있음!