This commit introduces the data layer, including the `QuizRepository` and its implementation, and integrates it with the domain layer's `GetQuizUseCase`. It also sets up Hilt for dependency injection in the app module and makes preliminary UI changes to display fetched quiz data.
Key changes include:
- **Data Layer (`model:data` module):**
- Added `QuizRepositoryImpl` which implements `QuizRepository` from the domain layer.
- Implemented `getQuiz()` in `QuizRepositoryImpl` to fetch quiz data from `QuizApi` and map it to the domain `Quiz` model using `QuizMapper`.
- Created `QuizMapper` to convert `QuizResponseDto` to the domain `Quiz` model.
- Added `RepositoryModule` for Hilt to provide `QuizRepository` bindings.
- **Domain Layer (`domain` module):**
- Created `Quiz` domain model.
- Defined `QuizRepository` interface.
- Implemented `GetQuizUseCase` to interact with `QuizRepository`.
- **App Module (`app` module):**
- Added `MyApplication` class annotated with `@HiltAndroidApp`.
- Updated `AndroidManifest.xml` to use `MyApplication` and add internet permission.
- In `MainActivity`:
- Injected `GetQuizUseCase`.
- Used `LaunchedEffect` to call the use case and update a mutable state `quizId`.
- Modified the `Greeting` composable to display the fetched `quizId`.
- Added dependency on the `domain` module in `app/build.gradle.kts`.
- **Network Layer (`core:network` module):**
- Moved DTOs from `core.network.model` package to `core.network.models`.
- Made `NetworkModule` internal.
- Removed unused `QuizService` interface and `QuizServiceImpl` class.
- **Testing (`core:network` test):**
- Updated import path for `QuizResponseDto` in `QuizResponseDtoParsingTest`.
This commit introduces the foundational structure of the Kahoot Quiz application and implements the core network layer.
Key changes include:
- Added new Gradle modules: `core:network`, `domain`, `model:data`, and `ui:quiz`.
- Configured Detekt for static code analysis in the new modules.
- Implemented Retrofit and Gson for network communication and JSON parsing.
- Defined DTOs for the Kahoot quiz API response, splitting them into logical files (QuizResponseDto, CommonDtos, CoverDtos, QuestionDtos, MetadataDtos, ContentTagsDto) for better organization.
- Created `QuizApi` interface with a GET request for fetching quiz data.
- Added `QuizService` interface and its initial implementation `QuizServiceImpl`.
- Set up Hilt for dependency injection in the network module, providing Retrofit and QuizApi instances.
- Included a `sample_quiz.json` file for testing and development.
- Added unit tests (`QuizResponseDtoParsingTest`) to verify the correct parsing of the sample JSON into DTOs.
- Updated `.gitignore` to exclude additional generated files and IDE specific folders.
- Modified `settings.gradle.kts` to include the new modules.
- Updated `app/build.gradle.kts` to include dependencies on the new `ui:quiz` and `model:data` modules and removed unused dependencies.