mirror of
https://github.com/AdrianKuta/KahootQuiz.git
synced 2025-09-16 18:14:22 +02:00
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:
@@ -0,0 +1,16 @@
|
||||
package dev.adriankuta.kahootquiz.model.data
|
||||
|
||||
import dev.adriankuta.kahootquiz.core.network.retrofit.QuizApi
|
||||
import dev.adriankuta.kahootquiz.domain.models.Quiz
|
||||
import dev.adriankuta.kahootquiz.domain.repositories.QuizRepository
|
||||
import dev.adriankuta.kahootquiz.model.data.mappers.toDomainModel
|
||||
import javax.inject.Inject
|
||||
|
||||
internal class QuizRepositoryImpl @Inject constructor(
|
||||
private val quizApi: QuizApi
|
||||
) : QuizRepository {
|
||||
|
||||
override suspend fun getQuiz(): Quiz {
|
||||
return quizApi.getQuiz().toDomainModel()
|
||||
}
|
||||
}
|
@@ -0,0 +1,20 @@
|
||||
package dev.adriankuta.kahootquiz.model.data.di
|
||||
|
||||
import dagger.Binds
|
||||
import dagger.Module
|
||||
import dagger.hilt.InstallIn
|
||||
import dagger.hilt.components.SingletonComponent
|
||||
import dev.adriankuta.kahootquiz.domain.repositories.QuizRepository
|
||||
import dev.adriankuta.kahootquiz.model.data.QuizRepositoryImpl
|
||||
import javax.inject.Singleton
|
||||
|
||||
@Module
|
||||
@InstallIn(SingletonComponent::class)
|
||||
internal abstract class RepositoryModule {
|
||||
|
||||
@Binds
|
||||
@Singleton
|
||||
abstract fun bindsQuizRepository(
|
||||
quizRepositoryImpl: QuizRepositoryImpl
|
||||
): QuizRepository
|
||||
}
|
@@ -0,0 +1,7 @@
|
||||
package dev.adriankuta.kahootquiz.model.data.mappers
|
||||
|
||||
import dev.adriankuta.kahootquiz.core.network.models.QuizResponseDto
|
||||
import dev.adriankuta.kahootquiz.domain.models.Quiz
|
||||
|
||||
internal fun QuizResponseDto.toDomainModel(): Quiz =
|
||||
Quiz(this.uuid ?: "")
|
Reference in New Issue
Block a user