Skip to content

Commit 2be0a61

Browse files
committed
F and G because we live in a :clown: world
1 parent d7b2880 commit 2be0a61

1 file changed

Lines changed: 13 additions & 12 deletions

File tree

SchedulerQuartz.scala

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.github.sideeffffect.quartz
22

3+
import cats.MonadThrow
34
import cats.effect.std.Dispatcher
45
import cats.effect.syntax.all._
56
import cats.effect.{Async, MonadCancelThrow, Resource, Sync}
@@ -24,11 +25,11 @@ import scala.io.Source
2425
import scala.jdk.CollectionConverters._
2526
import scala.util.chaining._
2627

27-
private class SchedulerQuartz[A: Encoder: Decoder, F[_]: Sync](
28+
private class SchedulerQuartz[A: Encoder: Decoder, F[_]: MonadThrow, G[_]: Sync](
2829
underlying: org.quartz.Scheduler,
2930
action: A => F[Unit],
3031
dispatcher: Dispatcher[F],
31-
) extends com.github.sideeffffect.quartz.Scheduler[A, F]
32+
) extends com.github.sideeffffect.quartz.Scheduler[A, G]
3233
with Job {
3334

3435
def executeF(context: JobExecutionContext): F[Unit] = for {
@@ -38,14 +39,14 @@ private class SchedulerQuartz[A: Encoder: Decoder, F[_]: Sync](
3839

3940
override def execute(context: JobExecutionContext): Unit = dispatcher.unsafeRunSync(executeF(context))
4041

41-
override def scheduleJob(name: String, group: String, jobData: A, cronExpression: String): F[Unit] = scheduleJob(
42+
override def scheduleJob(name: String, group: String, jobData: A, cronExpression: String): G[Unit] = scheduleJob(
4243
name,
4344
group,
4445
jobData,
4546
_.withSchedule(CronScheduleBuilder.cronSchedule(cronExpression).withMisfireHandlingInstructionFireAndProceed),
4647
).void
4748

48-
override def scheduleJob(name: String, group: String, jobData: A, instant: Instant): F[Unit] = scheduleJob(
49+
override def scheduleJob(name: String, group: String, jobData: A, instant: Instant): G[Unit] = scheduleJob(
4950
name,
5051
group,
5152
jobData,
@@ -58,10 +59,10 @@ private class SchedulerQuartz[A: Encoder: Decoder, F[_]: Sync](
5859
group: String,
5960
jobData: A,
6061
configure: TriggerBuilder[Trigger] => TriggerBuilder[? <: Trigger],
61-
): F[java.util.Date] = Sync[F].blocking {
62+
): G[java.util.Date] = Sync[G].blocking {
6263
val jobKey = JobKey.jobKey(name, group)
6364
val jobDetail = JobBuilder
64-
.newJob(classOf[SchedulerQuartz[A, F]])
65+
.newJob(classOf[SchedulerQuartz[A, F, G]])
6566
.withIdentity(jobKey)
6667
.usingJobData(jobDataMapKey, jobData.asJson.spaces2SortKeys)
6768
.requestRecovery(true)
@@ -78,11 +79,11 @@ private class SchedulerQuartz[A: Encoder: Decoder, F[_]: Sync](
7879
underlying.scheduleJob(jobDetail, trigger)
7980
}
8081

81-
override def checkExists(name: String, group: String): F[Boolean] = Sync[F].blocking {
82+
override def checkExists(name: String, group: String): G[Boolean] = Sync[G].blocking {
8283
underlying.checkExists(JobKey.jobKey(name, group))
8384
}
8485

85-
override def deleteJob(name: String, group: String): F[Boolean] = Sync[F].blocking {
86+
override def deleteJob(name: String, group: String): G[Boolean] = Sync[G].blocking {
8687
underlying.deleteJob(JobKey.jobKey(name, group))
8788
}
8889
}
@@ -142,11 +143,11 @@ object SchedulerQuartz {
142143
)
143144
""".query[Boolean].unique.transact(transactor)
144145

145-
def make[A: Encoder: Decoder, F[_]: Async, DS <: DataSource](
146+
def make[A: Encoder: Decoder, DS <: DataSource, F[_]: Async, G[_]: Sync](
146147
transactor: Transactor.Aux[F, DS],
147148
dbInitScriptName: Option[String] = None,
148149
customQuartzConfig: Map[String, String] = Map(),
149-
)(action: A => F[Unit]): Resource[F, com.github.sideeffffect.quartz.Scheduler[A, F]] = for {
150+
)(action: A => F[Unit]): Resource[F, com.github.sideeffffect.quartz.Scheduler[A, G]] = for {
150151
dispatcher <- Dispatcher.parallel[F](await = true)
151152

152153
quartzConfig0 = defaultQuartzConfig ++ customQuartzConfig
@@ -156,7 +157,7 @@ object SchedulerQuartz {
156157
dbIsInitialized <- isDbInitialized(transactor, quartzConfig(tablePrefixKey)).toResource
157158
_ <- Async[F].unlessA(dbIsInitialized)(dbInitScriptName.traverse(dbInit(transactor))).toResource
158159

159-
scheduler <- Resource[F, SchedulerQuartz[A, F]](Sync[F].blocking {
160+
scheduler <- Resource[F, SchedulerQuartz[A, F, G]](Sync[F].blocking {
160161
DBConnectionManager
161162
.getInstance()
162163
.addConnectionProvider(
@@ -171,7 +172,7 @@ object SchedulerQuartz {
171172
val props = { val p = new Properties(); p.putAll(quartzConfig.asJava); p }
172173
val schedulerFactory = new StdSchedulerFactory(props)
173174
val scheduler = schedulerFactory.getScheduler()
174-
val schedulerQuartz = new SchedulerQuartz[A, F](scheduler, action, dispatcher)
175+
val schedulerQuartz = new SchedulerQuartz[A, F, G](scheduler, action, dispatcher)
175176
scheduler.setJobFactory((_: TriggerFiredBundle, _: org.quartz.Scheduler) => schedulerQuartz)
176177
scheduler.start()
177178
(

0 commit comments

Comments
 (0)