Start Schedule development
This commit is contained in:
@@ -1,4 +1,21 @@
|
||||
package ru.fincode.tsudesk.feature.schedule.data
|
||||
|
||||
class ScheduleRepositoryImpl {
|
||||
}
|
||||
import ru.fincode.tsudesk.feature.schedule.data.datasource.ScheduleRemoteDataSource
|
||||
import ru.fincode.tsudesk.feature.schedule.data.mapper.ScheduleDtoToDomainMapper
|
||||
import ru.fincode.tsudesk.feature.schedule.domain.model.Schedule
|
||||
import ru.fincode.tsudesk.feature.schedule.domain.repository.ScheduleRepository
|
||||
import javax.inject.Inject
|
||||
|
||||
class ScheduleRepositoryImpl @Inject constructor(
|
||||
private val remote: ScheduleRemoteDataSource, private val mapper: ScheduleDtoToDomainMapper
|
||||
) : ScheduleRepository {
|
||||
|
||||
override suspend fun loadScheduleByGroup(groupNumber: String): Schedule {
|
||||
return mapper.map(remote.loadScheduleByGroup(groupNumber))
|
||||
}
|
||||
|
||||
override suspend fun loadScheduleByTeacher(teacherName: String): Schedule {
|
||||
return mapper.map(remote.loadScheduleByTeacher(teacherName))
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -1,4 +1,10 @@
|
||||
package ru.fincode.tsudesk.feature.schedule.data.datasource
|
||||
|
||||
class ScheduleLocalDataSource {
|
||||
}
|
||||
import ru.fincode.tsudesk.feature.schedule.data.local.ScheduleEntity
|
||||
import ru.fincode.tsudesk.feature.schedule.data.remote.ScheduleDto
|
||||
|
||||
interface ScheduleLocalDataSource {
|
||||
suspend fun getScheduleByGroup(groupNumber: String): ScheduleEntity?
|
||||
suspend fun getScheduleByTeacherName(teacherName: String): ScheduleEntity?
|
||||
suspend fun saveSchedule(entity: ScheduleEntity)
|
||||
}
|
||||
|
||||
@@ -1,4 +1,20 @@
|
||||
package ru.fincode.tsudesk.feature.schedule.data.datasource
|
||||
|
||||
class ScheduleRemoteDataSource {
|
||||
}
|
||||
import ru.fincode.tsudesk.feature.schedule.data.remote.ScheduleApi
|
||||
import ru.fincode.tsudesk.feature.schedule.data.remote.ScheduleDto
|
||||
import ru.fincode.tsudesk.feature.schedule.data.remote.ScheduleXmlParser
|
||||
import java.io.IOException
|
||||
|
||||
class ScheduleRemoteDataSource(
|
||||
private val api: ScheduleApi, private val xmlParser: ScheduleXmlParser
|
||||
) {
|
||||
suspend fun loadScheduleByGroup(groupNumber: String): ScheduleDto {
|
||||
val response = api.getScheduleByGroup(groupNumber)
|
||||
return xmlParser.parse(response.body() ?: throw IOException("Response body is null"))
|
||||
}
|
||||
|
||||
suspend fun loadScheduleByTeacher(name: String): ScheduleDto {
|
||||
val response = api.getScheduleByTeacherName(name)
|
||||
return xmlParser.parse(response.body() ?: throw IOException("Response body is null"))
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,20 @@
|
||||
package ru.fincode.tsudesk.feature.schedule.data.datasource
|
||||
|
||||
import ru.fincode.tsudesk.feature.schedule.data.mapper.ScheduleDtoToDomainMapper
|
||||
import ru.fincode.tsudesk.feature.schedule.domain.model.Schedule
|
||||
import ru.fincode.tsudesk.feature.schedule.domain.repository.ScheduleRepository
|
||||
import javax.inject.Inject
|
||||
|
||||
class ScheduleRepositoryImpl @Inject constructor(
|
||||
private val remote: ScheduleRemoteDataSource,
|
||||
private val mapper: ScheduleDtoToDomainMapper
|
||||
) : ScheduleRepository {
|
||||
|
||||
override suspend fun loadScheduleByGroup(groupNumber: String): Schedule {
|
||||
return mapper.map(remote.loadScheduleByGroup(groupNumber));
|
||||
}
|
||||
|
||||
override suspend fun loadScheduleByTeacher(teacherName: String): Schedule {
|
||||
return mapper.map(remote.loadScheduleByTeacher(teacherName));
|
||||
}
|
||||
}
|
||||
@@ -1,4 +1,23 @@
|
||||
package ru.fincode.tsudesk.feature.schedule.data.mapper
|
||||
|
||||
import ru.fincode.tsudesk.feature.schedule.data.remote.ScheduleDto
|
||||
import ru.fincode.tsudesk.feature.schedule.domain.model.Lesson
|
||||
import ru.fincode.tsudesk.feature.schedule.domain.model.Schedule
|
||||
|
||||
class ScheduleDtoToDomainMapper {
|
||||
}
|
||||
|
||||
fun map(dto: ScheduleDto): Schedule =
|
||||
Schedule(
|
||||
lessons = dto.lessons.map { l ->
|
||||
Lesson(
|
||||
dayOfWeek = l.dayOfWeek,
|
||||
dayName = l.dayName,
|
||||
weekType = l.weekType,
|
||||
time = l.time,
|
||||
room = l.room,
|
||||
subjectName = l.subjectName,
|
||||
teacherName = l.teacherName
|
||||
)
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
@@ -1,4 +0,0 @@
|
||||
package ru.fincode.tsudesk.feature.schedule.data.mapper
|
||||
|
||||
class ScheduleEntityToDomainMapper {
|
||||
}
|
||||
@@ -1,4 +1,18 @@
|
||||
package ru.fincode.tsudesk.feature.schedule.data.remote
|
||||
|
||||
class ScheduleApi {
|
||||
}
|
||||
import okhttp3.ResponseBody
|
||||
import retrofit2.Response
|
||||
import retrofit2.http.GET
|
||||
import retrofit2.http.Query
|
||||
|
||||
interface ScheduleApi {
|
||||
@GET("schedule")
|
||||
suspend fun getScheduleByGroup(
|
||||
@Query("group") groupNumber: String
|
||||
): Response<ResponseBody>
|
||||
|
||||
@GET("schedule")
|
||||
suspend fun getScheduleByTeacherName(
|
||||
@Query("fio") teacherName: String
|
||||
): Response<ResponseBody>
|
||||
}
|
||||
|
||||
@@ -1,4 +1,15 @@
|
||||
package ru.fincode.tsudesk.feature.schedule.data.remote
|
||||
|
||||
class ScheduleDto {
|
||||
}
|
||||
data class ScheduleDto(
|
||||
val lessons: List<LessonDto>
|
||||
)
|
||||
|
||||
data class LessonDto(
|
||||
val dayOfWeek: String,
|
||||
val dayName: String,
|
||||
val time: String,
|
||||
val room: String,
|
||||
val subjectName: String,
|
||||
val teacherName: String,
|
||||
val weekType: Int
|
||||
)
|
||||
|
||||
@@ -1,4 +1,15 @@
|
||||
package ru.fincode.tsudesk.feature.schedule.data.remote
|
||||
|
||||
class ScheduleXmlParser {
|
||||
}
|
||||
import okhttp3.ResponseBody
|
||||
|
||||
interface ScheduleXmlParser {
|
||||
fun parse(body: ResponseBody): ScheduleDto
|
||||
}
|
||||
|
||||
|
||||
class ScheduleXmlParserImpl : ScheduleXmlParser {
|
||||
override fun parse(body: ResponseBody): ScheduleDto {
|
||||
val xml = body.string()
|
||||
return ScheduleDto(lessons = emptyList())
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,4 +0,0 @@
|
||||
package ru.fincode.tsudesk.feature.schedule.domain.model
|
||||
|
||||
class Lesson {
|
||||
}
|
||||
@@ -1,4 +1,17 @@
|
||||
package ru.fincode.tsudesk.feature.schedule.domain.model
|
||||
|
||||
class Schedule {
|
||||
}
|
||||
data class Schedule(
|
||||
val lessons: List<Lesson>
|
||||
)
|
||||
|
||||
data class Lesson(
|
||||
val dayOfWeek: String,
|
||||
val dayName: String,
|
||||
val time: String,
|
||||
val room: String,
|
||||
val subjectName: String,
|
||||
val teacherName: String,
|
||||
val weekType: Int
|
||||
)
|
||||
|
||||
|
||||
|
||||
@@ -1,4 +0,0 @@
|
||||
package ru.fincode.tsudesk.feature.schedule.domain.model
|
||||
|
||||
class ScheduleDay {
|
||||
}
|
||||
@@ -3,5 +3,6 @@ package ru.fincode.tsudesk.feature.schedule.domain.repository
|
||||
import ru.fincode.tsudesk.feature.schedule.domain.model.Schedule
|
||||
|
||||
interface ScheduleRepository {
|
||||
suspend fun getSchedule(groupId: String): Schedule
|
||||
}
|
||||
suspend fun loadScheduleByGroup(groupNumber: String): Schedule
|
||||
suspend fun loadScheduleByTeacher(teacherName: String): Schedule
|
||||
}
|
||||
|
||||
@@ -0,0 +1,24 @@
|
||||
package ru.fincode.tsudesk.feature.schedule.domain.repository
|
||||
|
||||
import ru.fincode.tsudesk.feature.schedule.data.datasource.ScheduleLocalDataSource
|
||||
import ru.fincode.tsudesk.feature.schedule.data.datasource.ScheduleRemoteDataSource
|
||||
import ru.fincode.tsudesk.feature.schedule.data.mapper.ScheduleDtoToDomainMapper
|
||||
import ru.fincode.tsudesk.feature.schedule.domain.model.Schedule
|
||||
import javax.inject.Inject
|
||||
|
||||
class ScheduleRepositoryImpl @Inject constructor(
|
||||
private val remoteDataSource: ScheduleRemoteDataSource,
|
||||
private val localDataSource: ScheduleLocalDataSource,
|
||||
private val mapper: ScheduleDtoToDomainMapper
|
||||
) : ScheduleRepository {
|
||||
|
||||
override suspend fun loadScheduleByGroup(groupNumber: String): Schedule {
|
||||
val dto = remoteDataSource.loadScheduleByGroup(groupNumber)
|
||||
return mapper.map(dto)
|
||||
}
|
||||
|
||||
override suspend fun loadScheduleByTeacher(teacherName: String): Schedule {
|
||||
val dto = remoteDataSource.loadScheduleByTeacher(teacherName)
|
||||
return mapper.map(dto)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user