{"id":15627552,"url":"https://github.com/skydoves/goldmovies","last_synced_at":"2025-08-23T15:38:24.760Z","repository":{"id":51680676,"uuid":"225837633","full_name":"skydoves/GoldMovies","owner":"skydoves","description":"👑 The GoldMovies is based on Kotlin, MVVM architecture, coroutines, dagger, koin, and material designs \u0026 animations.","archived":false,"fork":false,"pushed_at":"2021-05-09T08:45:23.000Z","size":38398,"stargazers_count":357,"open_issues_count":4,"forks_count":53,"subscribers_count":14,"default_branch":"master","last_synced_at":"2025-05-20T00:08:20.808Z","etag":null,"topics":["android","coroutines","dagger","koin","kotlin","mvvm","mvvm-architecture","skydoves","themoviedb"],"latest_commit_sha":null,"homepage":"","language":"Kotlin","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/skydoves.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":null,"support":null},"funding":{"github":"skydoves","custom":["https://www.paypal.me/skydoves","https://www.buymeacoffee.com/skydoves"]}},"created_at":"2019-12-04T10:13:59.000Z","updated_at":"2024-08-28T10:08:08.000Z","dependencies_parsed_at":"2022-08-22T21:20:42.327Z","dependency_job_id":null,"html_url":"https://github.com/skydoves/GoldMovies","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/skydoves/GoldMovies","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/skydoves%2FGoldMovies","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/skydoves%2FGoldMovies/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/skydoves%2FGoldMovies/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/skydoves%2FGoldMovies/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/skydoves","download_url":"https://codeload.github.com/skydoves/GoldMovies/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/skydoves%2FGoldMovies/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":271754934,"owners_count":24815322,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-08-23T02:00:09.327Z","response_time":69,"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":["android","coroutines","dagger","koin","kotlin","mvvm","mvvm-architecture","skydoves","themoviedb"],"created_at":"2024-10-03T10:17:26.638Z","updated_at":"2025-08-23T15:38:24.735Z","avatar_url":"https://github.com/skydoves.png","language":"Kotlin","funding_links":["https://github.com/sponsors/skydoves","https://www.paypal.me/skydoves","https://www.buymeacoffee.com/skydoves"],"categories":[],"sub_categories":[],"readme":"# GoldMovies\n[![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0) [![API](https://img.shields.io/badge/API-16%2B-brightgreen.svg?style=flat)](https://android-arsenal.com/api?level=16) [![Build Status](https://travis-ci.com/skydoves/GoldMovies.svg?branch=master)](https://travis-ci.com/skydoves/GoldMovies) \u003ca href=\"https://github.com/skydoves\"\u003e\u003cimg alt=\"License\" src=\"https://img.shields.io/static/v1?label=GitHub\u0026message=skydoves\u0026color=C51162\"/\u003e\u003c/a\u003e\n\n👑 The GoldMovies is based on Kotlin, MVVM architecture, coroutines, dagger, koin, and material designs \u0026 animations.\n\n## Previews\n\u003cp align=\"center\"\u003e\n\u003cimg src=\"/preview/preview0.gif\" width=\"32%\"/\u003e\n\u003cimg src=\"/preview/preview1.gif\" width=\"32%\"/\u003e\n\u003cimg src=\"/preview/preview2.gif\" width=\"32%\"/\u003e\n\u003c/p\u003e\n\n## What Open API Used?\n[The Movies Database](https://developers.themoviedb.org/3/getting-started/introduction) (TMDB) is a community built movie and TV database.\nEvery piece of data has been added by our amazing community dating back to 2008.\nTMDb's strong international focus and breadth of data is largely unmatched and something we're incredibly proud of.\nPut simply, we live and breathe community and that's precisely what makes us different.\n\n## How to build on your environment\nAdd your [The Movie DB](https://www.themoviedb.org)'s API key in your `local.properties` file.\n```xml\ntmdb_api_key=YOUR_API_KEY\n```\n\n## Module structure\nThe module structure is designed to try several different architectures.\n\n\u003cimg src=\"/preview/structure.png\" width=\"100%\"/\u003e\n\n## Entity module\n[Entity module](/entity) composed of entity models for persisting in database and response models for fetching data from network requests. \n\n### Dependencies\n- Room Persistence - constructing database (An abstraction layer over SQLite).\n- [Gson converter](https://github.com/square/retrofit/tree/master/retrofit-converters/gson) - a converter which uses Gson for serialization to and from JSON.\n- [Threetenabp](https://github.com/JakeWharton/ThreeTenABP) - an adaptation of the JSR-310 backport for Android.\n\n### Unit Test\n[Unit Tests](/entity/src/test/java/com/skydoves/entity) to construct database and migration to newer versions using the Room.\n\u003cbr\u003e\u003cbr\u003e\n\u003cimg src=\"/preview/unitTest0.png\" width=\"100%\"/\u003e\n\n## Network module\n[Network module](/network) composed of abstractions for RESTful requests. \nAnd `ApiResponseModel` for standardizing a raw request model. \nAn Interceptor for requesting every time with a query parameter `api_key`.\n\n### Dependencies\n- [Retrofit2](https://github.com/square/retrofit) - constructing the REST API.\n- [Logging Interceptor](https://github.com/square/okhttp/tree/master/okhttp-logging-interceptor) - logs HTTP request and response data.\n- [MockWebServer](https://github.com/square/okhttp/tree/master/mockwebserver) - constructing a web server for testing HTTP clients.\n\n### Unit Test\n[Unit Tests](/network/src/test) to verify RESTful requests abstractions via a testing web server and mocked data.\n\u003cbr\u003e\u003cbr\u003e\n\u003cimg src=\"/preview/unitTest1.png\" width=\"100%\"/\u003e\n\n## Common-ui module\n[Common-ui module](/common-ui) composed of adapters and viewholders for composing recyclerview's item via databinding. And some factories and extensions related to custom views.\n\n### Dependencies\n- [Google-Material](https://github.com/material-components/material-components-android) - material Components for Android (MDC-Android) help developers execute Material Design.\n- [Glide](https://github.com/bumptech/glide) - loading image.\n- [GlidePalette](https://github.com/florent37/GlidePalette) - compatible with glide, extracting a primary color from an image.\n- [BaseRecyclerViewAdapter](https://github.com/skydoves/BaseRecyclerViewAdapter) - fast way to binding RecyclerView adapter and ViewHolder for implementing clean sections.\n- [WhatIf](https://github.com/skydoves/whatif) - fluent Kotlin expressions for a single if-else statement, nullable and boolean.\n- [Flourish](https://github.com/skydoves/Flourish) - a polished and dynamic way to show up layouts.\n- [AndroidRibbon](https://github.com/skydoves/androidribbon) - beautiful and the simplest ribbon view with shimmering effect.\n- [ExpandableTextView](https://github.com/Manabu-GT/ExpandableTextView) - allows developers to easily create an TextView which can expand/collapse.\n\n## Mvvm module\n[Mvvm module](/mvvm) is the implementation of user interfaces on the application. \nBased on mvvm architecture (view-databinding-viewmodel-model) with the repository pattern.\n\n- JetPack\n  - LiveData - notify domain layer data to views.\n  - Lifecycle - dispose observing data when lifecycle state changes.\n  - ViewModel - UI related data holder, lifecycle aware.\n  - Room Persistence - construct database.\n- [Dagger2](https://github.com/google/dagger) - constructing dependency injection framework based on compile-time. \n- [Timber](https://github.com/JakeWharton/timber) - this is a logger with a small, extensible API.\n\n### Unit Test\n[Unit Tests](/mvvm/src/test/java/com/skydoves/mvvm) verify the interactions of viewmodels between repositories and dao \u0026 REST api requests.\n\u003cbr\u003e\u003cbr\u003e\n\u003cimg src=\"/preview/unitTest2.png\" width=\"100%\"/\u003e\n\n## Mvvm-coroutines module\n[Mvvm-coroutines module](/mvvm-coroutines) almost same as the Mvvm module. Implementation of user interfaces on the application. \nBased on mvvm architecture and coroutines.\n\n- [Coroutines](https://github.com/Kotlin/kotlinx.coroutines) - kotlin side(at the language level) supports for asynchronous programming.\n- [Koin](https://github.com/InsertKoinIO/koin) - A pragmatic lightweight dependency injection, actually service locator.\n- [Timber](https://github.com/JakeWharton/timber) - this is a logger with a small, extensible API.\n\n### Unit Test\n[Unit Tests](/mvvm-coroutines/src/test/java/com/skydoves/mvvm_coroutines) verify the interactions of viewmodels between repositories and DAO \u0026 REST api requests.\n\u003cbr\u003e\u003cbr\u003e\n\u003cimg src=\"/preview/unitTest3.png\" width=\"100%\"/\u003e\n\n## Unit Testing Frameworks\n- [Robolectric](https://github.com/robolectric/robolectric) - Robolectric is the industry-standard unit testing framework for Android.\n- [Mockito-Kotlin](https://github.com/nhaarman/mockito-kotlin) - a small library that provides helper functions to work with Mockito in Kotlin.\n\n## User Interface Design\nBased on `Material` design \u0026 animations.\n\n- Google Material Design.\n- Ripple Effect.\n- Shared Element Transition.\n\n## Find this repository useful? :heart:\nSupport it by joining __[stargazers](https://github.com/skydoves/GoldMovies/stargazers)__ for this repository. :star: \u003cbr\u003e\nAnd __[follow](https://github.com/skydoves)__ me for my next creations! 🤩\n\n## Sponsor :coffee:\nIf you feel like to sponsor me a coffee for my efforts, I would greatly appreciate it. \u003cbr\u003e\u003cbr\u003e\n\n\u003ca href=\"https://www.buymeacoffee.com/skydoves\" target=\"_blank\"\u003e\u003cimg src=\"https://skydoves.github.io/sponsor.png\" alt=\"Buy Me A Coffee\" style=\"height: 51px !important;width: 217px !important;\" \u003e\u003c/a\u003e\n\n# License\n```xml\nDesigned and developed by 2019 skydoves (Jaewoong Eum)\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n   http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fskydoves%2Fgoldmovies","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fskydoves%2Fgoldmovies","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fskydoves%2Fgoldmovies/lists"}