Skip to content

fix: 1.1.0 인증하기/인증샷 상세 QA#213

Merged
jihun32 merged 5 commits intodevelopfrom
fix/#210
Mar 24, 2026
Merged

fix: 1.1.0 인증하기/인증샷 상세 QA#213
jihun32 merged 5 commits intodevelopfrom
fix/#210

Conversation

@jihun32
Copy link
Contributor

@jihun32 jihun32 commented Mar 24, 2026

🔗 관련 이슈

📙 작업 내역

💬 추가 설명 or 리뷰 포인트 (선택)

  • 인터랙션 관련 작업은 따로 할 예정

@jihun32 jihun32 marked this pull request as ready for review March 24, 2026 11:13
@coderabbitai
Copy link

coderabbitai bot commented Mar 24, 2026

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: dcd2b464-3120-47bb-b0c1-faaf90258c99

📥 Commits

Reviewing files that changed from the base of the PR and between f9fc036 and d6c4189.

📒 Files selected for processing (5)
  • Projects/Feature/GoalDetail/Interface/Sources/GoalDetailReducer.swift
  • Projects/Feature/GoalDetail/Sources/Detail/GoalDetailReducer+Impl.swift
  • Projects/Feature/GoalDetail/Sources/Detail/GoalDetailView.swift
  • Projects/Feature/GoalDetail/Sources/Detail/SwipeableCardView.swift
  • Projects/Feature/Home/Sources/Home/HomeReducer+Impl.swift

📝 Walkthrough

인증하기/인증샷 상세 QA 수정 (이슈 #210)

아키텍처 & 상태 관리 변경

GoalDetailReducer 상태 계층 구분 강화

  • currentEditedImageData 계산 속성 추가: currentUser == .mySelf일 때만 편집 중인 이미지 데이터 노출, 타 사용자 조회 시 nil 반환
  • isCompleted 로직 업데이트: currentEditedImageData 기반으로 변경되어 편집 이미지 완료 상태를 .mySelf 사용자에게만 제한

비동기 작업 & 부수 효과 추가

찌르기(Poke) 기능 구현

  • PokeCooldownManager private enum 추가: 3시간 쿨타임 관리 (UserDefaults 기반)
  • .bottomButtonTapped 액션 확장:
    • currentUser == .you && 미완료 상태일 때만 처리
    • 쿨타임 활성 시: 남은 시간 안내 토스트 표시
    • 쿨타임 종료 시: goalClient.pokePartner(goalId) 비동기 호출 후 성공/실패 토스트
    • 쿨타임 타임스탬프 자동 기록

UI/UX 변경

카드 뷰 레이아웃 및 상호작용

  • 찌르기 이미지 오버레이 위치 조정: .topTrailing.bottomLeading (오프셋: (79, -45))
  • 편집 상태 배경 표시 조건부 처리 (편집 중 배경 숨김)
  • 편집 이미지 소스 변경: pendingEditedImageDatacurrentEditedImageData
  • 찌르기 이미지 크기 조정: 173×173 → 184×160

스와이프 제어 강화 (SwipeableCardView)

  • isSwipeEnabled 계산 속성으로 스와이프 가능 여부 통합 관리
  • 드래그 제스처에서 조기 종료(early-exit) 로직 추가: 스와이프 불가 시 오프셋/선택 로직 스킵

기타 수정

홈 화면 달력 로직 (HomeReducer)

  • .setCalendarDate 액션에서 "오늘" 참조 날짜 계산 개선
  • 기본 이니셜라이저 대신 state.nowDate로부터 명시적으로 TXCalendarDate(year:month:day:) 구성

토스트 UI 추가

  • GoalDetailView에 .txToast() modifier 통합 (쿨타임 안내, 찌르기 성공/실패 피드백)

Walkthrough

목표 인증 상세 화면에서 포크(poke) 기능과 쿨다운 관리를 추가하고, 편집된 이미지 접근 권한을 "나 자신"으로 제한했습니다. 또한 카드 스와이프 제스처와 홈 화면의 날짜 참조 로직을 개선했습니다.

Changes

Cohort / File(s) Summary
포크 기능 및 쿨다운 관리
Projects/Feature/GoalDetail/Sources/Detail/GoalDetailReducer+Impl.swift
PokeCooldownManager를 통해 포크 타임스탬프를 UserDefaults에 3시간 쿨다운으로 관리하고, 포크 버튼 탭 시 쿨다운 검사 후 비동기 요청을 처리하며, 성공/실패에 따라 토스트 메시지를 표시합니다.
접근 제어 및 UI 레이블 조정
Projects/Feature/GoalDetail/Interface/Sources/GoalDetailReducer.swift
편집된 이미지 데이터를 "나 자신"(currentUser == .mySelf)에만 노출하는 currentEditedImageData 계산 프로퍼티를 추가하고, "당신"(currentUser == .you) 버튼 레이블을 "찔러보세요"에서 "찌르기"로 변경했습니다.
뷰 레이아웃 및 토스트 통합
Projects/Feature/GoalDetail/Sources/Detail/GoalDetailView.swift
포크 이미지 오버레이 위치를 조정하고 (.topTrailing.bottomLeading), 토스트 프레젠터를 추가하고, 배경 및 완료 카드 크기를 고정 치수(336x336)로 변경하고, 편집된 이미지 소스를 currentEditedImageData로 업데이트했습니다.
스와이프 제스처 제어
Projects/Feature/GoalDetail/Sources/Detail/SwipeableCardView.swift
isSwipeEnabled 플래그를 추가하여 드래그 제스처의 .onChanged.onEnded 핸들러에서 스와이프가 비활성화될 때 조기 종료하도록 개선했습니다.
홈 화면 날짜 참조
Projects/Feature/Home/Sources/Home/HomeReducer+Impl.swift
.setCalendarDate 액션 처리에서 TXCalendarDate()의 기본 초기화 대신 state.nowDate를 기반으로 명시적으로 TXCalendarDate(year:month:day:)를 구성하도록 변경했습니다.

Sequence Diagram(s)

sequenceDiagram
    actor User
    participant View as GoalDetailView
    participant Reducer as GoalDetailReducer
    participant Manager as PokeCooldownManager
    participant Client as GoalClient
    participant Toast as ToastPresenter
    
    User->>View: 포크 버튼 탭<br/>(bottomButtonTapped)
    View->>Reducer: bottomButtonTapped 액션
    Reducer->>Manager: 쿨다운 상태 확인<br/>(remainingCooldownTime)
    alt 쿨다운 활성화
        Manager-->>Reducer: 남은 시간 반환
        Reducer->>Toast: 쿨다운 경고 토스트 표시<br/>(예: "3시간 후 가능")
        Toast-->>User: 경고 메시지 표시
    else 쿨다운 미활성화
        Manager-->>Reducer: 0 반환
        Reducer->>Client: pokePartner(goalId) 비동기 호출
        Client-->>Reducer: 성공/실패 응답
        alt 포크 성공
            Reducer->>Manager: recordPokeTimestamp 기록
            Reducer->>Toast: 성공 토스트 표시
            Toast-->>User: "포크 성공!" 메시지
        else 포크 실패
            Reducer->>Toast: 실패 경고 토스트 표시
            Toast-->>User: "포크 실패!" 메시지
        end
    end
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

✨ 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 fix/#210

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.

@clxxrlove
Copy link
Member

@coderabbitai summary

@coderabbitai
Copy link

coderabbitai bot commented Mar 24, 2026

✅ Actions performed

Summary regeneration triggered.

@jihun32 jihun32 merged commit f671df3 into develop Mar 24, 2026
8 checks passed
@jihun32 jihun32 deleted the fix/#210 branch March 24, 2026 11:26
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants