프로젝트 규모는 중소
현재 트리
📦lib
┣ 📂api
┃ ┣ 📂dto
┃ ┗ 📂services
┣ 📂auth
┃ ┣ 📂services
┃ ┣ 📂view
┃ ┃ ┣ 📂widgets
┃ ┗ 📂view_model
┣ 📂common
┣ 📂community
┣ 📂content
┣ 📂datasource
┃ ┣ 📂remote
┃ ┗ 📜dio_client.dart
┣ 📂enums
┣ 📂insight
┣ 📂models
┣ 📂mypage
┣ 📂onboarding
┣ 📂portfolio
┣ 📂profile_setup
┣ 📂thoughts
┣ 📜main.dart
┣ 📜root_page.dart
┗ 📜splash_screen.dart
이 구조에서
datasource와 services의 역할이 혼재되어잇음
datasource는 데이터 소스(API, 로컬 DB) 호출 담당, services는 비즈니스 로직을 포함한 API 추상화 계층으로 분리해서 사용해야함
auth 폴더
api/에서 이미 인증 관련 서비스(auth_datasource.dart, auth_service.dart)를 관리하고 있으므로 중복 코드가 발생하지 않도록 조정해야함
인증 로직은 api/에서 처리하고, auth/에는 UI와 상태 관리만 포함하도록 해야함
models 폴더
현재 models 내부에 너무 많은 도메인 모델이 평면적으로 나열되어 있음
도메인별 하위 폴더로 구분
📦lib/
├── api/ # API 관련 코드
│ ├── datasource/ # 원격 및 로컬 데이터 소스 (기존 datasource)
│ │ ├── remote/
│ ├── dto/ # dto
│ └── services/ # API 호출 추상화 계층
├── auth/ # 인증 관련 모든 코드
│ ├── services/
│ ├── view/
│ ├── view_model/
│ └── widgets/
├── common/ # 공통 코드
│ ├── constants/
│ ├── helper/ # 앱 전체 헬퍼 함수
│ ├── utils/ # 공통 유틸리티 함수
│ ├── view_model/ # 공통 뷰모델
│ └── widgets/ # 공통 위젯
├── community/ # 커뮤니티 관련 코드
│ ├── view/
│ ├── view_model/
│ └── widgets/
├── content/ # 콘텐츠 관련 코드
│ ├── view/
│ ├── view_model/
│ └── widgets/
├── enums/ # Enum 관련 코드
├── insight/ # 인사이트 관련 코드
│ ├── view/
│ ├── view_model/
│ └── widgets/
├── models/ # 도메인 모델
├── mypage/ # 마이페이지 관련 코드
│ ├── view/
│ ├── view_model/
│ └── widgets/
├── onboarding/ # 온보딩 관련 코드
│ ├── view/
│ ├── view_model/
│ └── widgets/
├── profile_setup/ # 프로필 설정 관련 코드
│ ├── view/
│ ├── view_model/
│ └── widgets/
├── thoughts/ # 생각 관련 코드
│ ├── view/
│ ├── view_model/
│ ├── widgets/
│ └── func/ # 특정 기능별 유틸리티 (필요시 유지)
├── portfolio/ # 포트폴리오 관련 코드
│ ├── view/
│ ├── view_model/
│ ├── widgets/
│ └── models/ # 포트폴리오와 관련된 도메인 모델
├── splash/ # 스플래시 스크린
├── main.dart # 앱의 엔트리 포인트
├── root_page.dart # 루트 페이지