Skip to content

maxkohne/Fetch-Rewards-Take-Home-Challenge

Repository files navigation

Fetch Rewards Mobile Coding Challenge

Overview

This project implements the Fetch Rewards Mobile Coding Challenge, which involves fetching and displaying a list of items from a given API. The app retrieves data, filters out invalid entries, and presents a grouped and sorted list in a user-friendly UI. The requirements are outlined in https://fetch-hiring.s3.amazonaws.com/mobile.html.

This is a multi-module project using Gradle convention plugins that share logic between modules. More can be learned from:

NOTE: This project is overengineered on purpose (multi-modules, Room, etc) just to showcase my expertise in these areas. In a project this small, these technologies are very much overkill.

Features

Required

  • Fetch data from the provided API.
  • Filter out items with blank or null names.
  • Group items by listId.
  • Sort items first by listId and then by name.
  • Display the processed list in a clean UI.

Extra

  • Stores data in Room database
  • Search by name in list
  • Pull to refresh
  • Robust error handling with Snackbars based upon different error scenarios (http errors, storage error, etc.)

Tech Stack

  • Kotlin for development.
  • Jetpack Compose for UI.
  • Hilt for Dependency Injection.
  • Retrofit for API calls.
  • Room for local caching.
  • Navigation for screen routing.
  • Multi-Module for separation of concerns
  • Coroutines & Flow for asynchronous operations.
  • JUnit & Mockito for unit testing.

Screenshots

List

Details

Some Errors

Testing

Many of the classes are united tested including ViewModels, Repositories, and others.

To run unit tests, execute:

./gradlew testDebugUnitTest

Future Improvements

  • Implement pagination for large datasets.
  • Improve UI/UX with animations and Material Design elements.

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages