Skip to content

v1.0.0#75

Merged
kanghun1121 merged 269 commits intomainfrom
dev
Mar 3, 2026
Merged

v1.0.0#75
kanghun1121 merged 269 commits intomainfrom
dev

Conversation

@kanghun1121
Copy link
Member

✏️ 변경 내용

  • v1.0.0

✅ 체크리스트

  • 빌드 정상 동작
  • 불필요한 파일 없음

kanghun1121 and others added 30 commits January 28, 2026 00:16
* feat: JWT를 사용하는 클라이언트 추가 (기존 HTTPClient 래핑)

* fix: AuthenticatedHTTPClient 제거

* feat: Swinject Import & DI Container 구현

* feat: ViewModel Factory 생성

* chore: DI 적용으로 인한 Repository 구현체 위치 이동 (Domain -> Data)

* feat: Composition Root(App) 에서 의존성 주입

* refactor: Domain에서 TokenRepositoryImpl 제거 및 의존성 주입 강제

- TokenRepositoryImpl을 Domain에서 제거 (Data 모듈로 이동)
- FinalizeAppleLoginUseCase의 기본값 제거하여 의존성 주입 강제
- LoginViewModel의 기본값 제거하여 의존성 주입 강제
- Domain과 Data의 책임 분리 강화

* feat: AppFlowController DI 주입 적용

* fix: 사용하지 않는 메소드 삭제

* chore: 폴더링 정리 (Repository, Domain 내부에 Core 디렉토리 생성)

* chore: 모듈 의존성 변경

* chore: 커서 룰 gitignore 추가

로컬 개발 환경에서만 사용하는 Cursor 룰 디렉토리를
버전 관리 대상에서 제외

* feat: DI 컨테이너로 화면 의존성 주입

Composition Root에서 ViewModel/ViewController를 등록하고
AppFlowController는 컨테이너에서 resolve하도록 변경

* refactor: 로그인 ViewModel 팩토리 제거

DI 컨테이너 기반 생성으로 전환하여
불필요한 Factory 레이어를 제거

* refactor: 로그인/메인 화면 전환 resolve 방식 단순화

ViewController resolve 실패 시 처리를 guard 기반으로 정리하여
흐름을 단순화

* refactor: Debug/Release 환경 분기 제거

* fix: ViewController 의존성 등록 제거

* fix: 사용하지 않는 메소드제거

* fix: Demo View 제거
* feat: DesignSystem 색상 토큰 및 설정 추가

* feat: DesignSystem UI 컴포넌트 추가

* feat: 이미지 제공 프로토콜 추가

* feat: PHAssetImageProvider 구현

* feat: 커스텀 이미지 피커 구현

* feat: 이미지 피커 데모 화면 추가

* refactor: 기존 코드 정리

* refactor: FoodPhotoDemoViewController를 App 모듈로 이동

* feat: MumukImage 에셋 접근 wrapper 추가

* refactor: SelectableImageCell을 Presentation 모듈로 이동

* feat: 음식 확률 라벨 표시 설정 추가

* refactor: FoodImagePickerResult에서 불필요한 Data import 제거

* refactor: 이미지 이름 수정

* refactor: tuist 공용 컬러셋  이용하게 수정

* fix: 안 쓰는 파일 삭제

* test: 디버그용 피커 옵션 설정

* refactor: 이름 변경

* chore: doc comment 추가

* fix: 번들아이디 수정

* fix: 디버그 코드 추가

* chore: gitignore 설정

* refactor: 피커에서 정확도 표시기능 삭제

* refactor: ImageProviding이 ImageAssetable을 받도록 수정

* refactor: 필요없는 프로토콜 요구사항 삭제

* refactor: 이미지 로딩 & 캐싱 로직 합쳐서 단순화

* fix: snapkit dep 삭제

* refactor: ImageRepository 추가

* fix: conflict 이후 빌드실패 해결

* refactor: final class -> struct

* refactor: FoodPhto -> FoodImageAsset

* refactor: ImageRepo -> RenderableImageRepo

+ UIImageLoader
* feat: ClassificationCacheable 프로토콜 추가

feat: FileClassificationCache 구현체 추가

refactor: ClassificationCacheEntry struct로 캐시 타입 개선

feat: FoodPhotoFetcher에 분류 결과 캐시 의존성 주입

refactor: 캐싱 이름 바꾸기

* test: 테스트 추가

* refactor: 캐시매니저 안정성

* refactor: 코드개선

* refactor: 캐시매니저를 `Actor`로

* fix: 빌드 문제 해결

* test: 빌드 실패 수정

* Update FoodDiary/Data/Sources/Cache/ClassificationCacheManager.swift

Co-authored-by: KangKang <165460077+kanghun1121@users.noreply.github.com>

---------

Co-authored-by: KangKang <165460077+kanghun1121@users.noreply.github.com>
* feat: 타이포그래피 시스템

* chore: 주석

* feat: 컬러셋 추가

* refactor: font 바로 사용 금지

* chore: UIColor 헬퍼메서드
* feat: ClassificationCacheable 프로토콜 추가

feat: FileClassificationCache 구현체 추가

refactor: ClassificationCacheEntry struct로 캐시 타입 개선

feat: FoodPhotoFetcher에 분류 결과 캐시 의존성 주입

refactor: 캐싱 이름 바꾸기

* test: 테스트 추가

* refactor: 캐시매니저 안정성

* refactor: 코드개선

* refactor: 캐시매니저를 `Actor`로

* fix: 빌드 문제 해결

* test: 빌드 실패 수정

* Update FoodDiary/Data/Sources/Cache/ClassificationCacheManager.swift

Co-authored-by: KangKang <165460077+kanghun1121@users.noreply.github.com>

* feat: 주간 캘린더 Domain 레이어 추가

* feat: MockFoodRecordRepository 구현

* feat: 주간 캘린더 ViewModel 추가

* feat: 주간 캘린더 UI 컴포넌트 구현

* feat: 주간 캘린더 뷰 추가

* feat: 주간 캘린더 화면 통합 및 +버튼 항상 표시

* test: 주간 캘린더 UseCase 테스트 추가

* refactor: UI 정돈

* refactor: 필요없는 파일 제거

* refactor: priority 관리

* feat: week 데이터 캐시워밍

* sdf

* fix: 빌드에러

* feat: 타이포그래피 시스템

* chore: 주석

* feat: 컬러셋 추가

* chore: 타이포그래피 적용

* refactor: font 바로 사용 금지

* chore: 디자인 finetune

* chore: UIColor 헬퍼메서드

* chore: 디자인 파인튜닝

* fix: 주간 이동 시 이전 요일 자동선택

* refactor: 이미지 피커 UI 수정

* refactor: `hasRecord` 삭제

* refactor: 날짜계산 로직 유틸 메서드로

* refactor: nested enum으로 수정

* fix: 테스트 빌드 실패 수정

* refactor: usecase 이름 수정

* refactor: 사진 권한 확인을 repo로 분리

---------

Co-authored-by: KangKang <165460077+kanghun1121@users.noreply.github.com>
* feat: JWT를 사용하는 클라이언트 추가 (기존 HTTPClient 래핑)

* fix: AuthenticatedHTTPClient 제거

* feat: ViewModel Factory 생성

* chore: DI 적용으로 인한 Repository 구현체 위치 이동 (Domain -> Data)

* feat: Composition Root(App) 에서 의존성 주입

* refactor: Domain에서 TokenRepositoryImpl 제거 및 의존성 주입 강제

- TokenRepositoryImpl을 Domain에서 제거 (Data 모듈로 이동)
- FinalizeAppleLoginUseCase의 기본값 제거하여 의존성 주입 강제
- LoginViewModel의 기본값 제거하여 의존성 주입 강제
- Domain과 Data의 책임 분리 강화

* feat: AppFlowController DI 주입 적용

* chore: 커서 룰 gitignore 추가

로컬 개발 환경에서만 사용하는 Cursor 룰 디렉토리를
버전 관리 대상에서 제외

* refactor: 로그인 ViewModel 팩토리 제거

DI 컨테이너 기반 생성으로 전환하여
불필요한 Factory 레이어를 제거

* refactor: Debug/Release 환경 분기 제거

* feat: Domain, DTO 모델 추가

* feat: 의존성 주입 설정

* feat: AuthEndpoint 추가

* refactor: 인터페이스 메소드 이름 및 반환값 변경

* feat: 애플 로그인 토큰 저장 플로우 구현

Apple 로그인 플로우에서 토큰을 안전하게 저장하기 위한 인프라와 로직을 추가했습니다.
- KeychainService를 도입해 액세스 토큰을 키체인에 저장하도록 TokenManager 구현
- HTTPClient를 class로 변경해 의존성 주입 및 목킹이 가능하도록 개선
- TokenRepositoryImpl가 identityToken을 문자열로 변환 후 로그인 요청을 전송하고, 성공 시 토큰을 저장하도록 구현
- FinalizeAppleLoginUseCase 및 LoginViewController, AppFlowController에서 TokenRepository/TokenManager를 사용하도록 연결

* test: TokenManager 토큰 저장/조회 유닛 테스트 추가

TokenManager와 KeychainService 동작을 검증하기 위한 Swift Testing 기반 유닛 테스트를 추가했습니다.
- InMemoryKeychainService 목을 추가해 Keychain 의존성을 메모리로 대체
- 토큰 set 성공/실패 시나리오 및 load 성공/실패 시나리오를 #expect와 @test로 검증

* test: TokenRepositoryImpl 애플 로그인 시나리오 유닛 테스트 추가

TokenRepositoryImpl이 애플 로그인 토큰을 처리하는 다양한 시나리오를 검증하기 위한 Swift Testing 기반 테스트를 추가했습니다.
- MockHTTPClient/MockTokenManager를 도입해 HTTP 요청 및 토큰 저장 호출 여부를 검증
- identityToken 문자열 변환 실패 시 AppleLoginError.tokenPersistenceFailed를 던지고 의존성이 호출되지 않는지 테스트
- 문자열 변환은 성공하지만 HTTP 요청이 실패하는 경우 NetworkError.httpError를 그대로 전달하고 토큰이 저장되지 않는지 테스트

* feat: 토큰 삭제 기능을 Domain 계층에 추가

토큰 삭제를 위한 인터페이스를 Domain 계층에 정의했습니다.
- TokenManaging 프로토콜에 clear() 메서드 추가
- TokenRepository 프로토콜에 deleteToken() 메서드 추가

* feat: 토큰 삭제 기능을 Data 계층에 구현

Domain 계층에서 정의한 토큰 삭제 인터페이스를 Data 계층에서 구현했습니다.
- KeychainService에 delete(key:) 메서드 추가
- TokenManager에 clear() 메서드 구현
- TokenRepositoryImpl에 deleteToken() 메서드 구현
- MockTokenManager에 clear() 메서드 추가

* feat: MainViewController에 로그아웃 기능 추가

MainViewController에서 토큰 삭제 및 로그아웃 기능을 구현했습니다.
- TokenRepository를 생성자로 주입받도록 변경
- 로그아웃 버튼 추가 및 deleteToken() 호출
- didLogoutPublisher를 통해 로그아웃 이벤트 발행

* feat: AppFlowController에 로그아웃 반응형 연결 추가

AppFlowController에서 MainViewController의 로그아웃 이벤트를 Combine으로 구독하여 반응형으로 화면 전환하도록 구현했습니다.
- MainViewController 생성 시 TokenRepository를 DI로 resolve
- didLogoutPublisher 구독으로 로그아웃 시 isLogin = false 설정 후 화면 전환
- didLoginPublisher 구독에서 isLogin = true 설정으로 일관성 유지
- updateLoginStateFromToken() 활성화

* refactor: SceneDelegate의 DI 등록 로직 정리

SceneDelegate에서 불필요한 registerMockData() 제거 및 TokenManager 등록 추가
- Mock 데이터 등록 로직 제거
- TokenManager를 DI 컨테이너에 등록하도록 추가

* design: DesignSystem 에셋 및 색상 리소스 추가

앱에서 사용할 이미지 에셋과 색상 리소스를 DesignSystem에 추가했습니다.
- Asset.xcassets에 logo, character 이미지셋 추가
- Color.xcassets에 basic 색상셋 추가

* design: LoginViewController UI 개선 및 DesignSystem 적용

LoginViewController의 UI를 개선하고 DesignSystem을 적용했습니다.
- DesignSystem.basic 색상을 배경색으로 사용
- 로고 및 캐릭터 이미지 추가
- Apple 로그인 버튼 스타일 변경 (signIn 타입)
- 레이아웃 개선 및 이미지 제약 조건 추가

* test: TokenRepository 테스트 개선 및 MockHTTPClient 기능 추가

TokenRepository 테스트를 개선하고 MockHTTPClient에 스텁 응답 기능을 추가했습니다.
- MockHTTPClient에 stubResponse 프로퍼티 추가로 정상 응답 시뮬레이션 가능
- TokenRepositoryImplTests 삭제 및 TokenRepositoryTests로 통합
- 테스트 코드 정리 및 개선

* chore: Info.plist에 BASE_URL 및 HTTP 통신 허용 설정 추가

앱 설정에 네트워크 관련 설정을 추가했습니다.
- BASE_URL 환경 변수를 Info.plist에 추가
- NSAppTransportSecurity 설정으로 HTTP 통신 허용 (개발 환경용)

* refactor: DesignSystem 리소스 구조 정리

DesignSystem 리소스 파일 구조를 정리했습니다.
- Asset.xcassets를 Assets.xcassets로 이름 변경
- Color.xcassets를 Assets.xcassets/Colors로 통합
- 리소스 파일 경로 일관성 개선

* design: 브랜드 및 캐릭터 에셋 추가

앱 브랜딩을 위한 로고 및 캐릭터 이미지 에셋 추가
- AppBrand.xcassets에 로고 워드마크 추가
- character.xcassets에 캐릭터 이미지 추가

* refactor: [로그인] DesignSystem API 변경 반영

LoginViewController에서 새로운 DesignSystem API 사용
- DesignSystem.basic → DesignSystemAsset.background.color
- DesignSystemAsset.Asset.logo → DesignSystemAsset.logo
- DesignSystemAsset.Asset.character → DesignSystemAsset.character

* fix: [이미지피커] 에셋 이름 오타 수정

ImagePickerCell에서 에셋 이름 오타 수정
- checkmarkUnselected → checkmarkUnSelected

* refactor: [토큰관리] TokenRepository 삭제 및 테스트 추가

TokenRepository 파일 삭제 및 TokenRepositoryImpl 테스트 추가
- 불필요한 TokenRepository.swift 파일 제거
- TokenRepositoryImpl의 에러 처리 로직 테스트 추가
  - String 변환 실패 시 에러 처리 검증
  - HTTP 요청 실패 시 토큰 미저장 검증

* test: [토큰관리] Mock 객체에 토큰 삭제 기능 추가

토큰 삭제 테스트를 위한 Mock 객체 확장
- InMemoryKeychainService에 delete 메서드 및 shouldDeleteSucceed 속성 추가
- MockTokenManager에 clearCallCount, shouldClearThrow 속성 및 clear 메서드 구현

* test: [토큰관리] TokenManager clear 메서드 테스트 추가

TokenManager의 토큰 삭제 기능 테스트 추가
- 토큰 저장 후 clear 시 토큰이 제대로 삭제되는지 검증
- clear 실패 시 에러를 던지는지 검증
- 테스트 메시지 간소화

* test: [토큰관리] TokenRepository deleteToken 메서드 테스트 추가

TokenRepository의 토큰 삭제 기능 테스트 추가 및 개선
- 토큰 저장 후 삭제 시 토큰이 제대로 삭제되는지 검증
- 삭제 실패 시 에러를 그대로 전파하는지 검증
- 테스트 메시지 간소화 및 가독성 개선

* fix: LoginError 케이스 추가, 토큰 실패 테스트 케이스 수정

* chore: 사용하지 않는 코드 삭제

* refactor: KeychainService, HTTPClient 인터페이스 생성 및 적용

* refactor: TokenRepository -> AuthRepository로 변경

* refactor: HTTPClient 개선

* refactor: some 추가
* chore: 컬러셋 수정

* chore: 폰트셋 수정

* fix: hd20 추가

* refactor: 사용하지 않는 컬러셋 교체

* refactor: 추가버튼 변경
* feat: 로거 Dependency 추가

* refactor: HTTPClient 로거 적용 및 에러 세분화

* test: HTTPClient 테스트
* feat: 위클리 뷰 카드 및 카드스택 컴포넌트  추가

* refactor: 스택뷰

* feat: kingfisher 추가

* refactor: 기록 카드 디자인 파인튠

* refactor: badge view

* feat: glow 적용

* refactor: border view access level 조정

* fix: 테스트 실패 수정
* feat: 위클리 뷰 카드 및 카드스택 컴포넌트  추가

* refactor: 스택뷰

* feat: kingfisher 추가

* refactor: 기록 카드 디자인 파인튠

* refactor: badge view

* feat: glow 적용

* refactor: border view access level 조정

* fix: 테스트 실패 수정

* feat: 음식 기록 저장 Domain Layer 추가

* feat: MockFoodRecordRepository에 saveRecord 구현

* feat: 사진 선택 후 기록 저장 플로우 구현

* feat: image preselect

* feat: pending record 추가

* fix: 이미지 업로드 로직 수정
* feat: 월간 캘린더 Entity 및 UseCase 추가

* feat: 월간 캘린더 UI 컴포넌트 추가

* feat: 월간 캘린더 ViewModel 및 화면 연결

* feat: primaryLight 컬러 에셋 및 그라디언트 유틸 함수 추가

* feat: 월간 캘린더 오늘 날짜 그라디언트 적용 및 Constants 추출

* refactor: 월간 캘린더 ViewController Constants 추출

* chore: 미사용 FoodSlotView 삭제

* refactor: 월간 캘린더 UseCase 구조 개선 및 ViewModel 간소화

- FetchMonthlyCalendarDaysUseCase로 통합 (날짜 생성 + 음식 기록 조회)
- Calendar Extension으로 기간 계산 로직 분리
- Extension 내부에서 firstWeekday 자동 설정으로 캡슐화
- ViewModel 코드 간소화 (113줄 → 11줄)

* chore: FoodRecord, FoodGenre에 Sendable 추가

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>

* refactor: MonthlyCalendarDay dayNumber를 String에서 Int로 변경

포맷팅은 Cell에서 표시 시점에 적용

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>

* refactor: MonthlyCalendarDayCell 캐스팅을 guard let으로 안전하게 변경

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>

* refactor: MonthlyCalendarViewController Constants를 nested type으로 이동

제네릭 타입의 static stored property 제약으로 computed property 사용

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>

* fix: monthPickerCancellable 메모리 누수 방지

전용 프로퍼티로 관리하고 사용 후 즉시 해제

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>

* refactor: guard let으로 변경

* refactor: FetchMonthlyCalendarDaysUseCase 시간복잡도 개선

* refactor: 메인화면 Weekly로 변경

---------

Co-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com>
* feat: 월간 캘린더 Entity 및 UseCase 추가

* feat: 월간 캘린더 UI 컴포넌트 추가

* refactor: 월간 캘린더 ViewController Constants 추출

* chore: 미사용 FoodSlotView 삭제

* feat: 폴라로이드 카드 뷰 단일/겹쳐진 레이아웃 구현

- PolaroidImageCardsView로 클래스명 변경
- 이미지 1개일 때 중앙 배치 단일 카드 레이아웃 추가
- 이미지 2개일 때 겹쳐진 카드 레이아웃 유지
- configure 메서드를 단일/겹쳐진 이미지용으로 분리
- 카드 크기 및 회전 각도 조정

* feat: 월간 캘린더 셀에 폴라로이드 카드 뷰 연결

- foodImageView를 polaroidImageCardsView로 교체
- 기록이 있을 때 폴라로이드 카드 뷰 표시
- 임시로 플레이스홀더 이미지 사용

* refactor: PolaroidImageCardsView 파일명 클래스명과 일치시킴

* chore: 필요없는 파일 삭제

* chore: 임시로 메인화면 MonthlyCalendar로 변경

* chore: 사용하지 않는 Usecase 삭제

* refactor: Today Cell 컬러 적용

* refactor: Constants 캡슐화 적용
* fix: 미래 이동 불가

* feat: 백그라운드 태스크 관리

* refactor: 포토카드 디자인 수정

* refactor: 뷰모델 로직 개선

* refactor: 로컬푸시 제거

* refactor: struct로 변경

* refactor: bgTask 분리

* fix: 빌드실패 해결

* refactor: handler 로직 분리

* refactor: 백그라운드 태스킹 제거, 대신 바로 pending result 리턴

* refactor: 중복로직 merge

* refactor: usecase DI

* refactor: 필요없는 코드 삭제

* refactor: 코드 정리

* refactor: 코드 정리

* refactor: `DateContent`로 묶어서 vc에 정보 전송

* refactor: 안쓰는 파일 삭제

* refactor: 안쓰는 파일 삭제
* chore: 아이콘 에셋 추가

- icon-next, icon-down 에셋 추가

* feat: 폴라로이드 카드 개수별 레이아웃 적용

- FoodRecord 1개: 단일 카드 (회전 없이 똑바로 배치)
- FoodRecord 2개 이상: 겹쳐진 카드 레이아웃

* feat: 월 선택 UI 개선

- 월 선택 BottomSheet를 UIPickerView 기반으로 재구현
- 헤더에 연도 표시 추가 (yyyy년 M월)
- 아이콘 변경 (SF Symbol → DesignSystem 아이콘)
- BottomSheet 상태에 따라 아이콘 토글 (icon-next ↔ icon-down)
- 전체 헤더 영역 터치 가능하도록 개선

* feat: 월간 캘린더 셀 선택 시 상세 화면 이동

- FoodRecordDetailViewController 추가
- FoodRecord가 있는 셀 클릭 시 상세 화면 표시
- 선택한 날짜의 FoodRecord 배열 전달

* fix: 월간 캘린더 날짜 계산 및 시간대 이슈 수정

- 28일(4주) 월에 다음 주 7일 추가 로직 수정
- Calendar 시간대를 Asia/Seoul로 명시적 설정
- isCurrentMonth 판단 로직 개선 (년/월 직접 비교)

* refactor: 날짜 선택 바텀 시트 Constants 적용

* feat: 텍스트헤더 Component 추가 & Constants 적용 및 변경

* chore: 공백 삭제

* refactor: 서울 시간 Calendar 생성 및 적용

* fix: Picker Dismiss시에 셰브론 이미지가 변경되지 않는 버그 수정

* fix: 데이트피커에서 최신 년, 월까지만 보여지도록 수정

* refactor: 레이아웃 수정

* chore: FoodDetailVC 이름 수정

* fix: MonthlyCalendarHeader 영역이 잡히지 않던 버그 수정

* refactor: RecordPromptHeaderView 이름을 주입받을 수 있도록 개선

* fix: 과거 년도 선택시에 미래 년도가 보이지 않던 버그 수정

* refactor: 셰브론 변경시에 애니메이션 적용
* feat: Pending 기록 관리를 위한 Domain 레이어 추가

* feat: Pending 기록 저장소 및 Mock 분석 결과 Repository 구현

* feat: Pending 기록 복원 및 Push 알림 처리 기능 추가

* feat: apns 세팅

* feat: FCM 추가

* chore: Firebase key 숨기기

* refactor: 푸시노티 레이어

* refactor: 푸시노티피케이션 수신 구조 개선

* chore: 로그 삭제

* feat: background 전환 케이스 대비

* test: Mock이 완료를 전송

* refactor: view model이 선택한 date에 대한 정보만 emit하게 변경

* refactor: 필요없는 업데이트 제거

* fix: foreground에서 푸시 보여주지 않음

* refactor: 파일 영구저장 로직 분리

* refactor: 유즈케이스 이름 변경

* refactor: 뷰모델 책임분리

* refactor: DI 개선

* fix: 푸시알림 결과 반영
* feat: AuthEndpoint에 토큰 검증 엔드포인트 추가

* feat: 토큰 검증 응답 DTO 추가

* feat: 토큰 검증을 위한 TokenRepository 추가

* feat: 액세스 토큰 검증 UseCase 추가

* chore: TokenRepository 및 ValidateAccessTokenUseCase DI 등록

* feat: 앱 시작 시 서버 토큰 검증 적용

* chore: docC 추가

* feat: NetworkMonitor 추가

* refactor: 네트워크 상태에 따른 분기 적용
* feat: Pending 기록 관리를 위한 Domain 레이어 추가

* feat: Pending 기록 저장소 및 Mock 분석 결과 Repository 구현

* feat: Pending 기록 복원 및 Push 알림 처리 기능 추가

* feat: apns 세팅

* feat: FCM 추가

* chore: Firebase key 숨기기

* refactor: 푸시노티 레이어

* refactor: 푸시노티피케이션 수신 구조 개선

* chore: 로그 삭제

* feat: background 전환 케이스 대비

* test: Mock이 완료를 전송

* refactor: view model이 선택한 date에 대한 정보만 emit하게 변경

* refactor: 필요없는 업데이트 제거

* fix: foreground에서 푸시 보여주지 않음

* refactor: 파일 영구저장 로직 분리

* refactor: 유즈케이스 이름 변경

* refactor: 뷰모델 책임분리

* refactor: DI 개선

* fix: 푸시알림 결과 반영

* feat: 디테일 뷰

* refactor: 디자인 최신화

* refactor: 디자인 최신화

* chore: 섹션박스 디자인

* chore: 상세보기 네비게이션 바 커스텀

* refactor: 위클리 바텀 컨텐츠 뷰

* feat: 작성중 카드 뷰

* refactor: empty 뷰 분리

* refactor: empty 뷰 디자인 적요

* fix: conflict 해결

* refactor: 코드 정리

* refactor: 코드정리

* refactor: 코드정리

* refactor: meal section에서 기록 뷰 분리

* fix: 디자인 밤티 수정

* refactor: publisher 중복 개선

* refactor: detail vc/vm 수정

* fix: 날짜 변경관련 로직 수정

* fix: 스크롤에 navbar 숨기기

* refactor: detail vm DI
* refactor: identityToken Data에서 String으로 변경

ViewController에서 Data를 String으로 변환하고,
Domain/Data 레이어는 String만 다루도록 수정

* refactor: TokenManager를 AuthTokenStorage로 리네이밍

더 명확한 네이밍으로 변경
- TokenManaging → AuthTokenStoring
- TokenManager → AuthTokenStorage
- MockTokenManager → MockAuthTokenStorage

* feat: 디바이스 정보 제공 기능 추가

로그인 시 디바이스 ID와 OS 버전을 서버에 전송하기 위한 기능 추가
- DeviceInfoProviding 프로토콜 정의
- DeviceInfoProvider 구현체 추가

* feat: FCM 토큰 저장 기능 추가

로그인 시 FCM 토큰을 서버에 전송하기 위한 기능 추가
- PushTokenStoring 프로토콜 정의
- PushTokenStorage 구현체 추가 (UserDefaults 기반)

* feat: 알림 권한 확인 기능 추가

로그인 시 알림 권한 상태를 서버에 전송하기 위한 기능 추가
- NotificationAuthorizationProviding 프로토콜 정의
- NotificationAuthorizationProvider 구현체 추가

* feat: 로그인 요청에 디바이스/푸시/알림 정보 추가

서버에 더 많은 디바이스 정보를 전송하도록 수정
- AuthRequestDTO에 deviceId, deviceToken, isActive 필드 추가
- FinalizeAppleLoginUseCase에 DeviceInfoProvider, PushTokenStorage, NotificationAuthorizationProvider 의존성 추가

* chore: Info.plist 템플릿 및 NetworkMonitoring 업데이트

- SceneDelegate 앱 Info.plist에 푸시 알림 권한 추가
- NetworkMonitoring 프로토콜 Sendable 준수 추가

* chore: DI 컨테이너 설정 업데이트

새로 추가된 Device/Push/Notification 기능을 DI 컨테이너에 등록
- DeviceInfoProvider, PushTokenStorage, NotificationAuthorizationProvider 등록
- FinalizeAppleLoginUseCase에 새 의존성 주입
- TokenManager → AuthTokenStorage 변경 반영

* refactor: DeviceInfo 객체 주입

* refactor: 알림 권한 요청 로직 개선

* refactor: FCM 토큰 Inmemory로 저장, 과한 추상화 제거

* chore: todo 작성
* chore: 탭바 아이콘 에셋 추가

- icon-home, icon-weekly, icon-monthly, icon-insight 에셋 추가

* refactor: 캘린더 관련 파일 구조 개선

- MonthlyCalendar, WeeklyCalendar를 Calendar 하위로 이동

* feat: RootTabBarController 및 CalendarViewController 구현

- 홈, 주간, 월간, 인사이트 4개 탭 구성
- 각 탭별 ViewController 연결
- 탭바 스타일 및 선택 상태 처리

* feat: 탭바 기반 앱 플로우 적용

- AppFlowController에서 RootTabBarController로 전환
- SceneDelegate에 푸시 알림 처리 로직 추가
- AuthRepository 로그아웃 시 토큰 초기화 개선

* chore: 이전 위치 캘린더 파일 정리

- MonthlyCalendar, WeeklyCalendar 원본 파일 삭제

* feat: 리사이징한 24x24 에셋 추가

* feat: CalendarVC 네비게이션바 추가

* refactor: 탭바 컬러 수정

* feat: 인사이트 탭바에서 캘린더 전환 탭 버튼이 보이지 않도록 추가

* chore: 필요없는 디버그 프린트 제거

* refactor: CalendarVC 생성 책임 변경

* fix: Task MainActor 제거

* fix: ToggleVC Navigation 제거

* refactor: SnapKit 적용

* chore: diff 적용
* feat: 디바이스 정보 제공 기능 추가

로그인 시 디바이스 ID와 OS 버전을 서버에 전송하기 위한 기능 추가
- DeviceInfoProviding 프로토콜 정의
- DeviceInfoProvider 구현체 추가

* chore: DI 컨테이너 설정 업데이트

새로 추가된 Device/Push/Notification 기능을 DI 컨테이너에 등록
- DeviceInfoProvider, PushTokenStorage, NotificationAuthorizationProvider 등록
- FinalizeAppleLoginUseCase에 새 의존성 주입
- TokenManager → AuthTokenStorage 변경 반영

* feat: HTTPBody 열거형 추가

* feat: MultipartFormData, File 타입 추가

* feat: BatchUploadResponseDTO, PhotoResultDTO 추가

* feat: PhotosEndpoint 추가

* refactor: Requestable bodyParameters 타입을 HTTPBody로 변경 및 헤더 처리 분리

* refactor: AuthEndpoint bodyParameters 타입을 HTTPBody로 적용

* test: bodyParameters 타입 변경에 따른 Mock 및 HTTPClientTests 수정

* test: MultipartFormData 생성 검증 테스트 추가

* test: multipart 배치 업로드 실제 통신 데모 테스트 추가

* test: 멀티파트 demo Test 추가

* chore: 필요없는 파일 삭제

* chore: 필요없는 TODO 삭제

* refactor: guard let 적용

* chore: Demo 테스트 제거
Copy link
Member

@enebin enebin left a comment

Choose a reason for hiding this comment

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

2만줄밖에 안되나? 생각보다 적네ㅋㅋㅋㅋㅋ

@kanghun1121 kanghun1121 merged commit 7c37566 into main Mar 3, 2026
1 of 3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants