From 4b79a2de8f716770a9b1490e3291f31d2edfc47e Mon Sep 17 00:00:00 2001 From: Shcherbatykh Oleg Date: Thu, 12 Feb 2026 17:31:39 +0300 Subject: [PATCH] Fix schedule query params, fix hilt bindings --- .../datasource/ScheduleRemoteDataSource.kt | 16 ++--------- .../ScheduleRemoteDataSourceImpl.kt | 21 -------------- .../data/mapper/ScheduleDtoToDomainMapper.kt | 6 ++-- .../schedule/data/remote/ScheduleApi.kt | 13 +++++---- .../data/remote/ScheduleApiContract.kt | 16 +++++++++++ .../remote/ScheduleRemoteDataSourceImpl.kt | 28 +++++++++++++++++++ .../di/ScheduleRemoteDataSourceModule.kt | 20 +++++++++++++ .../schedule/domain/model/ScheduleEntity.kt | 4 +-- 8 files changed, 80 insertions(+), 44 deletions(-) delete mode 100644 feature/schedule/src/main/java/ru/fincode/tsudesk/feature/schedule/data/datasource/ScheduleRemoteDataSourceImpl.kt create mode 100644 feature/schedule/src/main/java/ru/fincode/tsudesk/feature/schedule/data/remote/ScheduleApiContract.kt create mode 100644 feature/schedule/src/main/java/ru/fincode/tsudesk/feature/schedule/data/remote/ScheduleRemoteDataSourceImpl.kt create mode 100644 feature/schedule/src/main/java/ru/fincode/tsudesk/feature/schedule/di/ScheduleRemoteDataSourceModule.kt diff --git a/feature/schedule/src/main/java/ru/fincode/tsudesk/feature/schedule/data/datasource/ScheduleRemoteDataSource.kt b/feature/schedule/src/main/java/ru/fincode/tsudesk/feature/schedule/data/datasource/ScheduleRemoteDataSource.kt index a90ecda..4c7b75b 100644 --- a/feature/schedule/src/main/java/ru/fincode/tsudesk/feature/schedule/data/datasource/ScheduleRemoteDataSource.kt +++ b/feature/schedule/src/main/java/ru/fincode/tsudesk/feature/schedule/data/datasource/ScheduleRemoteDataSource.kt @@ -1,19 +1,9 @@ package ru.fincode.tsudesk.feature.schedule.data.datasource import ru.fincode.tsudesk.core.network.model.NetworkResult -import ru.fincode.tsudesk.core.network.safeApiCall -import ru.fincode.tsudesk.feature.schedule.data.remote.ScheduleApi -import ru.fincode.tsudesk.feature.schedule.data.remote.model.LessonDto.ScheduleSearchField.GROUP_P -import ru.fincode.tsudesk.feature.schedule.data.remote.model.LessonDto.ScheduleSearchField.PREP import ru.fincode.tsudesk.feature.schedule.data.remote.model.ScheduleDto -import javax.inject.Inject -class ScheduleRemoteDataSource @Inject constructor( - private val api: ScheduleApi -) { - suspend fun loadScheduleByGroup(number: String): NetworkResult = - safeApiCall { api.getSchedule(GROUP_P, number) } - - suspend fun loadScheduleByTeacher(name: String): NetworkResult = - safeApiCall { api.getSchedule(PREP, name) } +interface ScheduleRemoteDataSource { + suspend fun loadScheduleByGroup(number: String): NetworkResult + suspend fun loadScheduleByTeacher(name: String): NetworkResult } diff --git a/feature/schedule/src/main/java/ru/fincode/tsudesk/feature/schedule/data/datasource/ScheduleRemoteDataSourceImpl.kt b/feature/schedule/src/main/java/ru/fincode/tsudesk/feature/schedule/data/datasource/ScheduleRemoteDataSourceImpl.kt deleted file mode 100644 index 2d56f2f..0000000 --- a/feature/schedule/src/main/java/ru/fincode/tsudesk/feature/schedule/data/datasource/ScheduleRemoteDataSourceImpl.kt +++ /dev/null @@ -1,21 +0,0 @@ -package ru.fincode.tsudesk.feature.schedule.data.datasource - -import ru.fincode.tsudesk.core.network.model.NetworkResult -import ru.fincode.tsudesk.core.network.model.map -import ru.fincode.tsudesk.feature.schedule.data.mapper.ScheduleDtoToDomainMapper -import ru.fincode.tsudesk.feature.schedule.domain.model.ScheduleEntity -import ru.fincode.tsudesk.feature.schedule.domain.repository.ScheduleRepository -import javax.inject.Inject - -class ScheduleRemoteDataSourceImpl @Inject constructor( - private val remote: ScheduleRemoteDataSource, - private val mapper: ScheduleDtoToDomainMapper -) : ScheduleRepository { - - override suspend fun loadScheduleByGroup(number: String): NetworkResult = - remote.loadScheduleByGroup(number).map(mapper::invoke) - - override suspend fun loadScheduleByTeacher(name: String): NetworkResult = - remote.loadScheduleByTeacher(name).map(mapper::invoke) - -} diff --git a/feature/schedule/src/main/java/ru/fincode/tsudesk/feature/schedule/data/mapper/ScheduleDtoToDomainMapper.kt b/feature/schedule/src/main/java/ru/fincode/tsudesk/feature/schedule/data/mapper/ScheduleDtoToDomainMapper.kt index b1dc026..00e35e1 100644 --- a/feature/schedule/src/main/java/ru/fincode/tsudesk/feature/schedule/data/mapper/ScheduleDtoToDomainMapper.kt +++ b/feature/schedule/src/main/java/ru/fincode/tsudesk/feature/schedule/data/mapper/ScheduleDtoToDomainMapper.kt @@ -2,7 +2,7 @@ package ru.fincode.tsudesk.feature.schedule.data.mapper import ru.fincode.tsudesk.feature.schedule.data.remote.model.LessonDto import ru.fincode.tsudesk.feature.schedule.data.remote.model.ScheduleDto -import ru.fincode.tsudesk.feature.schedule.domain.model.Lesson +import ru.fincode.tsudesk.feature.schedule.domain.model.LessonEntity import ru.fincode.tsudesk.feature.schedule.domain.model.ScheduleEntity import javax.inject.Inject @@ -11,8 +11,8 @@ class ScheduleDtoToDomainMapper @Inject constructor() { operator fun invoke(dto: ScheduleDto): ScheduleEntity = ScheduleEntity(lessons = dto.map(::mapLesson)) - private fun mapLesson(item: LessonDto): Lesson = - Lesson( + private fun mapLesson(item: LessonDto): LessonEntity = + LessonEntity( date = item.date.trim(), time = item.time.trim(), subject = item.discipline.trim(), diff --git a/feature/schedule/src/main/java/ru/fincode/tsudesk/feature/schedule/data/remote/ScheduleApi.kt b/feature/schedule/src/main/java/ru/fincode/tsudesk/feature/schedule/data/remote/ScheduleApi.kt index 8a5b8e1..65f0f75 100644 --- a/feature/schedule/src/main/java/ru/fincode/tsudesk/feature/schedule/data/remote/ScheduleApi.kt +++ b/feature/schedule/src/main/java/ru/fincode/tsudesk/feature/schedule/data/remote/ScheduleApi.kt @@ -2,8 +2,10 @@ package ru.fincode.tsudesk.feature.schedule.data.remote import retrofit2.http.GET import retrofit2.http.Query -import ru.fincode.tsudesk.feature.schedule.data.remote.model.LessonDto -import ru.fincode.tsudesk.feature.schedule.data.remote.model.LessonDto.* +import ru.fincode.tsudesk.feature.schedule.data.remote.ScheduleApiContract.Path.GET_SCHEDULE_METHOD +import ru.fincode.tsudesk.feature.schedule.data.remote.ScheduleApiContract.Query.SEARCH_FIELD +import ru.fincode.tsudesk.feature.schedule.data.remote.ScheduleApiContract.Query.SEARCH_VALUE + import ru.fincode.tsudesk.feature.schedule.data.remote.model.ScheduleDto interface ScheduleApi { @@ -20,9 +22,10 @@ interface ScheduleApi { * Важно: Retrofit сам URL-энкодит параметр search_value * https://tulsu.ru/schedule/queries/GetDates.php?search_value=%D0%9D%D0%B0%D0%B1%D1%80%D0%BE%D0%B4%D0%BE%D0%B2%D0%B0%20%D0%98%D1%80%D0%B8%D0%BD%D0%B0%20%D0%9D%D0%B8%D0%BA%D0%BE%D0%BB%D0%B0%D0%B5%D0%B2%D0%BD%D0%B0 */ - @GET("GetSchedule.php") + @GET(GET_SCHEDULE_METHOD) suspend fun getSchedule( - @Query("search_field") searchField: String, - @Query("search_value") searchValue: String + @Query(SEARCH_FIELD) searchField: String, + @Query(SEARCH_VALUE) searchValue: String ): ScheduleDto + } diff --git a/feature/schedule/src/main/java/ru/fincode/tsudesk/feature/schedule/data/remote/ScheduleApiContract.kt b/feature/schedule/src/main/java/ru/fincode/tsudesk/feature/schedule/data/remote/ScheduleApiContract.kt new file mode 100644 index 0000000..295885e --- /dev/null +++ b/feature/schedule/src/main/java/ru/fincode/tsudesk/feature/schedule/data/remote/ScheduleApiContract.kt @@ -0,0 +1,16 @@ +package ru.fincode.tsudesk.feature.schedule.data.remote + +object ScheduleApiContract { + + object Path { + const val GET_SCHEDULE_METHOD = "GetSchedule.php" + } + + object Query { + const val SEARCH_FIELD = "search_field" + const val SEARCH_VALUE = "search_value" + + const val FIELD_GROUP = "GROUP_P" + const val FIELD_TEACHER = "PREP" + } +} diff --git a/feature/schedule/src/main/java/ru/fincode/tsudesk/feature/schedule/data/remote/ScheduleRemoteDataSourceImpl.kt b/feature/schedule/src/main/java/ru/fincode/tsudesk/feature/schedule/data/remote/ScheduleRemoteDataSourceImpl.kt new file mode 100644 index 0000000..e001eec --- /dev/null +++ b/feature/schedule/src/main/java/ru/fincode/tsudesk/feature/schedule/data/remote/ScheduleRemoteDataSourceImpl.kt @@ -0,0 +1,28 @@ +package ru.fincode.tsudesk.feature.schedule.data.remote + +import ru.fincode.tsudesk.core.network.model.NetworkResult +import ru.fincode.tsudesk.core.network.safeApiCall +import ru.fincode.tsudesk.feature.schedule.data.datasource.ScheduleRemoteDataSource +import ru.fincode.tsudesk.feature.schedule.data.remote.model.ScheduleDto +import javax.inject.Inject + +class ScheduleRemoteDataSourceImpl @Inject constructor( + private val api: ScheduleApi +) : ScheduleRemoteDataSource { + + override suspend fun loadScheduleByGroup(number: String): NetworkResult = + safeApiCall { + api.getSchedule( + searchField = ScheduleApiContract.Query.FIELD_GROUP, + searchValue = number + ) + } + + override suspend fun loadScheduleByTeacher(name: String): NetworkResult = + safeApiCall { + api.getSchedule( + searchField = ScheduleApiContract.Query.FIELD_TEACHER, + searchValue = name + ) + } +} \ No newline at end of file diff --git a/feature/schedule/src/main/java/ru/fincode/tsudesk/feature/schedule/di/ScheduleRemoteDataSourceModule.kt b/feature/schedule/src/main/java/ru/fincode/tsudesk/feature/schedule/di/ScheduleRemoteDataSourceModule.kt new file mode 100644 index 0000000..65204ed --- /dev/null +++ b/feature/schedule/src/main/java/ru/fincode/tsudesk/feature/schedule/di/ScheduleRemoteDataSourceModule.kt @@ -0,0 +1,20 @@ +package ru.fincode.tsudesk.feature.schedule.di + +import dagger.Binds +import dagger.Module +import dagger.hilt.InstallIn +import dagger.hilt.components.SingletonComponent +import ru.fincode.tsudesk.feature.schedule.data.datasource.ScheduleRemoteDataSource +import ru.fincode.tsudesk.feature.schedule.data.remote.ScheduleRemoteDataSourceImpl +import javax.inject.Singleton + +@Module +@InstallIn(SingletonComponent::class) +abstract class ScheduleRemoteDataSourceModule { + + @Binds + @Singleton + abstract fun bindScheduleRemoteDataSource( + impl: ScheduleRemoteDataSourceImpl + ): ScheduleRemoteDataSource +} diff --git a/feature/schedule/src/main/java/ru/fincode/tsudesk/feature/schedule/domain/model/ScheduleEntity.kt b/feature/schedule/src/main/java/ru/fincode/tsudesk/feature/schedule/domain/model/ScheduleEntity.kt index 5b85c90..8052e6d 100644 --- a/feature/schedule/src/main/java/ru/fincode/tsudesk/feature/schedule/domain/model/ScheduleEntity.kt +++ b/feature/schedule/src/main/java/ru/fincode/tsudesk/feature/schedule/domain/model/ScheduleEntity.kt @@ -1,10 +1,10 @@ package ru.fincode.tsudesk.feature.schedule.domain.model data class ScheduleEntity( - val lessons: List + val lessons: List ) -data class Lesson( +data class LessonEntity( val date: String, // "12.01.2026" val time: String, // "11:00 - 13:55" val subject: String, // discipline