packages feed

keiro-dsl-0.18.0.0: test/fixtures/calendar-days.keiro

language keiro-dsl 6
context calendar-days

mapped structural value LocalDay {
  haskell package=keiro-dsl module=Conformance.CalendarDays.Domain type=LocalDay
  binding = "Conformance.CalendarDays.Bindings.localDayBinding"
  binding-version = "1"
  canonical-type = "conformance.calendar-days.LocalDay.v1"
  fixtures = "Conformance.CalendarDays.Bindings.localDayFixtures"
  initial = "Conformance.CalendarDays.Bindings.initialLocalDay"
  wire Day
}

mapped structural value MaybeLocalDay {
  haskell package=keiro-dsl module=Conformance.CalendarDays.Domain type=MaybeLocalDay
  binding = "Conformance.CalendarDays.Bindings.maybeLocalDayBinding"
  binding-version = "1"
  canonical-type = "conformance.calendar-days.MaybeLocalDay.v1"
  fixtures = "Conformance.CalendarDays.Bindings.maybeLocalDayFixtures"
  wire Optional Day
}

mapped structural record CalendarEnvelope {
  haskell package=keiro-dsl module=Conformance.CalendarDays.Domain type=CalendarEnvelope
  binding = "Conformance.CalendarDays.Bindings.calendarEnvelopeBinding"
  binding-version = "1"
  canonical-type = "conformance.calendar-days.CalendarEnvelope.v1"
  fixtures = "Conformance.CalendarDays.Bindings.calendarEnvelopeFixtures"
  wire object constructor=CalendarEnvelope unknown-fields=reject {
    primary as "primary" : Day required
    optionalDay as "optionalDay" : Optional Day optional on-missing=null
    namedOptional as "namedOptional" : MaybeLocalDay required
    sequence as "sequence" : List Day required
    labelled as "labelled" : Map Day required
  }
}

aggregate CalendarStore
  regs
    current LocalDay = initial
  states Empty Stored!

  command StoreDate { day:LocalDay optionalDay:MaybeLocalDay envelope:CalendarEnvelope }
  event DateStored = fields(StoreDate)
  event DateAudited = fields(StoreDate)

  Empty -- StoreDate -->
    write current := day
    emit DateStored
    emit DateAudited
    goto Stored

  wire kind=ctorName fields=camelCase schemaVersion=1
  snapshot every 1
    state-codec version=1 shape-hash="calendar-days-v1"

workqueue calendar_jobs {
  queue logical = "calendar.jobs"
  derive physical = "calendar_jobs"
         dlq = "calendar_jobs_dlq"
         table = "pgmq.q_calendar_jobs"
  payload CalendarJob {
    day -> "day" : LocalDay
    optionalDay -> "optional_day" : MaybeLocalDay
    envelope -> "envelope" : CalendarEnvelope
  }
  retry maxRetries = 3 delay = 1s dlq = on
  disposition {
    storeFailure -> retry 1s
    commandRejected -> deadLetter
    decodeFailure -> deadLetter
    onCodecReject -> deadLetter
  }
}

target calendar_table {
  schema = "public"
  table = "calendar_values"
  reset = clear
}

rebuild-group calendar_rebuild {
  targets = [ calendar_table ]
  order = [ calendar_table ]
}

projection-owner calendar_writer {
  source = all
  delivery = subscription
  group = calendar_rebuild
  targets = [ calendar_table ]
  order = 10
  subscription = "calendar-writer"
  dedup = "calendar-writer-v1"
  checkpoint-on-missing = from-beginning
  replay = explicit
}

readmodel calendar_lookup {
  columns {}
  query input = MaybeLocalDay
  query result = CalendarEnvelope
  version = 1
  shape = "fnv1a:3c07a19c552c3547"
  freshness = wait-for-head entire-log
  group = calendar_rebuild
  targets = [ calendar_table ]
}