App shows list of Toptal's repositories on Github and shows selected repository details, such as number of opened issues, number of closed, number of the opened pull request and number of closed* pull requests.
* Merged PullRequests are treated as closed ones.
To build the app with actual Github API access there is a requirement to pass a Personal access token.
Access token can be provided one of following methods:
- Passing project property
./gradlew build -Pgithub.token=$TOKEN
- Setting an environment variable
github_token=$TOKEN
- Adding a
github.token=$TOKEN
tolocal.properties
file.
Application follows Clean Architecture approach. To provide additional support for developers to maintain correct dependencies between layers, app has been divided into mutliple Gradle modules. Each module has single responsibility:
- Domain layer
:domain
- Module contains code that describes all business states and represents business logic
- Data layer
:data:graphql
- Holds GrapQLl implementation of domain gateways. Uses Apollo GraphQL library to consume Github's GraphQL API v4.:data:mocked
- Main purpose of this module is to speed up development process by excluding all external services. Can be also used for automated UI tests.
- Presentation layer
presentation
- Accommodates UI related classes. Relies on Android Framework.
- Configuration
app
- Provides Dependency Injection configuration logic, enables project to follow dependency inversion rulebuildSrc
- Abstracts imperative build configuration logic. Having shared common code allows having minimal configuration of specific modules.
Following diagram presents dependencies between modules:
Project follows official Kotlin code style guidelines, which is greatly supported by automatic tools such as Detekt and ktlint.
To run all code style tasks for the whole project you may run ./gradlew projectCodestyle
task.