business setter configurator things

This commit is contained in:
2020-11-28 22:38:40 +06:00
parent 4b6544131f
commit c959da084a
6 changed files with 95 additions and 23 deletions
publishing
api
src
commonMain
ktor
client
src
commonMain
kotlin
com
insanusmokrassar
postssystem
publishing
common
src
commonMain
kotlin
com
insanusmokrassar
postssystem
server
src
jvmMain
kotlin
com
insanusmokrassar
postssystem
publishing

@ -0,0 +1,26 @@
package com.insanusmokrassar.postssystem.publishing.ktor.client
import com.insanusmokrassar.postssystem.publishing.ktor.*
import dev.inmo.micro_utils.ktor.client.BodyPair
import dev.inmo.micro_utils.ktor.client.UnifiedRequester
import dev.inmo.micro_utils.ktor.common.buildStandardUrl
import dev.inmo.postssystem.core.post.PostId
import dev.inmo.postssystem.core.publishing.TriggerId
import dev.inmo.postssystem.core.publishing.TriggerSetterService
import kotlinx.serialization.builtins.serializer
class TriggerSetterKtorClient(
private val baseUrl: String,
private val subRoute: String? = triggersRootRoute,
private val unifiedRequester: UnifiedRequester
) : TriggerSetterService {
private val apiRootUrl = subRoute ?.let { "$baseUrl/$it" } ?: baseUrl
override suspend fun setTrigger(postId: PostId, triggerId: TriggerId): Boolean = unifiedRequester.unipost(
buildStandardUrl(
apiRootUrl,
"$setTriggerSubRoute/"
),
BodyPair(TriggerSettingData.serializer(), TriggerSettingData(postId, triggerId)),
Boolean.serializer()
)
}

@ -1,3 +1,12 @@
package com.insanusmokrassar.postssystem.publishing.ktor
const val setTriggerRoute = "set_trigger"
import dev.inmo.postssystem.core.content.ContentId
import dev.inmo.postssystem.core.post.PostId
import dev.inmo.postssystem.core.publishing.TriggerId
import kotlinx.serialization.Serializable
const val triggersRootRoute = "triggers"
const val setTriggerSubRoute = "set"
@Serializable
data class TriggerSettingData(val postId: PostId, val triggerId: TriggerId)

@ -1,33 +1,43 @@
package com.insanusmokrassar.postssystem.publishing.ktor.server
import com.insanusmokrassar.postssystem.publishing.ktor.*
import dev.inmo.micro_utils.ktor.server.UnifiedRouter
import dev.inmo.postssystem.core.post.PostId
import dev.inmo.postssystem.core.publishing.*
import io.ktor.application.call
import io.ktor.http.HttpStatusCode
import io.ktor.response.respond
import io.ktor.routing.Route
import io.ktor.routing.post
import io.ktor.routing.*
import kotlinx.serialization.builtins.serializer
fun Route.configureTriggerSetter(
postKeyGenerator: PostKeyGenerator,
publishingKeyReceiverGetter: PublishingKeyReceiverGetter,
unifiedRouter: UnifiedRouter
) {
post("set_trigger/{post_id}/{trigger_id}") {
private inline fun Route.configureTriggerSetter(triggerSetterService: TriggerSetterService, unifiedRouter: UnifiedRouter) {
post("$setTriggerSubRoute/{post_id}/{trigger_id}") {
unifiedRouter.apply {
val postId = decodeUrlQueryValueOrSendError("post_id", PostId.serializer()) ?: return@post
val triggerId = decodeUrlQueryValueOrSendError("trigger_id", TriggerId.serializer()) ?: return@post
val (postId, triggerId) = uniload(TriggerSettingData.serializer())
val publishingKeyReceiver = publishingKeyReceiverGetter(triggerId) ?: call.respond(
HttpStatusCode.BadRequest,
"Unknown trigger id $triggerId"
).let { return@post }
val triggerControlKey = postKeyGenerator(postId, triggerId)
publishingKeyReceiver.acceptKey(postId, triggerControlKey)
call.respond(HttpStatusCode.OK)
try {
unianswer(
Boolean.serializer(),
triggerSetterService.setTrigger(postId, triggerId)
)
} catch (e: TriggerSetterServiceUnknownTriggerIdException) {
call.respond(
HttpStatusCode.BadRequest,
"Unknown trigger id $triggerId"
)
}
}
}
}
fun Route.configureTriggerSetter(
subRoute: String? = triggersRootRoute,
triggerSetterService: TriggerSetterService,
unifiedRouter: UnifiedRouter
) {
subRoute ?.also {
route(it) {
configureTriggerSetter(triggerSetterService, unifiedRouter)
}
} ?: configureTriggerSetter(triggerSetterService, unifiedRouter)
}