{"id":30328723,"url":"https://github.com/teddko/search_favorites","last_synced_at":"2026-07-13T07:32:27.686Z","repository":{"id":309710484,"uuid":"1036794871","full_name":"TeddKo/search_favorites","owner":"TeddKo","description":null,"archived":false,"fork":false,"pushed_at":"2025-08-17T19:14:37.000Z","size":390,"stargazers_count":1,"open_issues_count":0,"forks_count":1,"subscribers_count":0,"default_branch":"master","last_synced_at":"2025-10-08T19:08:45.859Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Dart","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/TeddKo.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-08-12T15:38:27.000Z","updated_at":"2025-08-21T07:51:35.000Z","dependencies_parsed_at":"2025-08-13T12:36:27.648Z","dependency_job_id":null,"html_url":"https://github.com/TeddKo/search_favorites","commit_stats":null,"previous_names":["teddko/search_favorites"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/TeddKo/search_favorites","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TeddKo%2Fsearch_favorites","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TeddKo%2Fsearch_favorites/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TeddKo%2Fsearch_favorites/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TeddKo%2Fsearch_favorites/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/TeddKo","download_url":"https://codeload.github.com/TeddKo/search_favorites/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TeddKo%2Fsearch_favorites/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":35414732,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-07-13T02:00:06.543Z","response_time":119,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-08-18T01:39:58.201Z","updated_at":"2026-07-13T07:32:27.670Z","avatar_url":"https://github.com/TeddKo.png","language":"Dart","funding_links":[],"categories":[],"sub_categories":[],"readme":"**Github Repository를 검색하고 즐겨찾기로 저장하는 Flutter 애플리케이션입니다.**\n\n-----\n\n## 🏛️ 아키텍처 (Architecture)\n\n이 프로젝트는 **클린 아키텍처 (Clean Architecture)** 와 **멀티 패키지 아키텍처 (Multi-package Architecture)** 를 기반으로 구축되었습니다. 이를 통해 코드의 재사용성을 높이고, 각 기능의 독립성을 보장하여 유지보수와 확장이 용이한 구조를 지향합니다.\n\n### 🌟 주요 설계 원칙\n\n* **관심사 분리 (SoC)**: 각 계층(Data, Domain, Presentation)을 명확히 분리하여 독립적으로 개발하고 테스트할 수 있도록 설계했습니다.\n* **SOLID**: 5가지 SOLID 원칙을 준수하여 유연하고 확장 가능한 코드를 작성하고자 했습니다.\n* **단방향 데이터 흐름 (UDF)**: MVI 패턴을 적용하여 데이터의 흐름을 한 방향으로 제어함으로써 상태 변화를 예측 가능하게 만들었습니다.\n\n### 🏗️ 프로젝트 구조 다이어그램\n\n```\nsearch_favorites/\n├── android/            # Android 플랫폼 관련 코드\n├── ios/                # iOS 플랫폼 관련 코드\n├── lib/                # 애플리케이션의 메인 소스 코드\n│   └── main.dart       # 앱의 시작점\n├── linux/              # Linux 플랫폼 관련 코드\n├── macos/              # macOS 플랫폼 관련 코드\n├── packages/           # 모듈화된 패키지\n│   ├── core/\n│   │   ├── data/           # 데이터 소스, 레포지토리 구현\n│   │   ├── database/       # 로컬 데이터베이스 (Drift)\n│   │   ├── designsystem/   # 색상, 테마, 폰트 등 디자인 시스템\n│   │   ├── domain/         # 비즈니스 로직 (유스케이스, 모델)\n│   │   └── network/        # 네트워크 API 호출 (Dio)\n│   ├── feature/\n│   │   ├── favorites/      # 즐겨찾기 화면 및 관련 로직\n│   │   ├── root/           # 하단 네비게이션 등 앱의 루트 구조\n│   │   └── search/         # 검색 화면 및 관련 로직\n│   ├── router/           # 화면 간의 라우팅 관리 (go_router)\n│   └── shared/\n│       ├── common/         # 공통적으로 사용되는 모델 및 유틸리티\n│       ├── ui/             # 공통 UI 위젯 (예: RepositoryCard)\n│       └── util/           # 로거 등 공통 유틸리티\n├── test/               # 위젯 테스트 코드\n├── web/                # Web 플랫폼 관련 코드\n├── windows/            # Windows 플랫폼 관련 코드\n├── melos.yaml          # Melos를 이용한 멀티 패키지 관리 설정\n└── pubspec.yaml        # 프로젝트 의존성 관리\n```\n\n-----\n\n## 📦 패키지 관리 (Package Management)\n\n**Melos**를 사용하여 모노레포(Monorepo) 내의 여러 패키지를 효율적으로 관리합니다. `melos.yaml` 파일에 정의된 스크립트를 통해 모든 패키지에 대한 작업을 일괄적으로 수행할 수 있어 개발 생산성을 높여줍니다.\n\n-----\n\n## ✨ 주요 기능 (Features)\n\n* **저장소 검색**: Github API를 연동하여 실시간으로 저장소를 검색합니다.\n* **즐겨찾기**: 검색한 저장소를 로컬 데이터베이스에 저장하고 관리합니다.\n* **홈 위젯**: 가장 최근에 추가된 즐겨찾기 항목을 홈 화면 위젯으로 표시합니다.\n\n-----\n\n## 🛠️ 기술 스택 및 라이브러리 (Tech Stack \u0026 Libraries)\n\n| Category           | Library/Tool                                                                                                                                                                                            |\n| ------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| **State Management** | `flutter_riverpod`, `riverpod_generator`                                                              |\n| **Routing** | `go_router`                                                                                            |\n| **Network** | `dio`                                                                                                  |\n| **Local Storage** | `drift`                                                                                                |\n| **Code Generation**| `freezed`, `json_serializable`, `build_runner`                                                         |\n| **Others** | `flutter_dotenv`, `logger`, `home_widget` |\n\n-----\n\n## 🚀 시작하기 (Getting Started)\n\n### 사전 요구 사항\n\n* Flutter 3.x 이상\n* Melos\n\n### 설치\n\n1.  **저장소 복제**:\n\n    ```bash\n    git clone https://github.com/teddko/search_favorites.git\n    cd search_favorites\n    ```\n\n2.  **Melos 활성화**:\n\n    ```bash\n    dart pub global activate melos\n    ```\n\n3.  **의존성 설치**:\n\n    ```bash\n    melos bootstrap\n    ```\n\n4.  **.env 파일 생성**:\n    루트 디렉토리에 `.env` 파일을 생성하고 Github API 토큰을 추가합니다.\n\n    ```\n    GITHUB_API_TOKEN=your_github_api_token\n    ```\n\n### 실행\n\n```bash\nflutter run\n```","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fteddko%2Fsearch_favorites","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fteddko%2Fsearch_favorites","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fteddko%2Fsearch_favorites/lists"}