Skip to content

Instantly share code, notes, and snippets.

@Algiras
Created December 11, 2020 14:26
Show Gist options
  • Save Algiras/4101ef70b66295b50d39506f2e39cc01 to your computer and use it in GitHub Desktop.
Save Algiras/4101ef70b66295b50d39506f2e39cc01 to your computer and use it in GitHub Desktop.
// Job description
case class CronJob(id: UUID, cronString: CronExpr)
// App state
case class CronulaSate(jobs: Map[UUID, CronJob] = Map.empty[UUID, CronJob])
// Events
sealed trait CronulaEvent
case class RecordJob(id: UUID, cronString: CronExpr) extends CronulaEvent
case class DeleteJob(id: UUID) extends CronulaEvent
case class Updatejob(id: UUID, cronString: CronExpr) extends CronulaEvent
// Processing/interpreting the events to state changes
def process(event: CronulaSateEvents.CronulaEvent, state: CronulaSate = CronulaSate()): CronulaSate = event match {
case CronulaSateEvents.RecordJob(id, cronString) => state.copy(jobs = state.jobs + (id -> CronJob(id, cronString)))
case CronulaSateEvents.DeleteJob(id) => state.copy(jobs = state.jobs - id)
case CronulaSateEvents.Updatejob(id, cronString) => state.copy(
jobs = state.jobs.get(id).map(_ => state.jobs + (id -> CronJob(id, cronString))).getOrElse(state.jobs))
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment