# Git 이슈 트래킹 시스템 설정 ## 개요 Zellyy Finance 모바일 앱 개발 과정에서 발생하는 다양한 이슈를 체계적으로 관리하기 위해 Gitea 기반의 이슈 트래킹 시스템을 설정했습니다. 이 문서는 이슈 트래킹 시스템의 설정 과정과 사용 방법을 설명합니다. ## 설정 과정 ### 1. Gitea 저장소 연결 - 저장소 URL: https://gitea.ism.kr/ZELLYY/Zellyy_Finance.git - 저장소 상태: 정상 연결됨 ### 2. API 토큰 생성 Gitea API를 사용하여 이슈를 관리하기 위해 API 토큰을 생성했습니다. 1. Gitea 웹사이트(https://gitea.ism.kr)에 로그인 2. 사용자 설정 > 애플리케이션 > 액세스 토큰 생성 3. 토큰 이름 입력 및 권한 설정: - repo: 저장소에 대한 전체 접근 권한 - issue: 이슈 관리 권한 - write:repository: 저장소 쓰기 권한 4. 토큰 생성 및 안전한 장소에 저장 ### 3. 이슈 등록 API를 통해 다음과 같은 이슈들을 등록했습니다: 1. ConnectivityProvider 클래스의 getter 이름 불일치 2. SyncOperationType enum의 switch 문 불완전 처리 3. UserModel 생성 시 타입 불일치 4. 오프라인 모드 및 테스트 모드 안정화 ## 이슈 목록 ### 이슈 1: ConnectivityProvider 클래스의 getter 이름 불일치 #### 문제 설명 앱 실행 시 `ConnectivityProvider` 클래스의 `isConnected` getter를 찾을 수 없다는 오류가 발생했습니다. #### 오류 메시지 ``` Error (Xcode): lib/screens/home_screen.dart:178:50: Error: The getter 'isConnected' isn't defined for the class 'ConnectivityProvider'. ``` #### 원인 분석 `ConnectivityProvider` 클래스에는 `isConnected` getter가 없고 대신 `isOnline` getter가 정의되어 있었습니다. #### 해결 방법 `home_screen.dart`와 `settings_screen.dart` 파일에서 `isConnected` 대신 `isOnline`을 사용하도록 수정했습니다. #### 코드 변경 ```dart // 변경 전 final bool isOffline = !connectivityProvider.isConnected; // 변경 후 final bool isOffline = !connectivityProvider.isOnline; ``` ### 이슈 2: SyncOperationType enum의 switch 문 불완전 처리 #### 문제 설명 앱 빌드 시 `SyncOperationType` enum의 모든 케이스를 처리하지 않는다는 오류가 발생했습니다. #### 오류 메시지 ``` Error (Xcode): lib/screens/sync_status_screen.dart:294:23: Error: The type 'SyncOperationType' is not exhaustively matched by the switch cases since it doesn't match 'SyncOperationType.register'. ``` #### 원인 분석 `SyncOperationType` enum에 `register`와 `login` 타입이 추가되었지만, 여러 파일의 switch 문에서 이 케이스들을 처리하지 않고 있었습니다. #### 해결 방법 다음 파일들의 switch 문에 `register`와 `login` 케이스를 추가했습니다: - `sync_status_screen.dart` - `api_service.dart` - `sync_status_widget.dart` #### 코드 변경 ```dart // 추가된 케이스 case SyncOperationType.register: operationType = '회원가입'; break; case SyncOperationType.login: operationType = '로그인'; break; ``` ### 이슈 3: UserModel 생성 시 타입 불일치 #### 문제 설명 앱 빌드 시 String 타입의 값을 DateTime 타입의 매개변수에 할당하려고 시도하는 오류가 발생했습니다. #### 오류 메시지 ``` Error (Xcode): lib/services/auth_service.dart:73:37: Error: The argument type 'String' can't be assigned to the parameter type 'DateTime'. ``` #### 원인 분석 `auth_service.dart` 파일에서 `UserModel`을 생성할 때 `createdAt`과 `updatedAt` 필드에 String 타입의 값(`DateTime.now().toIso8601String()`)을 전달하고 있었지만, `UserModel` 클래스에서는 이 필드들이 DateTime 타입으로 정의되어 있었습니다. #### 해결 방법 `auth_service.dart` 파일에서 `createdAt`과 `updatedAt` 필드를 String 대신 DateTime 객체로 전달하도록 수정했습니다. #### 코드 변경 ```dart // 변경 전 createdAt: DateTime.now().toIso8601String(), updatedAt: DateTime.now().toIso8601String(), // 변경 후 createdAt: DateTime.now(), updatedAt: DateTime.now(), ``` ### 이슈 4: 오프라인 모드 및 테스트 모드 안정화 #### 기능 설명 앱의 오프라인 모드와 테스트 모드 기능을 안정화하여 네트워크 연결 없이도 앱을 사용할 수 있도록 했습니다. #### 구현 내용 1. 인증 관련 개선: - 회원가입 및 로그인 메서드에 테스트 모드 추가 - 오프라인 상태에서도 로그인/회원가입 가능하도록 구현 - 서버 오류 발생 시 자동으로 테스트 모드로 전환되는 기능 추가 2. 로컬 데이터베이스 개선: - 사용자 정보 저장 및 조회 기능 추가 - 이메일 기반 사용자 검색 기능 구현 - Hive 초기화 과정에 users 박스 등록 3. 동기화 큐 서비스 개선: - 회원가입 및 로그인 작업을 동기화 큐에 추가하는 기능 구현 - 온라인 상태가 되면 자동으로 동기화되는 메커니즘 구현 4. 모델 클래스 수정: - UserModel의 id 필드 타입을 int에서 String으로 변경하여 테스트 모드 지원 - Hive 어댑터 추가 및 등록 #### 주요 수정 파일 - `/mobile/lib/services/api_service.dart` - `/mobile/lib/services/auth_service.dart` - `/mobile/lib/services/local_database_service.dart` - `/mobile/lib/services/sync_queue_service.dart` - `/mobile/lib/models/user_model.dart` - `/mobile/lib/main.dart` ## API를 통한 이슈 관리 방법 ### 이슈 조회 ```bash curl -X GET "https://gitea.ism.kr/api/v1/repos/ZELLYY/Zellyy_Finance/issues" \ -H "Authorization: token YOUR_ACCESS_TOKEN" ``` ### 이슈 생성 ```bash curl -X POST "https://gitea.ism.kr/api/v1/repos/ZELLYY/Zellyy_Finance/issues" \ -H "Authorization: token YOUR_ACCESS_TOKEN" \ -H "Content-Type: application/json" \ -d '{"title": "이슈 제목", "body": "이슈 내용"}' ``` ### 이슈 수정 ```bash curl -X PATCH "https://gitea.ism.kr/api/v1/repos/ZELLYY/Zellyy_Finance/issues/{issue_id}" \ -H "Authorization: token YOUR_ACCESS_TOKEN" \ -H "Content-Type: application/json" \ -d '{"title": "수정된 이슈 제목", "body": "수정된 이슈 내용", "state": "closed"}' ``` ### 이슈 댓글 추가 ```bash curl -X POST "https://gitea.ism.kr/api/v1/repos/ZELLYY/Zellyy_Finance/issues/{issue_id}/comments" \ -H "Authorization: token YOUR_ACCESS_TOKEN" \ -H "Content-Type: application/json" \ -d '{"body": "댓글 내용"}' ``` ## 웹 인터페이스를 통한 이슈 관리 Gitea 웹 인터페이스를 통해 이슈를 관리할 수도 있습니다: 1. 웹 브라우저에서 https://gitea.ism.kr/ZELLYY/Zellyy_Finance/issues 접속 2. 이슈 목록 확인 및 관리 3. 이슈에 라벨, 담당자, 마일스톤 설정 4. 이슈 상태 변경 (열림/닫힘) 5. 이슈에 댓글 추가 ## 향후 계획 1. 이슈 라벨 체계 구축 (버그, 기능 요청, 개선 등) 2. 마일스톤 설정을 통한 릴리스 계획 관리 3. 자동화된 이슈 보고 시스템 구축 4. 이슈와 커밋 연동을 통한 변경 사항 추적 개선