add TriggersToPostsRepo
This commit is contained in:
@@ -22,6 +22,9 @@ interface WritePublishingRegistrar {
|
||||
key: TriggerControlKey,
|
||||
postId: PostId
|
||||
): Boolean
|
||||
suspend fun unregisterTriggerForPost(
|
||||
postId: PostId
|
||||
): Boolean
|
||||
}
|
||||
|
||||
interface PublishingKeysRegistrar : ReadPublishingRegistrar, WritePublishingRegistrar
|
||||
@@ -48,5 +51,17 @@ class BusinessPublishingKeysRegistrar(
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override suspend fun unregisterTriggerForPost(
|
||||
postId: PostId
|
||||
): Boolean = repo.getTriggerControlKeyByPostId(
|
||||
postId
|
||||
).let { previousKey ->
|
||||
repo.unsetPostTriggerControlKey(postId).also {
|
||||
if (it && previousKey != null) {
|
||||
unregisteredKeysChannel.send(previousKey)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -8,19 +8,32 @@ class TriggerSetterServiceUnknownTriggerIdException(
|
||||
"Unknown trigger id $triggerId"
|
||||
)
|
||||
|
||||
interface TriggerSetterService {
|
||||
interface ReadTriggersManagementService {
|
||||
@Throws(TriggerSetterServiceUnknownTriggerIdException::class)
|
||||
suspend fun getTrigger(postId: PostId): TriggerId?
|
||||
}
|
||||
|
||||
interface WriteTriggersManagementService {
|
||||
@Throws(TriggerSetterServiceUnknownTriggerIdException::class)
|
||||
suspend fun setTrigger(postId: PostId, triggerId: TriggerId): Boolean
|
||||
}
|
||||
|
||||
class BusinessTriggerSetterService(
|
||||
interface TriggersManagementService : ReadTriggersManagementService, WriteTriggersManagementService
|
||||
|
||||
class BusinessTriggersManagementService(
|
||||
private val postKeyGenerator: PostKeyGenerator,
|
||||
private val publishingKeyReceiverGetter: PublishingKeyReceiverGetter
|
||||
) : TriggerSetterService {
|
||||
private val publishingKeyReceiverGetter: PublishingKeyReceiverGetter,
|
||||
private val keysRegistrar: PublishingKeysRegistrar
|
||||
) : TriggersManagementService {
|
||||
override suspend fun getTrigger(postId: PostId): TriggerId? {
|
||||
TODO("Not yet implemented")
|
||||
}
|
||||
|
||||
override suspend fun setTrigger(postId: PostId, triggerId: TriggerId): Boolean {
|
||||
val publishingKeyReceiver = publishingKeyReceiverGetter(triggerId) ?: throw TriggerSetterServiceUnknownTriggerIdException(triggerId)
|
||||
val triggerControlKey = postKeyGenerator(postId, triggerId)
|
||||
|
||||
keysRegistrar.registerTriggerForPost(triggerControlKey, postId)
|
||||
publishingKeyReceiver.acceptKey(postId, triggerControlKey)
|
||||
return true
|
||||
}
|
@@ -0,0 +1,31 @@
|
||||
package dev.inmo.postssystem.core.publishing.repos
|
||||
|
||||
import dev.inmo.micro_utils.repos.*
|
||||
import dev.inmo.postssystem.core.post.PostId
|
||||
import dev.inmo.postssystem.core.publishing.*
|
||||
|
||||
interface ReadTriggersToPostsRepo : ReadKeyValueRepo<PostId, TriggerId>
|
||||
interface WriteTriggersToPostsRepo : WriteKeyValueRepo<PostId, TriggerId>
|
||||
interface TriggersToPostsRepo : KeyValueRepo<PostId, TriggerId>, WriteTriggersToPostsRepo, ReadTriggersToPostsRepo
|
||||
|
||||
fun TriggersToPostsRepo(
|
||||
keyValueRepo: KeyValueRepo<PostId, TriggerId>,
|
||||
generator: PostKeyGenerator,
|
||||
writePublishingKeysRegistrar: WritePublishingRegistrar
|
||||
): TriggersToPostsRepo = object : TriggersToPostsRepo, KeyValueRepo<PostId, TriggerId> by keyValueRepo {
|
||||
override suspend fun set(toSet: Map<PostId, TriggerId>) {
|
||||
keyValueRepo.set(
|
||||
toSet.filter { (postId, triggerId) ->
|
||||
val publishingKey = generator(postId, triggerId)
|
||||
writePublishingKeysRegistrar.registerTriggerForPost(publishingKey, postId)
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
override suspend fun unset(toUnset: List<PostId>) {
|
||||
toUnset.forEach {
|
||||
writePublishingKeysRegistrar.unregisterTriggerForPost(it)
|
||||
}
|
||||
keyValueRepo.unset(toUnset)
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user