diff --git a/src/main/kotlin/dev/usbharu/hideout/activitypub/service/activity/block/APDeliverBlockJobProcessor.kt b/src/main/kotlin/dev/usbharu/hideout/activitypub/service/activity/block/APDeliverBlockJobProcessor.kt new file mode 100644 index 00000000..0b56ac8c --- /dev/null +++ b/src/main/kotlin/dev/usbharu/hideout/activitypub/service/activity/block/APDeliverBlockJobProcessor.kt @@ -0,0 +1,34 @@ +package dev.usbharu.hideout.activitypub.service.activity.block + +import dev.usbharu.hideout.activitypub.service.common.APRequestService +import dev.usbharu.hideout.application.external.Transaction +import dev.usbharu.hideout.core.domain.model.user.UserRepository +import dev.usbharu.hideout.core.external.job.DeliverBlockJob +import dev.usbharu.hideout.core.external.job.DeliverBlockJobParam +import dev.usbharu.hideout.core.service.job.JobProcessor +import org.springframework.stereotype.Service + +@Service +class APDeliverBlockJobProcessor( + private val apRequestService: APRequestService, + private val userRepository: UserRepository, + private val transaction: Transaction, + private val deliverBlockJob: DeliverBlockJob +) : JobProcessor { + override suspend fun process(param: DeliverBlockJobParam): Unit = transaction.transaction { + + val signer = userRepository.findById(param.signer) + apRequestService.apPost( + param.inbox, + param.reject, + signer + ) + apRequestService.apPost( + param.inbox, + param.block, + signer + ) + } + + override fun job(): DeliverBlockJob = deliverBlockJob +} diff --git a/src/main/kotlin/dev/usbharu/hideout/core/external/job/DeliverBlockJob.kt b/src/main/kotlin/dev/usbharu/hideout/core/external/job/DeliverBlockJob.kt new file mode 100644 index 00000000..8f55831e --- /dev/null +++ b/src/main/kotlin/dev/usbharu/hideout/core/external/job/DeliverBlockJob.kt @@ -0,0 +1,43 @@ +package dev.usbharu.hideout.core.external.job + +import com.fasterxml.jackson.databind.ObjectMapper +import com.fasterxml.jackson.module.kotlin.readValue +import dev.usbharu.hideout.activitypub.domain.model.Block +import dev.usbharu.hideout.activitypub.domain.model.Reject +import kjob.core.dsl.ScheduleContext +import kjob.core.job.JobProps +import org.springframework.beans.factory.annotation.Qualifier +import org.springframework.stereotype.Component + +data class DeliverBlockJobParam( + val signer: Long, + val block: Block, + val reject: Reject, + val inbox: String +) + +@Component +class DeliverBlockJob(@Qualifier("activitypub") private val objectMapper: ObjectMapper) : + HideoutJob("DeliverBlockJob") { + + val block = string("block") + val reject = string("reject") + val inbox = string("inbox") + val signer = long("signer") + + override fun convert(value: DeliverBlockJobParam): ScheduleContext.(DeliverBlockJob) -> Unit = { + props[block] = objectMapper.writeValueAsString(value.block) + props[reject] = objectMapper.writeValueAsString(value.reject) + props[reject] = value.inbox + props[signer] = value.signer + } + + override fun convert(props: JobProps): DeliverBlockJobParam = DeliverBlockJobParam( + props[signer], + objectMapper.readValue(props[block]), + objectMapper.readValue(props[reject]), + props[inbox] + ) + + +}