{
  "services": [
    {
      "name": "Bookings",
      "description": "Replace with a sentence about the service, or remove this line.",
      "assemblies": ["Contoso.Bookings.Domain.dll"],
      "connectionString": "Bookings",
      "domain": {
        "streams":    [ { "type": "Contoso.Bookings.Domain.BookingStream" } ],
        "events":     [ { "namespace": "Contoso.Bookings.Domain.Events" } ],
        "aggregates": [ { "type": "Contoso.Bookings.Domain.BookingState", "id": "Contoso.Bookings.Domain.BookingId" } ],
        "naming":     { "events": { "attribute": "Eventuous.EventType", "property": "EventType" }, "aggregates": "class-name" },
        "fold":       { "methods": ["When"] },
        "serializer": { "kind": "system-text-json" }
      },
      "store": {
        "events": {
          "sql": "SELECT s.stream_name, m.stream_position, m.message_type, m.json_data::text AS json_data, m.json_metadata::text AS json_metadata, (m.created AT TIME ZONE 'UTC') AS created, m.global_position FROM eventuous.messages m JOIN eventuous.streams s ON s.stream_id = m.stream_id",
          "streamId": "stream_name", "sequence": "stream_position", "type": "message_type", "payload": "json_data",
          "written": "created", "id": "global_position", "metadata": "json_metadata"
        },
        "snapshots": [
          {
            "table": "eventuous.booking_summary", "typeName": "BookingState",
            "streamId": "stream_name", "id": "booking_id", "version": "version", "appliedUpTo": "last_position",
            "payload": "state", "updated": "updated"
          }
        ]
      }
    }
  ]
}
