diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 4fd1171..5ebf391 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -5,6 +5,7 @@ = remote.loadScheduleByGroup(groupNumber).map(mapper::invoke) + override suspend fun loadScheduleByTeacher( + name: String + ): Result = remote.loadScheduleByTeacher(name).map(mapper::invoke) } diff --git a/feature/schedule/src/main/java/ru/fincode/tsudesk/feature/schedule/data/datasource/ScheduleLocalDataSource.kt b/feature/schedule/src/main/java/ru/fincode/tsudesk/feature/schedule/data/datasource/ScheduleLocalDataSource.kt index 435171d..b6d7ab4 100644 --- a/feature/schedule/src/main/java/ru/fincode/tsudesk/feature/schedule/data/datasource/ScheduleLocalDataSource.kt +++ b/feature/schedule/src/main/java/ru/fincode/tsudesk/feature/schedule/data/datasource/ScheduleLocalDataSource.kt @@ -1,10 +1,10 @@ package ru.fincode.tsudesk.feature.schedule.data.datasource -import ru.fincode.tsudesk.feature.schedule.data.local.ScheduleEntity -import ru.fincode.tsudesk.feature.schedule.data.remote.ScheduleDto +import ru.fincode.tsudesk.feature.schedule.domain.model.ScheduleEntity + interface ScheduleLocalDataSource { suspend fun getScheduleByGroup(groupNumber: String): ScheduleEntity? - suspend fun getScheduleByTeacherName(teacherName: String): ScheduleEntity? + suspend fun getScheduleByTeacher(teacherName: String): ScheduleEntity? suspend fun saveSchedule(entity: ScheduleEntity) } 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 a25b861..728ac79 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,20 +1,17 @@ package ru.fincode.tsudesk.feature.schedule.data.datasource 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 +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( - private val api: ScheduleApi, private val xmlParser: ScheduleXmlParser +class ScheduleRemoteDataSource @Inject constructor( + private val api: ScheduleApi ) { - suspend fun loadScheduleByGroup(groupNumber: String): ScheduleDto { - val response = api.getScheduleByGroup(groupNumber) - return xmlParser.parse(response.body() ?: throw IOException("Response body is null")) - } + suspend fun loadScheduleByGroup(groupNumber: String): Result = + runCatching { api.getSchedule(GROUP_P, groupNumber) } - suspend fun loadScheduleByTeacher(name: String): ScheduleDto { - val response = api.getScheduleByTeacherName(name) - return xmlParser.parse(response.body() ?: throw IOException("Response body is null")) - } + suspend fun loadScheduleByTeacher(name: String): Result = + runCatching { api.getSchedule(PREP, name) } } 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 index 300d3be..e7b8e0e 100644 --- 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 @@ -1,20 +1,22 @@ 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.model.ScheduleEntity import ru.fincode.tsudesk.feature.schedule.domain.repository.ScheduleRepository import javax.inject.Inject -class ScheduleRepositoryImpl @Inject constructor( +class ScheduleRemoteDataSourceImpl @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 loadScheduleByGroup(groupNumber: String): Result = + remote + .loadScheduleByGroup(groupNumber) // Result + .map(mapper::invoke) // Result - override suspend fun loadScheduleByTeacher(teacherName: String): Schedule { - return mapper.map(remote.loadScheduleByTeacher(teacherName)); - } + override suspend fun loadScheduleByTeacher(name: String): Result = + remote + .loadScheduleByTeacher(name) // Result + .map(mapper::invoke) // Result } diff --git a/feature/schedule/src/main/java/ru/fincode/tsudesk/feature/schedule/data/local/ScheduleEntity.java b/feature/schedule/src/main/java/ru/fincode/tsudesk/feature/schedule/data/local/ScheduleEntity.java deleted file mode 100644 index f11cccb..0000000 --- a/feature/schedule/src/main/java/ru/fincode/tsudesk/feature/schedule/data/local/ScheduleEntity.java +++ /dev/null @@ -1,4 +0,0 @@ -package ru.fincode.tsudesk.feature.schedule.data.local; - -public class ScheduleEntity { -} 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 94410dc..b1dc026 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 @@ -1,23 +1,25 @@ package ru.fincode.tsudesk.feature.schedule.data.mapper -import ru.fincode.tsudesk.feature.schedule.data.remote.ScheduleDto +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.Schedule +import ru.fincode.tsudesk.feature.schedule.domain.model.ScheduleEntity +import javax.inject.Inject -class ScheduleDtoToDomainMapper { +class ScheduleDtoToDomainMapper @Inject constructor() { - 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 - ) - } + operator fun invoke(dto: ScheduleDto): ScheduleEntity = + ScheduleEntity(lessons = dto.map(::mapLesson)) + + private fun mapLesson(item: LessonDto): Lesson = + Lesson( + date = item.date.trim(), + time = item.time.trim(), + subject = item.discipline.trim(), + typeName = item.typeName.trim(), + room = item.room.trim(), + teacher = item.teacher.trim(), + groupId = item.groups.firstOrNull()?.groupCode.orEmpty(), + type = item.type.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 f920c30..8a5b8e1 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 @@ -1,18 +1,28 @@ package ru.fincode.tsudesk.feature.schedule.data.remote -import okhttp3.ResponseBody -import retrofit2.Response 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.model.ScheduleDto interface ScheduleApi { - @GET("schedule") - suspend fun getScheduleByGroup( - @Query("group") groupNumber: String - ): Response - @GET("schedule") - suspend fun getScheduleByTeacherName( - @Query("fio") teacherName: String - ): Response + /** + * Расписание по номеру группы. + * Пример: search_field=GROUP_P&search_value=220631 + * https://tulsu.ru/schedule/queries/GetSchedule.php?search_field=GROUP_P&search_value=220631 + * + * + * Расписание по ФИО преподавателя (строкой). + * Пример: search_field=PREP&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 + */ + @GET("GetSchedule.php") + suspend fun getSchedule( + @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/ScheduleDto.kt b/feature/schedule/src/main/java/ru/fincode/tsudesk/feature/schedule/data/remote/ScheduleDto.kt index 051f919..6cae659 100644 --- a/feature/schedule/src/main/java/ru/fincode/tsudesk/feature/schedule/data/remote/ScheduleDto.kt +++ b/feature/schedule/src/main/java/ru/fincode/tsudesk/feature/schedule/data/remote/ScheduleDto.kt @@ -1,15 +1,38 @@ -package ru.fincode.tsudesk.feature.schedule.data.remote +package ru.fincode.tsudesk.feature.schedule.data.remote.model -data class ScheduleDto( - val lessons: List -) +import com.squareup.moshi.Json +import com.squareup.moshi.JsonClass +typealias ScheduleDto = List + +@JsonClass(generateAdapter = false) // reflection-адаптер через moshi-kotlin data class LessonDto( - val dayOfWeek: String, - val dayName: String, - val time: String, - val room: String, - val subjectName: String, - val teacherName: String, - val weekType: Int -) + @Json(name = "DATE_Z") + val date: String, // "12.01.2026" + @Json(name = "TIME_Z") + val time: String, // "11:00 - 13:55" + @Json(name = "DISCIP") + val discipline: String, // предмет + @Json(name = "KOW") + val typeName: String, // "Лекции", "Лабораторные занятия", "Э", "зч", "КР", "ДЗ" и т.п. + @Json(name = "AUD") + val room: String, // можно назвать audience, но ключ в JSON "AUD" + @Json(name = "PREP") + val teacher: String, + @Json(name = "GROUPS") + val groups: List, + @Json(name = "CLASS") + val type: String // "lecture" / "lab" / "practice" / "default" +) { + + data class GroupDto( + @Json(name = "GROUP_P") + val groupCode: String + ) + object ScheduleSearchField { + const val GROUP_P = "GROUP_P" + const val PREP = "PREP" + } + +} + diff --git a/feature/schedule/src/main/java/ru/fincode/tsudesk/feature/schedule/data/remote/ScheduleJsonParser.kt b/feature/schedule/src/main/java/ru/fincode/tsudesk/feature/schedule/data/remote/ScheduleJsonParser.kt new file mode 100644 index 0000000..86ea07b --- /dev/null +++ b/feature/schedule/src/main/java/ru/fincode/tsudesk/feature/schedule/data/remote/ScheduleJsonParser.kt @@ -0,0 +1,23 @@ +package ru.fincode.tsudesk.feature.schedule.data.remote + +import com.squareup.moshi.Moshi +import com.squareup.moshi.Types +import com.squareup.moshi.kotlin.reflect.KotlinJsonAdapterFactory +import ru.fincode.tsudesk.feature.schedule.data.remote.model.LessonDto + +class ScheduleJsonParser { + + private val moshi = Moshi.Builder() + .add(KotlinJsonAdapterFactory()) + .build() + + private val type = Types.newParameterizedType( + List::class.java, + LessonDto::class.java + ) + + private val adapter = moshi.adapter>(type) + fun parse(json: String): List = + adapter.fromJson(json) + ?: throw IllegalStateException("Schedule JSON is null/invalid") +} diff --git a/feature/schedule/src/main/java/ru/fincode/tsudesk/feature/schedule/data/remote/ScheduleXmlParser.kt b/feature/schedule/src/main/java/ru/fincode/tsudesk/feature/schedule/data/remote/ScheduleXmlParser.kt deleted file mode 100644 index ba1bc1f..0000000 --- a/feature/schedule/src/main/java/ru/fincode/tsudesk/feature/schedule/data/remote/ScheduleXmlParser.kt +++ /dev/null @@ -1,15 +0,0 @@ -package ru.fincode.tsudesk.feature.schedule.data.remote - -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()) - } -} diff --git a/feature/schedule/src/main/java/ru/fincode/tsudesk/feature/schedule/di/ScheduleNetworkModule.kt b/feature/schedule/src/main/java/ru/fincode/tsudesk/feature/schedule/di/ScheduleNetworkModule.kt new file mode 100644 index 0000000..4f6b081 --- /dev/null +++ b/feature/schedule/src/main/java/ru/fincode/tsudesk/feature/schedule/di/ScheduleNetworkModule.kt @@ -0,0 +1,19 @@ +package ru.fincode.tsudesk.feature.schedule.di + +import dagger.Module +import dagger.Provides +import dagger.hilt.InstallIn +import dagger.hilt.components.SingletonComponent +import retrofit2.Retrofit +import ru.fincode.tsudesk.feature.schedule.data.remote.ScheduleApi +import javax.inject.Singleton + +@Module +@InstallIn(SingletonComponent::class) +object ScheduleNetworkModule { + + @Provides + @Singleton + fun provideScheduleApi(retrofit: Retrofit): ScheduleApi = + retrofit.create(ScheduleApi::class.java) +} diff --git a/feature/schedule/src/main/java/ru/fincode/tsudesk/feature/schedule/di/ScheduleRepositoryModule.kt b/feature/schedule/src/main/java/ru/fincode/tsudesk/feature/schedule/di/ScheduleRepositoryModule.kt new file mode 100644 index 0000000..3bf7cf6 --- /dev/null +++ b/feature/schedule/src/main/java/ru/fincode/tsudesk/feature/schedule/di/ScheduleRepositoryModule.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.ScheduleRepositoryImpl +import ru.fincode.tsudesk.feature.schedule.domain.repository.ScheduleRepository +import javax.inject.Singleton + +@Module +@InstallIn(SingletonComponent::class) +abstract class ScheduleRepositoryModule { + + @Binds + @Singleton + abstract fun bindScheduleRepository( + impl: ScheduleRepositoryImpl + ): ScheduleRepository +} diff --git a/feature/schedule/src/main/java/ru/fincode/tsudesk/feature/schedule/domain/model/Schedule.kt b/feature/schedule/src/main/java/ru/fincode/tsudesk/feature/schedule/domain/model/Schedule.kt deleted file mode 100644 index 5993bf1..0000000 --- a/feature/schedule/src/main/java/ru/fincode/tsudesk/feature/schedule/domain/model/Schedule.kt +++ /dev/null @@ -1,17 +0,0 @@ -package ru.fincode.tsudesk.feature.schedule.domain.model - -data class Schedule( - val lessons: List -) - -data class Lesson( - val dayOfWeek: String, - val dayName: String, - val time: String, - val room: String, - val subjectName: String, - val teacherName: String, - val weekType: Int -) - - 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 new file mode 100644 index 0000000..5b85c90 --- /dev/null +++ b/feature/schedule/src/main/java/ru/fincode/tsudesk/feature/schedule/domain/model/ScheduleEntity.kt @@ -0,0 +1,19 @@ +package ru.fincode.tsudesk.feature.schedule.domain.model + +data class ScheduleEntity( + val lessons: List +) + +data class Lesson( + val date: String, // "12.01.2026" + val time: String, // "11:00 - 13:55" + val subject: String, // discipline + val typeName: String, // "Лекции", "Лабораторные занятия" и т.д. + val room: String, + val teacher: String, + val groupId: String, + val type: String // "lecture" / "lab" / "practice" / "default" +) + + + diff --git a/feature/schedule/src/main/java/ru/fincode/tsudesk/feature/schedule/domain/repository/ScheduleRepository.kt b/feature/schedule/src/main/java/ru/fincode/tsudesk/feature/schedule/domain/repository/ScheduleRepository.kt index 6f47845..6b6746a 100644 --- a/feature/schedule/src/main/java/ru/fincode/tsudesk/feature/schedule/domain/repository/ScheduleRepository.kt +++ b/feature/schedule/src/main/java/ru/fincode/tsudesk/feature/schedule/domain/repository/ScheduleRepository.kt @@ -1,8 +1,8 @@ package ru.fincode.tsudesk.feature.schedule.domain.repository -import ru.fincode.tsudesk.feature.schedule.domain.model.Schedule +import ru.fincode.tsudesk.feature.schedule.domain.model.ScheduleEntity interface ScheduleRepository { - suspend fun loadScheduleByGroup(groupNumber: String): Schedule - suspend fun loadScheduleByTeacher(teacherName: String): Schedule + suspend fun loadScheduleByGroup(groupNumber: String): Result + suspend fun loadScheduleByTeacher(name: String): Result } diff --git a/feature/schedule/src/main/java/ru/fincode/tsudesk/feature/schedule/domain/repository/ScheduleRepositoryImpl.kt b/feature/schedule/src/main/java/ru/fincode/tsudesk/feature/schedule/domain/repository/ScheduleRepositoryImpl.kt deleted file mode 100644 index cc08215..0000000 --- a/feature/schedule/src/main/java/ru/fincode/tsudesk/feature/schedule/domain/repository/ScheduleRepositoryImpl.kt +++ /dev/null @@ -1,24 +0,0 @@ -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) - } -} diff --git a/feature/schedule/src/main/java/ru/fincode/tsudesk/feature/schedule/domain/usecase/GetScheduleUseCase.kt b/feature/schedule/src/main/java/ru/fincode/tsudesk/feature/schedule/domain/usecase/GetScheduleUseCase.kt index 5965100..84068fb 100644 --- a/feature/schedule/src/main/java/ru/fincode/tsudesk/feature/schedule/domain/usecase/GetScheduleUseCase.kt +++ b/feature/schedule/src/main/java/ru/fincode/tsudesk/feature/schedule/domain/usecase/GetScheduleUseCase.kt @@ -1,4 +1,20 @@ package ru.fincode.tsudesk.feature.schedule.domain.usecase -class GetScheduleUseCase { -} \ No newline at end of file +import ru.fincode.tsudesk.feature.schedule.domain.model.ScheduleEntity +import ru.fincode.tsudesk.feature.schedule.domain.repository.ScheduleRepository +import javax.inject.Inject + +class GetScheduleUseCase @Inject constructor( + private val repository: ScheduleRepository +) { + sealed interface ScheduleType { + data class Group(val groupNumber: String) : ScheduleType + data class Teacher(val teacherName: String) : ScheduleType + } + + suspend operator fun invoke(type: ScheduleType): Result = + when (type) { + is ScheduleType.Group -> repository.loadScheduleByGroup(type.groupNumber) + is ScheduleType.Teacher -> repository.loadScheduleByTeacher(type.teacherName) + } +} diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 59f9842..6f09eec 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -6,7 +6,7 @@ versionName = "1.0" versionCode = "1" agp = "8.12.0" -kotlin = "2.0.21" +kotlin = "1.9.24" jvmTarget = "17" coreKtx = "1.10.1" @@ -19,6 +19,10 @@ hilt = "2.50" retrofit = "2.11.0" okhttp = "4.12.0" +moshi = "1.15.1" +lifecycle = "2.7.0" +coroutines = "1.8.1" + [libraries] androidx-appcompat = { group = "androidx.appcompat", name = "appcompat", version.ref = "appcompat" } material = { group = "com.google.android.material", name = "material", version.ref = "material" } @@ -34,6 +38,18 @@ hiltandroid = { module = "com.google.dagger:hilt-android", version.ref = "hilt" hiltcompiler = { module = "com.google.dagger:hilt-compiler", version.ref = "hilt" } core-ktx = { group = "androidx.core", name = "core-ktx", version.ref = "coreKtx" } +androidx-lifecycle-runtime-ktx = { group = "androidx.lifecycle", name = "lifecycle-runtime-ktx", version.ref = "lifecycle" } +kotlinx-coroutines-android = { group = "org.jetbrains.kotlinx", name = "kotlinx-coroutines-android", version.ref = "coroutines" } + + +moshi = { group="com.squareup.moshi", name="moshi", version.ref="moshi" } +moshiKotlin = { group="com.squareup.moshi", name="moshi-kotlin", version.ref="moshi" } +retrofitMoshi = { group="com.squareup.retrofit2", name="converter-moshi", version.ref="retrofit" } + +converter-gson = { module = "com.squareup.retrofit2:converter-gson", version.ref = "retrofit" } + + + [plugins] hilt = { id = "com.google.dagger.hilt.android", version.ref = "hilt" } diff --git a/settings.gradle.kts b/settings.gradle.kts index 0435ed9..26cd699 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -13,12 +13,13 @@ pluginManagement { } dependencyResolutionManagement { repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS) - repositories(fun RepositoryHandler.() { + repositories { google() mavenCentral() - }) + } } + rootProject.name = "TSUDesk" include(":app")