Skip to content

feat: 온보딩 화면 + 로그인 라우팅 + CustomButton 토큰화#30

Merged
Roy-wonji merged 6 commits into
developfrom
feature/OnBoarding
May 14, 2026
Merged

feat: 온보딩 화면 + 로그인 라우팅 + CustomButton 토큰화#30
Roy-wonji merged 6 commits into
developfrom
feature/OnBoarding

Conversation

@Roy-wonji
Copy link
Copy Markdown
Contributor

Summary

Related Issues

변경 요약 — Issue Checklist 매핑

#2

  • 온보딩 페이저 (1~4) — TabView paging + OnBoardingPageIndicator
  • 토큰 저장 후 (다음 화면) 진입 — 로그인 성공 시 KeychainManager 저장 + 온보딩 화면 push

#20

  • Keychain 기반 토큰 저장 — AuthRepositoryImpl + AuthSessionManager
  • 자동 refresh 토큰 갱신 — AuthInterceptor + TokenRefreshManager (만료 5분 전 + 401 retry)
  • 로그아웃 / 회원 탈퇴 플로우 — AuthRepositoryImpl.logout / withDraw

Test plan

  • tuist generate 후 Picke-Dev 스킴 빌드 성공 확인
  • 온보딩 4페이지 좌우 스와이프 및 인디케이터 활성 dot 이동 확인
  • "다음" → 마지막 페이지에서 "시작하기" 라벨 전환 확인
  • 소셜 로그인 (Google/Kakao) 성공 시 OnBoardingView 푸시 확인
  • CustomButton 모서리 반경 2px 로 표시되는지 확인
  • LoginView, SocialCircleButtonView 가 Main/View 하위에서 정상 로드되는지 확인

Roy-wonji added 6 commits May 15, 2026 03:56
- 회원 탈퇴 요청을 authProvider로 보내 만료 토큰 refresh/retry 경로를 타게 함
- 탈퇴 성공 결과일 때만 Keychain을 정리하도록 변경

Rejected: 요청 직후 무조건 로컬 토큰 삭제 | 서버 탈퇴 실패 시 로컬/서버 상태가 갈라질 수 있어 제외
- 기존 Sources/Reducer / Sources/View 평탄 구조 제거
- LoginView, SocialCircleButtonView 를 Sources/Main/View 로 이동 (LoginFeature 은 별도 커밋에서 라우팅 변경과 함께 정리)
- OnBoarding 기능과 Main 로그인 흐름을 폴더 단위로 분리해 후속 화면 확장 여지 확보
- OnBoardingFeature: Page 구조체 + 4개 페이지 데이터(타이틀/서브타이틀/ImageAsset) + currentIndex/isLastPage/currentPage/primaryButtonTitle State computed, primaryButtonTapped 액션과 delegate(.finished)
- OnBoardingView: ZStack/VStack 최상위 레이아웃만 본체에 두고 extension 안에서 topSection / pageContent / titleBlock / illustration / bottomSection 으로 분리, TabView 페이지 스와이프 지원
- OnBoardingPageIndicator: 활성 pill(20×8) + 비활성 dot(8×8) Color.neutral800 ±opacity 0.4 의 인디케이터 컴포넌트
- DesignSystem ImageAsset 에 onboarding1~4 케이스 + ImageAssets.xcassets/OnBoarding 일러스트(@3x PNG) 4종 추가
- LoginFeature.DelegateAction.presentOnboarding 추가, 로그인 성공 시 delegate 발송 (loginEntity payload 없이 단일 케이스)
- AuthCoordinator.AuthScreen 에 onboarding(OnBoardingFeature) 케이스 추가
- AuthCoordinator.routerAction 에서 .login(.delegate(.presentOnboarding)) 감지 시 routes.push(.onboarding(.init()))
- onboarding(.delegate(.finished)) 핸들러 자리 마련 (메인 탭 연결 지점)
- AuthCoordinatorView 에 onboarding 케이스 분기 추가 (navigation back 숨김)
- CustomButton.body 의 배경을 Capsule() → RoundedRectangle(cornerRadius: config.cornerRadius, style: .continuous) 로 변경
- CustomButtonConfig.primary(.large).cornerRadius 를 .full → .default 로 변경 (Figma 스펙과 일치, 하드코딩 Capsule 제거)
- 이후 variant 가 추가될 때 config.cornerRadius 만 바꾸면 일괄 적용 가능
- README.md: NomadSpot 템플릿 잔재 제거하고 Picke 1:1 철학 배틀 플랫폼 소개로 재작성, OAuth 플로우 / 모듈 구조 / 빠른 시작 / OAuth 사전 등록 표 / Git 컨벤션 정리
- AGENTS.md SwiftUI 스타일 가이드에 다음 5가지 규칙 명문화:
  · View 분할 — body 는 최상위 레이아웃만, 영역은 extension + private func 으로 분리 (LoginView / OnBoardingView 레퍼런스)
  · 폰트 — .font(.system) 금지, pretendardCustomFont(textStyle:) / pretendardFont(family:size:) 사용
  · 컬러 — .foregroundStyle(.neutral900) 점 단축형 사용
  · 이미지 — Image(asset: .xxx) + 데이터 모델은 ImageAsset 타입 직접 보유
  · 파생값 — store.primaryButtonTitle 처럼 State computed property 로 노출, View 의 private var 금지
Copy link
Copy Markdown

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 4f384a5172

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment on lines +98 to +100
case .routeAction(_, action: .onboarding(.delegate(.finished))):
// TODO: 메인 탭으로 전환하는 NavigationAction 발송
return .none
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P1 Badge Route onboarding completion to next flow

When the onboarding feature emits .delegate(.finished), the coordinator currently returns .none, so tapping the last-page CTA ("시작하기") has no effect. In the current auth flow this leaves users stuck on onboarding with no forward transition, even though the UI communicates completion; this should dispatch a concrete navigation action (or root transition) instead of a no-op.

Useful? React with 👍 / 👎.

Comment on lines +188 to +191
if loginEntity.isNewUser {
return .send(.delegate(.presentOnboarding))
} else {
return .send(.delegate(.presentOnboarding))
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Use isNewUser when deciding post-login route

Both sides of the if loginEntity.isNewUser branch send the same .delegate(.presentOnboarding) action, so returning users are routed to onboarding exactly like first-time users. This effectively ignores backend onboarding state and can force existing users through onboarding on every login; the false branch should route to the normal authenticated destination.

Useful? React with 👍 / 👎.

@Roy-wonji Roy-wonji merged commit 27c0547 into develop May 14, 2026
3 checks passed
@Roy-wonji Roy-wonji deleted the feature/OnBoarding branch May 14, 2026 19:33
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.

1 participant