core/features/files/server/src/jvmMain/kotlin/dev/inmo/postssystem/features/files/server/FilesRoutingConfigurator.kt

53 lines
1.9 KiB
Kotlin
Raw Normal View History

2021-11-24 07:52:27 +00:00
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.*
import io.ktor.http.HttpStatusCode
import io.ktor.http.decodeURLQueryComponent
2022-05-07 14:48:17 +00:00
import io.ktor.server.application.call
import io.ktor.server.auth.authenticate
import io.ktor.server.request.receive
import io.ktor.server.response.respond
2022-05-07 14:48:17 +00:00
import io.ktor.server.response.respondBytes
import io.ktor.server.routing.*
2021-11-24 07:52:27 +00:00
import kotlinx.serialization.builtins.nullable
class FilesRoutingConfigurator(
2022-01-07 17:38:55 +00:00
private val filesStorage: ReadFilesStorage,
2021-11-24 14:25:05 +00:00
private val writeFilesStorage: WriteFilesStorage?,
2021-11-24 07:52:27 +00:00
) : ApplicationRoutingConfigurator.Element {
constructor(filesStorage: FilesStorage) : this(filesStorage, filesStorage)
2021-11-24 07:52:27 +00:00
override fun Route.invoke() {
authenticate {
route(filesRootPathPart) {
configureReadCRUDRepoRoutes(
2021-11-24 07:52:27 +00:00
filesStorage,
::FileId
2021-11-24 07:52:27 +00:00
)
writeFilesStorage ?.let {
configureWriteCRUDRepoRoutes(writeFilesStorage)
2021-11-24 07:52:27 +00:00
}
2021-11-24 14:25:05 +00:00
post(filesGetFilesPathPart) {
call.respondBytes(
filesStorage.getBytes(
call.receive()
2021-11-24 07:52:27 +00:00
)
)
}
get(filesGetFullFileInfoPathPart) {
call.respond(
filesStorage.getFullFileInfo(
FileId(call.getParameterOrSendError(filesFileIdParameter) ?.decodeURLQueryComponent() ?: return@get)
) ?: HttpStatusCode.NoContent
)
2021-11-24 07:52:27 +00:00
}
}
}
}
}