53 lines
1.9 KiB
Kotlin
53 lines
1.9 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.*
|
|
import io.ktor.http.HttpStatusCode
|
|
import io.ktor.http.decodeURLQueryComponent
|
|
import io.ktor.server.application.call
|
|
import io.ktor.server.auth.authenticate
|
|
import io.ktor.server.request.receive
|
|
import io.ktor.server.response.respond
|
|
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?,
|
|
) : ApplicationRoutingConfigurator.Element {
|
|
constructor(filesStorage: FilesStorage) : this(filesStorage, filesStorage)
|
|
|
|
override fun Route.invoke() {
|
|
authenticate {
|
|
route(filesRootPathPart) {
|
|
configureReadCRUDRepoRoutes(
|
|
filesStorage,
|
|
::FileId
|
|
)
|
|
writeFilesStorage ?.let {
|
|
configureWriteCRUDRepoRoutes(writeFilesStorage)
|
|
}
|
|
|
|
post(filesGetFilesPathPart) {
|
|
call.respondBytes(
|
|
filesStorage.getBytes(
|
|
call.receive()
|
|
)
|
|
)
|
|
}
|
|
get(filesGetFullFileInfoPathPart) {
|
|
call.respond(
|
|
filesStorage.getFullFileInfo(
|
|
FileId(call.getParameterOrSendError(filesFileIdParameter) ?.decodeURLQueryComponent() ?: return@get)
|
|
) ?: HttpStatusCode.NoContent
|
|
)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|