64 lines
2.6 KiB
Kotlin
64 lines
2.6 KiB
Kotlin
package dev.inmo.postssystem.features.files.server
|
|
|
|
import dev.inmo.postssystem.features.files.common.*
|
|
import dev.inmo.postssystem.features.files.common.storage.*
|
|
import dev.inmo.micro_utils.ktor.server.*
|
|
import dev.inmo.micro_utils.ktor.server.configurators.ApplicationRoutingConfigurator
|
|
import dev.inmo.micro_utils.repos.ktor.server.crud.configureReadStandardCrudRepoRoutes
|
|
import dev.inmo.micro_utils.repos.ktor.server.crud.configureWriteStandardCrudRepoRoutes
|
|
import io.ktor.server.application.call
|
|
import io.ktor.server.auth.authenticate
|
|
import io.ktor.server.response.respondBytes
|
|
import io.ktor.server.routing.*
|
|
import kotlinx.serialization.builtins.nullable
|
|
|
|
class FilesRoutingConfigurator(
|
|
private val filesStorage: ReadFilesStorage,
|
|
private val writeFilesStorage: WriteFilesStorage?,
|
|
private val unifierRouter: UnifiedRouter
|
|
) : ApplicationRoutingConfigurator.Element {
|
|
constructor(filesStorage: FilesStorage, unifierRouter: UnifiedRouter) : this(filesStorage, filesStorage, unifierRouter)
|
|
|
|
override fun Route.invoke() {
|
|
authenticate {
|
|
route(filesRootPathPart) {
|
|
configureReadStandardCrudRepoRoutes(
|
|
filesStorage,
|
|
MetaFileInfoStorageWrapper.serializer(),
|
|
MetaFileInfoStorageWrapper.serializer().nullable,
|
|
FileId.serializer(),
|
|
unifierRouter
|
|
)
|
|
writeFilesStorage ?.let {
|
|
configureWriteStandardCrudRepoRoutes(
|
|
writeFilesStorage,
|
|
FullFileInfoStorageWrapper.serializer(),
|
|
FullFileInfoStorageWrapper.serializer().nullable,
|
|
FullFileInfo.serializer(),
|
|
FileId.serializer(),
|
|
unifierRouter
|
|
)
|
|
}
|
|
|
|
unifierRouter.apply {
|
|
post(filesGetFilesPathPart) {
|
|
call.respondBytes(
|
|
filesStorage.getBytes(
|
|
uniload(FileId.serializer())
|
|
)
|
|
)
|
|
}
|
|
get(filesGetFullFileInfoPathPart) {
|
|
unianswer(
|
|
FullFileInfoStorageWrapper.serializer().nullable,
|
|
filesStorage.getFullFileInfo(
|
|
decodeUrlQueryValueOrSendError(filesFileIdParameter, FileId.serializer()) ?: return@get
|
|
)
|
|
)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|