business setter configurator things
This commit is contained in:
publishing
api
src
commonMain
kotlin
dev
inmo
postssystem
ktor
client
src
commonMain
kotlin
com
insanusmokrassar
postssystem
publishing
ktor
client
common
src
commonMain
kotlin
com
insanusmokrassar
postssystem
publishing
server
src
jvmMain
kotlin
com
insanusmokrassar
postssystem
publishing
ktor
26
publishing/ktor/client/src/commonMain/kotlin/com/insanusmokrassar/postssystem/publishing/ktor/client/TriggerSetterClient.kt
Normal file
26
publishing/ktor/client/src/commonMain/kotlin/com/insanusmokrassar/postssystem/publishing/ktor/client/TriggerSetterClient.kt
Normal file
@ -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)
|
||||
}
|
||||
|
Reference in New Issue
Block a user