backend implementation
This commit is contained in:
@@ -20,6 +20,7 @@ dependencies {
|
||||
implementation(project(":libs:backend-base"))
|
||||
implementation(project(":libs:base"))
|
||||
implementation(project(":libs:http-client"))
|
||||
implementation(project(":libs:updater:updater-common"))
|
||||
|
||||
implementation(libs.ktor.server.core.jvm)
|
||||
implementation(libs.ktor.server.host.common.jvm)
|
||||
|
||||
+31
@@ -0,0 +1,31 @@
|
||||
package ru.shadowsparky.vbox.backend.data
|
||||
|
||||
import kotlinx.coroutines.withContext
|
||||
import kotlinx.serialization.json.Json
|
||||
import org.koin.core.annotation.Factory
|
||||
import ru.shadowsparky.backend.data.EnvFetcher
|
||||
import ru.shadowsparky.domain.DispatcherProvider
|
||||
import ru.shadowsparky.updater.domain.UpdateFetcher
|
||||
import ru.shadowsparky.updater.domain.UpdateInfo
|
||||
import java.io.File
|
||||
|
||||
@Factory
|
||||
class BackendUpdateFetcher(
|
||||
private val envFetcher: EnvFetcher,
|
||||
private val json: Json,
|
||||
private val dispatcherProvider: DispatcherProvider
|
||||
) : UpdateFetcher {
|
||||
private var config: UpdateInfo? = null
|
||||
|
||||
override suspend fun fetch(versionCode: Long): UpdateInfo = withContext(dispatcherProvider.io) {
|
||||
config?.let { return@withContext it }
|
||||
val configPath = envFetcher.get("UPDATE_CONFIG")
|
||||
if (configPath.isBlank()) {
|
||||
UpdateInfo()
|
||||
} else {
|
||||
json.decodeFromString<UpdateInfo>(File(configPath).readText()).apply {
|
||||
config = this
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,12 +1,13 @@
|
||||
package ru.shadowsparky.vbox.backend.di
|
||||
|
||||
import kotlinx.serialization.json.Json
|
||||
import org.koin.core.annotation.Named
|
||||
import org.koin.core.annotation.Single
|
||||
import ru.shadowsparky.backend.data.TokenVerifier
|
||||
import ru.shadowsparky.backend.domain.JwtInfo
|
||||
import ru.shadowsparky.backend.domain.LoginVerifier
|
||||
import ru.shadowsparky.updater.domain.UpdateFetcher
|
||||
import ru.shadowsparky.vbox.backend.data.BackendRemoteEventHandler
|
||||
import ru.shadowsparky.vbox.backend.data.BackendUpdateFetcher
|
||||
import ru.shadowsparky.vbox.backend.data.auth.AuthTokenRepositoryFactory
|
||||
import ru.shadowsparky.vbox.backend.data.tags.MovieTagRepositoryFactory
|
||||
import ru.shadowsparky.vbox.backend.data.tags.UserTagRepositoryFactory
|
||||
@@ -22,9 +23,9 @@ class RoutingEntryPoint(
|
||||
val searchFactory: SearchRepositoryFactory,
|
||||
val recentlyFactory: RecentlyWatchedRepositoryFactory,
|
||||
val savedMovieFactory: SavedMovieRepositoryFactory,
|
||||
val json: Json,
|
||||
val movieTagFactory: MovieTagRepositoryFactory,
|
||||
val userTagFactory: UserTagRepositoryFactory
|
||||
val userTagFactory: UserTagRepositoryFactory,
|
||||
val updateFetcher: UpdateFetcher
|
||||
)
|
||||
|
||||
@Single
|
||||
|
||||
+1
@@ -46,5 +46,6 @@ fun Routing.setupAuthMethods(
|
||||
setupRecentlyWatched(recentlyFactory)
|
||||
setupSavedMovie(savedMovieFactory)
|
||||
setupTagsRouting(userTagFactory, movieTagFactory)
|
||||
setupUpdates(updateFetcher)
|
||||
}
|
||||
}
|
||||
|
||||
+15
@@ -0,0 +1,15 @@
|
||||
package ru.shadowsparky.vbox.backend.presentation.routing
|
||||
|
||||
import io.ktor.server.response.respond
|
||||
import io.ktor.server.routing.Routing
|
||||
import io.ktor.server.routing.get
|
||||
import io.ktor.server.util.getOrFail
|
||||
import ru.shadowsparky.updater.domain.UpdateFetcher
|
||||
import ru.shadowsparky.vbox.shared.domain.DYNAMIC_PREFIX
|
||||
|
||||
fun Routing.setupUpdates(updateFetcher: UpdateFetcher) {
|
||||
get("$DYNAMIC_PREFIX/checkUpdates") {
|
||||
val versionCode = call.parameters.getOrFail(UpdateFetcher.ARG_VERSION_CODE).toLong()
|
||||
call.respond(updateFetcher.fetch(versionCode))
|
||||
}
|
||||
}
|
||||
@@ -27,7 +27,7 @@ dependencies {
|
||||
implementation(project(":libs:ui"))
|
||||
implementation(project(":libs:http-client"))
|
||||
implementation(project(":libs:video-player"))
|
||||
implementation(project(":libs:updater"))
|
||||
implementation(project(":libs:updater:updater-client"))
|
||||
debugImplementation(libs.ui.tooling)
|
||||
implementation(libs.ui.tooling.preview)
|
||||
testImplementation(libs.koin.test)
|
||||
|
||||
@@ -26,7 +26,7 @@ kotlin {
|
||||
implementation(project(":libs:ui"))
|
||||
implementation(project(":libs:http-client"))
|
||||
implementation(project(":libs:video-player"))
|
||||
implementation(project(":libs:updater"))
|
||||
implementation(project(":libs:updater:updater-client"))
|
||||
}
|
||||
androidMain.dependencies {
|
||||
implementation(libs.androidx.appcompat)
|
||||
|
||||
+3
-5
@@ -2,7 +2,6 @@ package ru.shadowsparky.vbox.shared.data
|
||||
|
||||
import io.ktor.client.HttpClient
|
||||
import org.koin.core.annotation.Factory
|
||||
import ru.shadowsparky.domain.AppConfig
|
||||
import ru.shadowsparky.updater.domain.UpdateFetcher
|
||||
import ru.shadowsparky.updater.domain.UpdateInfo
|
||||
import ru.shadowsparky.vbox.shared.domain.DYNAMIC_PREFIX
|
||||
@@ -12,14 +11,13 @@ import ru.shadowsparky.vbox.shared.domain.getServerConfiguration
|
||||
@Factory
|
||||
class VBoxUpdateFetcher(
|
||||
private val httpClient: HttpClient,
|
||||
private val serverConfigurationProvider: ServerConfigurationRepository,
|
||||
private val appConfig: AppConfig
|
||||
private val serverConfigurationProvider: ServerConfigurationRepository
|
||||
) : UpdateFetcher {
|
||||
override suspend fun fetch(): UpdateInfo {
|
||||
override suspend fun fetch(versionCode: Long): UpdateInfo {
|
||||
return httpClient.get<UpdateInfo>(
|
||||
"$DYNAMIC_PREFIX/checkUpdates",
|
||||
mapOf(
|
||||
"versionCode" to appConfig.versionCode.toString()
|
||||
UpdateFetcher.ARG_VERSION_CODE to versionCode.toString()
|
||||
),
|
||||
serverConfigurationProvider.getServerConfiguration()
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user