package dev.inmo.postssystem.features.roles.server import dev.inmo.postssystem.features.roles.common.* import dev.inmo.micro_utils.ktor.server.* import dev.inmo.micro_utils.ktor.server.configurators.ApplicationRoutingConfigurator import io.ktor.server.auth.authenticate import io.ktor.server.routing.* import kotlinx.serialization.KSerializer import kotlinx.serialization.builtins.serializer class RolesStorageWriteServerRoutesConfigurator( private val storage: WriteRolesStorage, private val serializer: KSerializer, private val includeAuthKey: String, private val excludeAuthKey: String = includeAuthKey ) : ApplicationRoutingConfigurator.Element { override fun Route.invoke() { route(usersRolesRootPathPart) { val wrapperSerializer = RolesStorageIncludeExcludeWrapper.serializer( serializer ) unifiedRouter.apply { authenticate(includeAuthKey) { post(usersRolesIncludePathPart) { val wrapper = uniload(wrapperSerializer) unianswer( Boolean.serializer(), storage.include( wrapper.subject, wrapper.userRole ) ) } } authenticate(excludeAuthKey) { post(usersRolesExcludePathPart) { val wrapper = uniload(wrapperSerializer) unianswer( Boolean.serializer(), storage.exclude( wrapper.subject, wrapper.userRole ) ) } } } } } }