packages feed

keiro-dsl-0.18.0.0: test/fixtures/structural-text-sets.keiro

language keiro-dsl 6
context structural-text-sets

mapped structural value TextLabels {
  haskell package=keiro-dsl module=Conformance.StructuralTextSets.Domain type=TextLabels
  binding = "Conformance.StructuralTextSets.Bindings.textLabelsBinding"
  binding-version = "1"
  canonical-type = "conformance.structural-text-sets.TextLabels.v1"
  fixtures = "Conformance.StructuralTextSets.Bindings.textLabelsFixtures"
  initial = "Conformance.StructuralTextSets.Bindings.initialTextLabels"
  wire Set Text
}

mapped structural value MaybeTextLabels {
  haskell package=keiro-dsl module=Conformance.StructuralTextSets.Domain type=MaybeTextLabels
  binding = "Conformance.StructuralTextSets.Bindings.maybeTextLabelsBinding"
  binding-version = "1"
  canonical-type = "conformance.structural-text-sets.MaybeTextLabels.v1"
  fixtures = "Conformance.StructuralTextSets.Bindings.maybeTextLabelsFixtures"
  wire Optional (Set Text)
}

mapped structural record LabelEnvelope {
  haskell package=keiro-dsl module=Conformance.StructuralTextSets.Domain type=LabelEnvelope
  binding = "Conformance.StructuralTextSets.Bindings.labelEnvelopeBinding"
  binding-version = "1"
  canonical-type = "conformance.structural-text-sets.LabelEnvelope.v1"
  fixtures = "Conformance.StructuralTextSets.Bindings.labelEnvelopeFixtures"
  wire object constructor=LabelEnvelope unknown-fields=reject {
    primary as "primary" : Set Text required
    optionalLabels as "optionalLabels" : Optional (Set Text) optional on-missing=null
    namedOptional as "namedOptional" : MaybeTextLabels required
    sequence as "sequence" : List (Set Text) required
    labelled as "labelled" : Map (Set Text) required
  }
}

aggregate LabelStore
  regs
    current TextLabels = initial
  states Empty Stored!

  command StoreLabels { labels:TextLabels optionalLabels:MaybeTextLabels envelope:LabelEnvelope }
  command ImportLegacyLabels { labels:TextLabels optionalLabels:MaybeTextLabels envelope:LabelEnvelope }
  event LabelsStored = fields(StoreLabels)
  event LabelsAudited = fields(StoreLabels)
  event LegacyLabelsImported = fields(ImportLegacyLabels)

  Empty -- StoreLabels -->
    write current := labels
    emit LabelsStored
    emit LabelsAudited
    goto Stored

  replay-only Empty -- ImportLegacyLabels -->
    write current := labels
    emit LegacyLabelsImported
    goto Stored

  wire kind=ctorName fields=camelCase schemaVersion=1
  snapshot every 1
    state-codec version=1 shape-hash="structural-text-sets-v1"

workqueue label_jobs {
  queue logical = "label.jobs"
  derive physical = "label_jobs"
         dlq = "label_jobs_dlq"
         table = "pgmq.q_label_jobs"
  payload LabelJob {
    labels -> "labels" : TextLabels
    optionalLabels -> "optional_labels" : MaybeTextLabels
    envelope -> "envelope" : LabelEnvelope
  }
  retry maxRetries = 3 delay = 1s dlq = on
  disposition {
    storeFailure -> retry 1s
    commandRejected -> deadLetter
    decodeFailure -> deadLetter
    onCodecReject -> deadLetter
  }
}

target label_table {
  schema = "public"
  table = "label_values"
  reset = clear
}

rebuild-group label_rebuild {
  targets = [ label_table ]
  order = [ label_table ]
}

projection-owner label_writer {
  source = all
  delivery = subscription
  group = label_rebuild
  targets = [ label_table ]
  order = 10
  subscription = "label-writer"
  dedup = "label-writer-v1"
  checkpoint-on-missing = from-beginning
  replay = explicit
}

readmodel label_lookup {
  columns {}
  query input = MaybeTextLabels
  query result = LabelEnvelope
  version = 1
  shape = "fnv1a:3c07a19c552c3547"
  freshness = wait-for-head entire-log
  group = label_rebuild
  targets = [ label_table ]
}