{
  "services": [
    {
      "name": "Accounts",
      "description": "Replace with a sentence about the service, or remove this line.",
      "assemblies": ["Contoso.Accounts.Domain.dll"],
      "connectionString": "Accounts",
      "domain": {
        "streams":    [ { "type": "Contoso.Accounts.Domain.AccountStream" } ],
        "events":     [ { "namespace": "Contoso.Accounts.Domain.Events" } ],
        "aggregates": [ { "type": "Contoso.Accounts.Domain.Account", "id": "Contoso.Accounts.Domain.AccountId" } ],
        "naming":     { "events": "class-name", "aggregates": "class-name" },
        "fold":       { "methods": ["Apply"] },
        "serializer": { "kind": "system-text-json" },
        "hidden":     ["Id"]
      },
      "store": {
        "events": {
          "table": "message_store.messages", "where": "message_store.category(stream_name) = 'account'",
          "streamId": "stream_name", "sequence": "position", "type": "type", "payload": "data",
          "written": "(time AT TIME ZONE 'UTC')", "id": "global_position", "metadata": "metadata"
        },
        "snapshots": [
          {
            "sql": "SELECT DISTINCT ON (stream_name) 'account-' || message_store.id(stream_name) AS entity_stream, message_store.id(stream_name) AS account_id, (data->>'entityVersion')::bigint + 1 AS version, (data->>'entityVersion')::bigint AS applied_up_to, (data->'entityData')::text AS entity, (time AT TIME ZONE 'UTC') AS recorded FROM message_store.messages WHERE message_store.category(stream_name) = 'account:snapshot' AND type = 'Recorded' ORDER BY stream_name, global_position DESC",
            "typeName": "Account", "streamId": "entity_stream", "id": "account_id", "version": "version", "appliedUpTo": "applied_up_to",
            "payload": "entity", "updated": "recorded"
          }
        ]
      }
    }
  ]
}
