mirror of https://github.com/usbharu/Hideout.git
feat: 型安全ジョブキュー
This commit is contained in:
parent
3009ca1532
commit
ea9a999ae9
|
@ -2,26 +2,44 @@ package dev.usbharu.hideout.core.external.job
|
||||||
|
|
||||||
import kjob.core.Job
|
import kjob.core.Job
|
||||||
import kjob.core.Prop
|
import kjob.core.Prop
|
||||||
|
import kjob.core.dsl.ScheduleContext
|
||||||
|
import kjob.core.job.JobProps
|
||||||
import org.springframework.stereotype.Component
|
import org.springframework.stereotype.Component
|
||||||
|
|
||||||
sealed class HideoutJob(name: String = "") : Job(name)
|
abstract class HideoutJob<T, R : HideoutJob<T, R>>(name: String = "") : Job(name) {
|
||||||
|
abstract fun convert(value: T): ScheduleContext<R>.(R) -> Unit
|
||||||
|
abstract fun convert(props: JobProps<R>): T
|
||||||
|
}
|
||||||
|
|
||||||
@Component
|
@Component
|
||||||
object ReceiveFollowJob : HideoutJob("ReceiveFollowJob") {
|
object ReceiveFollowJob : HideoutJob<String, ReceiveFollowJob>("ReceiveFollowJob") {
|
||||||
val actor: Prop<ReceiveFollowJob, String> = string("actor")
|
val actor: Prop<ReceiveFollowJob, String> = string("actor")
|
||||||
val follow: Prop<ReceiveFollowJob, String> = string("follow")
|
val follow: Prop<ReceiveFollowJob, String> = string("follow")
|
||||||
val targetActor: Prop<ReceiveFollowJob, String> = string("targetActor")
|
val targetActor: Prop<ReceiveFollowJob, String> = string("targetActor")
|
||||||
|
|
||||||
|
override fun convert(value: String): ScheduleContext<ReceiveFollowJob>.(ReceiveFollowJob) -> Unit = {
|
||||||
|
props[it.follow] = value
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun convert(props: JobProps<ReceiveFollowJob>): String = TODO("Not yet implemented")
|
||||||
}
|
}
|
||||||
|
|
||||||
@Component
|
@Component
|
||||||
object DeliverPostJob : HideoutJob("DeliverPostJob") {
|
object DeliverPostJob : HideoutJob<String, DeliverPostJob>("DeliverPostJob") {
|
||||||
val create = string("create")
|
val create = string("create")
|
||||||
val inbox = string("inbox")
|
val inbox = string("inbox")
|
||||||
val actor = string("actor")
|
val actor = string("actor")
|
||||||
|
override fun convert(value: String): ScheduleContext<DeliverPostJob>.(DeliverPostJob) -> Unit {
|
||||||
|
TODO("Not yet implemented")
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun convert(props: JobProps<DeliverPostJob>): String {
|
||||||
|
TODO("Not yet implemented")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Component
|
@Component
|
||||||
object DeliverReactionJob : HideoutJob("DeliverReactionJob") {
|
object DeliverReactionJob : HideoutJob<String, DeliverReactionJob>("DeliverReactionJob") {
|
||||||
val reaction: Prop<DeliverReactionJob, String> = string("reaction")
|
val reaction: Prop<DeliverReactionJob, String> = string("reaction")
|
||||||
val postUrl: Prop<DeliverReactionJob, String> = string("postUrl")
|
val postUrl: Prop<DeliverReactionJob, String> = string("postUrl")
|
||||||
val actor: Prop<DeliverReactionJob, String> = string("actor")
|
val actor: Prop<DeliverReactionJob, String> = string("actor")
|
||||||
|
@ -30,7 +48,7 @@ object DeliverReactionJob : HideoutJob("DeliverReactionJob") {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Component
|
@Component
|
||||||
object DeliverRemoveReactionJob : HideoutJob("DeliverRemoveReactionJob") {
|
object DeliverRemoveReactionJob : HideoutJob<String, DeliverRemoveReactionJob>("DeliverRemoveReactionJob") {
|
||||||
val id: Prop<DeliverRemoveReactionJob, String> = string("id")
|
val id: Prop<DeliverRemoveReactionJob, String> = string("id")
|
||||||
val inbox: Prop<DeliverRemoveReactionJob, String> = string("inbox")
|
val inbox: Prop<DeliverRemoveReactionJob, String> = string("inbox")
|
||||||
val actor: Prop<DeliverRemoveReactionJob, String> = string("actor")
|
val actor: Prop<DeliverRemoveReactionJob, String> = string("actor")
|
||||||
|
@ -38,7 +56,7 @@ object DeliverRemoveReactionJob : HideoutJob("DeliverRemoveReactionJob") {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Component
|
@Component
|
||||||
object InboxJob : HideoutJob("InboxJob") {
|
object InboxJob : HideoutJob<String, InboxJob>("InboxJob") {
|
||||||
val json = string("json")
|
val json = string("json")
|
||||||
val type = string("type")
|
val type = string("type")
|
||||||
val httpRequest = string("http_request")
|
val httpRequest = string("http_request")
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
package dev.usbharu.hideout.core.infrastructure.kjobexposed
|
package dev.usbharu.hideout.core.infrastructure.kjobexposed
|
||||||
|
|
||||||
|
import dev.usbharu.hideout.core.external.job.HideoutJob
|
||||||
import dev.usbharu.hideout.core.service.job.JobQueueParentService
|
import dev.usbharu.hideout.core.service.job.JobQueueParentService
|
||||||
import kjob.core.Job
|
import kjob.core.Job
|
||||||
import kjob.core.KJob
|
import kjob.core.KJob
|
||||||
|
@ -29,4 +30,9 @@ class KJobJobQueueParentService() : JobQueueParentService {
|
||||||
logger.debug("schedule job={}", job.name)
|
logger.debug("schedule job={}", job.name)
|
||||||
kjob.schedule(job, block)
|
kjob.schedule(job, block)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override suspend fun <T, J : HideoutJob<T, J>> scheduleTypeSafe(job: J, jobProps: T) {
|
||||||
|
val convert: ScheduleContext<J>.(J) -> Unit = job.convert(jobProps)
|
||||||
|
kjob.schedule(job, convert)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
package dev.usbharu.hideout.core.service.job
|
package dev.usbharu.hideout.core.service.job
|
||||||
|
|
||||||
|
import dev.usbharu.hideout.core.external.job.HideoutJob
|
||||||
import kjob.core.Job
|
import kjob.core.Job
|
||||||
import kjob.core.dsl.ScheduleContext
|
import kjob.core.dsl.ScheduleContext
|
||||||
import org.springframework.stereotype.Service
|
import org.springframework.stereotype.Service
|
||||||
|
@ -9,4 +10,5 @@ interface JobQueueParentService {
|
||||||
|
|
||||||
fun init(jobDefines: List<Job>)
|
fun init(jobDefines: List<Job>)
|
||||||
suspend fun <J : Job> schedule(job: J, block: ScheduleContext<J>.(J) -> Unit = {})
|
suspend fun <J : Job> schedule(job: J, block: ScheduleContext<J>.(J) -> Unit = {})
|
||||||
|
suspend fun <T, J : HideoutJob<T, J>> scheduleTypeSafe(job: J, jobProps: T)
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue