Fix schedule query params, fix hilt bindings
This commit is contained in:
@@ -1,19 +1,9 @@
|
|||||||
package ru.fincode.tsudesk.feature.schedule.data.datasource
|
package ru.fincode.tsudesk.feature.schedule.data.datasource
|
||||||
|
|
||||||
import ru.fincode.tsudesk.core.network.model.NetworkResult
|
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 ru.fincode.tsudesk.feature.schedule.data.remote.model.ScheduleDto
|
||||||
import javax.inject.Inject
|
|
||||||
|
|
||||||
class ScheduleRemoteDataSource @Inject constructor(
|
interface ScheduleRemoteDataSource {
|
||||||
private val api: ScheduleApi
|
suspend fun loadScheduleByGroup(number: String): NetworkResult<ScheduleDto>
|
||||||
) {
|
suspend fun loadScheduleByTeacher(name: String): NetworkResult<ScheduleDto>
|
||||||
suspend fun loadScheduleByGroup(number: String): NetworkResult<ScheduleDto> =
|
|
||||||
safeApiCall { api.getSchedule(GROUP_P, number) }
|
|
||||||
|
|
||||||
suspend fun loadScheduleByTeacher(name: String): NetworkResult<ScheduleDto> =
|
|
||||||
safeApiCall { api.getSchedule(PREP, name) }
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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<ScheduleEntity> =
|
|
||||||
remote.loadScheduleByGroup(number).map(mapper::invoke)
|
|
||||||
|
|
||||||
override suspend fun loadScheduleByTeacher(name: String): NetworkResult<ScheduleEntity> =
|
|
||||||
remote.loadScheduleByTeacher(name).map(mapper::invoke)
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -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.LessonDto
|
||||||
import ru.fincode.tsudesk.feature.schedule.data.remote.model.ScheduleDto
|
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 ru.fincode.tsudesk.feature.schedule.domain.model.ScheduleEntity
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
|
||||||
@@ -11,8 +11,8 @@ class ScheduleDtoToDomainMapper @Inject constructor() {
|
|||||||
operator fun invoke(dto: ScheduleDto): ScheduleEntity =
|
operator fun invoke(dto: ScheduleDto): ScheduleEntity =
|
||||||
ScheduleEntity(lessons = dto.map(::mapLesson))
|
ScheduleEntity(lessons = dto.map(::mapLesson))
|
||||||
|
|
||||||
private fun mapLesson(item: LessonDto): Lesson =
|
private fun mapLesson(item: LessonDto): LessonEntity =
|
||||||
Lesson(
|
LessonEntity(
|
||||||
date = item.date.trim(),
|
date = item.date.trim(),
|
||||||
time = item.time.trim(),
|
time = item.time.trim(),
|
||||||
subject = item.discipline.trim(),
|
subject = item.discipline.trim(),
|
||||||
|
|||||||
@@ -2,8 +2,10 @@ package ru.fincode.tsudesk.feature.schedule.data.remote
|
|||||||
|
|
||||||
import retrofit2.http.GET
|
import retrofit2.http.GET
|
||||||
import retrofit2.http.Query
|
import retrofit2.http.Query
|
||||||
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.model.LessonDto.*
|
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
|
import ru.fincode.tsudesk.feature.schedule.data.remote.model.ScheduleDto
|
||||||
|
|
||||||
interface ScheduleApi {
|
interface ScheduleApi {
|
||||||
@@ -20,9 +22,10 @@ interface ScheduleApi {
|
|||||||
* Важно: Retrofit сам URL-энкодит параметр search_value
|
* Важно: 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
|
* 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(
|
suspend fun getSchedule(
|
||||||
@Query("search_field") searchField: String,
|
@Query(SEARCH_FIELD) searchField: String,
|
||||||
@Query("search_value") searchValue: String
|
@Query(SEARCH_VALUE) searchValue: String
|
||||||
): ScheduleDto
|
): ScheduleDto
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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"
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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<ScheduleDto> =
|
||||||
|
safeApiCall {
|
||||||
|
api.getSchedule(
|
||||||
|
searchField = ScheduleApiContract.Query.FIELD_GROUP,
|
||||||
|
searchValue = number
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
override suspend fun loadScheduleByTeacher(name: String): NetworkResult<ScheduleDto> =
|
||||||
|
safeApiCall {
|
||||||
|
api.getSchedule(
|
||||||
|
searchField = ScheduleApiContract.Query.FIELD_TEACHER,
|
||||||
|
searchValue = name
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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
|
||||||
|
}
|
||||||
@@ -1,10 +1,10 @@
|
|||||||
package ru.fincode.tsudesk.feature.schedule.domain.model
|
package ru.fincode.tsudesk.feature.schedule.domain.model
|
||||||
|
|
||||||
data class ScheduleEntity(
|
data class ScheduleEntity(
|
||||||
val lessons: List<Lesson>
|
val lessons: List<LessonEntity>
|
||||||
)
|
)
|
||||||
|
|
||||||
data class Lesson(
|
data class LessonEntity(
|
||||||
val date: String, // "12.01.2026"
|
val date: String, // "12.01.2026"
|
||||||
val time: String, // "11:00 - 13:55"
|
val time: String, // "11:00 - 13:55"
|
||||||
val subject: String, // discipline
|
val subject: String, // discipline
|
||||||
|
|||||||
Reference in New Issue
Block a user