feat: Implement data layer and basic quiz fetching logic

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 is contained in:
GitHub Actions Bot
2025-09-02 22:29:15 +02:00
parent f12ac0826e
commit 293b7f75b9
22 changed files with 112 additions and 22 deletions

View File

@@ -0,0 +1,5 @@
package dev.adriankuta.kahootquiz.domain.models
data class Quiz(
val id: String
)

View File

@@ -0,0 +1,7 @@
package dev.adriankuta.kahootquiz.domain.repositories
import dev.adriankuta.kahootquiz.domain.models.Quiz
interface QuizRepository {
suspend fun getQuiz(): Quiz
}

View File

@@ -0,0 +1,14 @@
package dev.adriankuta.kahootquiz.domain.usecases
import dev.adriankuta.kahootquiz.domain.models.Quiz
import dev.adriankuta.kahootquiz.domain.repositories.QuizRepository
import javax.inject.Inject
class GetQuizUseCase @Inject constructor(
private val quizRepository: QuizRepository
) {
suspend operator fun invoke(): Quiz {
return quizRepository.getQuiz()
}
}