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")