{"version":1,"pages":[{"id":"f3j2EqvI2APiokGgbUTf","title":"About","pathname":"/","siteSpaceId":"sitesp_E1bls","description":"Learn to use Eiffel framework to create modern API's that are sustainable, robust, efficient and cloud based.","breadcrumbs":[{"label":"Overview"}]},{"id":"4Oj9TzFCahe1HPiHVmjm","title":"Cross cutting concerns","pathname":"/features/cross-cutting-concerns","siteSpaceId":"sitesp_E1bls","breadcrumbs":[{"label":"Features"}]},{"id":"jAFOwbKYFZHDtgpRopTV","title":"API response consistency","pathname":"/features/cross-cutting-concerns/api-response-consistency","siteSpaceId":"sitesp_E1bls","breadcrumbs":[{"label":"Features"},{"label":"Cross cutting concerns"}]},{"id":"8ofr7s6BIvtkqbthpB4k","title":"Global exception handling","pathname":"/features/cross-cutting-concerns/global-exception-handling","siteSpaceId":"sitesp_E1bls","breadcrumbs":[{"label":"Features"},{"label":"Cross cutting concerns"}]},{"id":"quGpBEiSCs3q8GLRLqM0","title":"Idempotency","pathname":"/features/cross-cutting-concerns/idempotency","siteSpaceId":"sitesp_E1bls","description":"IdempotentRequest Action Filter Attribute","breadcrumbs":[{"label":"Features"},{"label":"Cross cutting concerns"}]},{"id":"7MqsnBRK7mU8ZoyZa3qA","title":"Audit logging","pathname":"/features/cross-cutting-concerns/audit-logging","siteSpaceId":"sitesp_E1bls","breadcrumbs":[{"label":"Features"},{"label":"Cross cutting concerns"}]},{"id":"4gN5Oovsme6SWHDgbti3","title":"Caching","pathname":"/features/caching","siteSpaceId":"sitesp_E1bls","breadcrumbs":[{"label":"Features"}]},{"id":"IlfHYZeo1BDZxix3KNGg","title":"Configuration","pathname":"/features/caching/configuration","siteSpaceId":"sitesp_E1bls","breadcrumbs":[{"label":"Features"},{"label":"Caching"}]},{"id":"85SAYBov85lWSqk5qFhZ","title":"In-Memory","pathname":"/features/caching/configuration/in-memory","siteSpaceId":"sitesp_E1bls","breadcrumbs":[{"label":"Features"},{"label":"Caching"},{"label":"Configuration"}]},{"id":"T1llGC4skPklOXhmjL96","title":"Redis","pathname":"/features/caching/configuration/redis","siteSpaceId":"sitesp_E1bls","breadcrumbs":[{"label":"Features"},{"label":"Caching"},{"label":"Configuration"}]},{"id":"hxWbXfWTyWNXJpRxFEWJ","title":"Usage","pathname":"/features/caching/usage","siteSpaceId":"sitesp_E1bls","breadcrumbs":[{"label":"Features"},{"label":"Caching"}]},{"id":"ikpS1rXASU2a9r1EoWqR","title":"API","pathname":"/features/caching/api","siteSpaceId":"sitesp_E1bls","breadcrumbs":[{"label":"Features"},{"label":"Caching"}]},{"id":"l9GWIKauHGMfm6nSZ5yt","title":"CacheSource","pathname":"/features/caching/api/cachesource","siteSpaceId":"sitesp_E1bls","description":"CacheSource enum provides a list of supported cache sources","breadcrumbs":[{"label":"Features"},{"label":"Caching"},{"label":"API"}]},{"id":"0f0k9WiHt5prnj65z8fO","title":"InMemoryCacheOptions","pathname":"/features/caching/api/inmemorycacheoptions","siteSpaceId":"sitesp_E1bls","description":"In-Memory cache options","breadcrumbs":[{"label":"Features"},{"label":"Caching"},{"label":"API"}]},{"id":"wLJTWfqTZzKeyy1j6xTK","title":"RedisCacheOptions","pathname":"/features/caching/api/rediscacheoptions","siteSpaceId":"sitesp_E1bls","description":"Redis cache options","breadcrumbs":[{"label":"Features"},{"label":"Caching"},{"label":"API"}]},{"id":"ZXAh8TZezJf2qlwwz6GN","title":"ICacheService","pathname":"/features/caching/api/icacheservice","siteSpaceId":"sitesp_E1bls","breadcrumbs":[{"label":"Features"},{"label":"Caching"},{"label":"API"}]},{"id":"JIrlXLgmXM32XdToU6Yl","title":"ICacheServiceFactory","pathname":"/features/caching/api/icacheservicefactory","siteSpaceId":"sitesp_E1bls","description":"Cache factory resolves cache service with given index. You can use this method for both cache source but only useful when used with Redis.","breadcrumbs":[{"label":"Features"},{"label":"Caching"},{"label":"API"}]},{"id":"F3qZz4CR1RzHfI9qISkZ","title":"Localization","pathname":"/features/localization","siteSpaceId":"sitesp_E1bls","breadcrumbs":[{"label":"Features"}]},{"id":"9AupYBiRjzTBTzKVLnd2","title":"Job Processing","pathname":"/features/job-processing","siteSpaceId":"sitesp_E1bls","description":"Distributed, scalable, loosely coupled job processing","breadcrumbs":[{"label":"Features"}]},{"id":"QC0LKTwONYLKXECZKhSG","title":"Multi-Tenancy","pathname":"/features/multi-tenancy","siteSpaceId":"sitesp_E1bls","breadcrumbs":[{"label":"Features"}]},{"id":"XefMQvJk6Od7VPXQ92D8","title":"Metrics & monitoring","pathname":"/features/metrics-and-monitoring","siteSpaceId":"sitesp_E1bls","breadcrumbs":[{"label":"Features"}]},{"id":"VZr4HkLMt2LE0IFUOwAa","title":"Transactional outbox","pathname":"/features/transactional-outbox","siteSpaceId":"sitesp_E1bls","breadcrumbs":[{"label":"Features"}]},{"id":"FyFxt1Eu6QMVV99qLcnS","title":"PostgreSQL","pathname":"/features/transactional-outbox/postgresql","siteSpaceId":"sitesp_E1bls","breadcrumbs":[{"label":"Features"},{"label":"Transactional outbox"}]},{"id":"dwFx4CxwyEJMuRdUmF9y","title":"MongoDB (cluster only)","pathname":"/features/transactional-outbox/mongodb-cluster-only","siteSpaceId":"sitesp_E1bls","breadcrumbs":[{"label":"Features"},{"label":"Transactional outbox"}]},{"id":"EnRLprylWs3fPlyx2ziz","title":"Messaging","pathname":"/features/messaging","siteSpaceId":"sitesp_E1bls","breadcrumbs":[{"label":"Features"}]},{"id":"nNMMWWnHBFNO4bA4P5vG","title":"Kafka","pathname":"/features/messaging/kafka","siteSpaceId":"sitesp_E1bls","breadcrumbs":[{"label":"Features"},{"label":"Messaging"}]},{"id":"cdbNGEdFjKzXRrRhXwJy","title":"Rabbit MQ","pathname":"/features/messaging/rabbit-mq","siteSpaceId":"sitesp_E1bls","breadcrumbs":[{"label":"Features"},{"label":"Messaging"}]},{"id":"aTHWcwKyNW0yI7Lxc87i","title":"Azure Service Bus","pathname":"/features/messaging/azure-service-bus","siteSpaceId":"sitesp_E1bls","breadcrumbs":[{"label":"Features"},{"label":"Messaging"}]},{"id":"krBjZNYTRcGTXvaCRNOH","title":"Awaitable socket client","pathname":"/features/awaitable-socket-client","siteSpaceId":"sitesp_E1bls","breadcrumbs":[{"label":"Features"}]},{"id":"8xnSJLMZkBGossrOqwg1","title":"Graceful shutdown","pathname":"/features/graceful-shutdown","siteSpaceId":"sitesp_E1bls","breadcrumbs":[{"label":"Features"}]},{"id":"71zAokqC4BvbWFpsQCxR","title":"Persistence","pathname":"/fundamentals/persistence","siteSpaceId":"sitesp_E1bls","description":"Repository base class and other requirements.","breadcrumbs":[{"label":"Fundamentals"}]},{"id":"iuRf7lGuDVOKrlRAxDZx","title":"Modelling","pathname":"/fundamentals/modelling","siteSpaceId":"sitesp_E1bls","breadcrumbs":[{"label":"Fundamentals"}]},{"id":"jl85QwWaNVJk0ipou8kK","title":"Domain-Driven Design","pathname":"/principles/domain-driven-design","siteSpaceId":"sitesp_E1bls","breadcrumbs":[{"label":"Principles"}]},{"id":"TpfcRkP068N31chlIsAH","title":"Aggregates","pathname":"/principles/domain-driven-design/aggregates","siteSpaceId":"sitesp_E1bls","description":"An Aggregate is a cluster of domain objects that are treated as a single unit with regards to data changes.","breadcrumbs":[{"label":"Principles"},{"label":"Domain-Driven Design"}]},{"id":"2ROwzIJ9bc7y6eUvUN9f","title":"Entities","pathname":"/principles/domain-driven-design/entities","siteSpaceId":"sitesp_E1bls","description":"Entities are uniquely identifiable by a combination of one or more attributes or properties","breadcrumbs":[{"label":"Principles"},{"label":"Domain-Driven Design"}]},{"id":"hPc5PoUlh94dmyZq3I4l","title":"Value Objects","pathname":"/principles/domain-driven-design/value-objects","siteSpaceId":"sitesp_E1bls","breadcrumbs":[{"label":"Principles"},{"label":"Domain-Driven Design"}]},{"id":"r96FAF6JEvO5QprKgalE","title":"Domain Events","pathname":"/principles/domain-driven-design/domain-events","siteSpaceId":"sitesp_E1bls","description":"Domain Events are an integral part of Domain-Driven Design and are used to communicate changes and trigger side-effects within the domain model.","breadcrumbs":[{"label":"Principles"},{"label":"Domain-Driven Design"}]},{"id":"gGfJJCI4OXP5S7Z1gy8l","title":"Factories","pathname":"/principles/domain-driven-design/factories","siteSpaceId":"sitesp_E1bls","breadcrumbs":[{"label":"Principles"},{"label":"Domain-Driven Design"}]},{"id":"0LOZrR7E0vDwsn3r2aLL","title":"Domain Services","pathname":"/principles/domain-driven-design/domain-services","siteSpaceId":"sitesp_E1bls","breadcrumbs":[{"label":"Principles"},{"label":"Domain-Driven Design"}]},{"id":"fc3ACnLnIxy5H9lJf0Pw","title":"Business Identifiers","pathname":"/principles/domain-driven-design/business-identifiers","siteSpaceId":"sitesp_E1bls","breadcrumbs":[{"label":"Principles"},{"label":"Domain-Driven Design"}]},{"id":"X9zpwx2U7zdRJZFZU3fx","title":"Shared Kernel","pathname":"/principles/domain-driven-design/shared-kernel","siteSpaceId":"sitesp_E1bls","breadcrumbs":[{"label":"Principles"},{"label":"Domain-Driven Design"}]},{"id":"TZ5hnMgOSw4DbEJ5EAys","title":"Onion Architecture","pathname":"/principles/onion-architecture","siteSpaceId":"sitesp_E1bls","breadcrumbs":[{"label":"Principles"}]},{"id":"xepDtAo08SX1qIy9sQBD","title":"Application Layer","pathname":"/principles/onion-architecture/application-layer","siteSpaceId":"sitesp_E1bls","breadcrumbs":[{"label":"Principles"},{"label":"Onion Architecture"}]},{"id":"KCfi51oQAtD6pcqSwsVs","title":"Domain Layer","pathname":"/principles/onion-architecture/domain-layer","siteSpaceId":"sitesp_E1bls","breadcrumbs":[{"label":"Principles"},{"label":"Onion Architecture"}]},{"id":"a1bXXJdbJ6oZRK7gzzWH","title":"Infrastructure Layer","pathname":"/principles/onion-architecture/infrastructure-layer","siteSpaceId":"sitesp_E1bls","breadcrumbs":[{"label":"Principles"},{"label":"Onion Architecture"}]},{"id":"G9Nb6V3OwhMPQ5h2pG1E","title":"Anti-Corruption Layer","pathname":"/principles/onion-architecture/anti-corruption-layer","siteSpaceId":"sitesp_E1bls","breadcrumbs":[{"label":"Principles"},{"label":"Onion Architecture"}]},{"id":"Edgq2DUDU7pWboBJbZfI","title":"Modular Monolith Architecture","pathname":"/principles/modular-monolith-architecture","siteSpaceId":"sitesp_E1bls","breadcrumbs":[{"label":"Principles"}]},{"id":"btCxdoC2Maft2QU2RxK9","title":"Modules","pathname":"/principles/modular-monolith-architecture/modules","siteSpaceId":"sitesp_E1bls","breadcrumbs":[{"label":"Principles"},{"label":"Modular Monolith Architecture"}]},{"id":"y7ea1ppk412FGvvAXvGr","title":"Shared Infrastructure","pathname":"/principles/modular-monolith-architecture/shared-infrastructure","siteSpaceId":"sitesp_E1bls","breadcrumbs":[{"label":"Principles"},{"label":"Modular Monolith Architecture"}]},{"id":"MA288L7B3gan67AeQY75","title":"Microservice Architecture","pathname":"/principles/microservice-architecture","siteSpaceId":"sitesp_E1bls","breadcrumbs":[{"label":"Principles"}]},{"id":"qc1MCep4OF2WNlf2KUJ1","title":"API Gateway","pathname":"/principles/microservice-architecture/api-gateway","siteSpaceId":"sitesp_E1bls","breadcrumbs":[{"label":"Principles"},{"label":"Microservice Architecture"}]},{"id":"Xyz0ddA5iGozbvWvYJrz","title":"View Model Composition","pathname":"/principles/microservice-architecture/view-model-composition","siteSpaceId":"sitesp_E1bls","breadcrumbs":[{"label":"Principles"},{"label":"Microservice Architecture"}]},{"id":"l9OKShVjT07cvW8qHV0Z","title":"Contracts","pathname":"/principles/microservice-architecture/contracts","siteSpaceId":"sitesp_E1bls","breadcrumbs":[{"label":"Principles"},{"label":"Microservice Architecture"}]},{"id":"dXkbwqpVlGcJ19ECEKUM","title":"Domain Storytelling","pathname":"/business-aligment/domain-storytelling","siteSpaceId":"sitesp_E1bls","description":"","breadcrumbs":[{"label":"Business Aligment"}]},{"id":"v7QId8GcJEihmtxrNfSm","title":"User stories","pathname":"/business-aligment/user-stories","siteSpaceId":"sitesp_E1bls","breadcrumbs":[{"label":"Business Aligment"}]},{"id":"HAo93l1APYzbnfxt31Wq","title":"Modular Monolith","pathname":"/implementation/modular-monolith","siteSpaceId":"sitesp_E1bls","breadcrumbs":[{"label":"Implementation"}]},{"id":"5tnqUl4xw1yEZ0l3nMkk","title":"Microservices","pathname":"/implementation/microservices","siteSpaceId":"sitesp_E1bls","breadcrumbs":[{"label":"Implementation"}]},{"id":"PfEQ7Zx9szoJkOVGPMfF","title":"Unit Testing","pathname":"/testing/unit-testing","siteSpaceId":"sitesp_E1bls","breadcrumbs":[{"label":"Testing"}]},{"id":"xXQZ1Xsah8N4EEQET3xW","title":"Integration Testing","pathname":"/testing/integration-testing","siteSpaceId":"sitesp_E1bls","breadcrumbs":[{"label":"Testing"}]},{"id":"KblogFE7QJtSku8Hf2pH","title":"Contract Testing","pathname":"/testing/contract-testing","siteSpaceId":"sitesp_E1bls","breadcrumbs":[{"label":"Testing"}]},{"id":"EqjIgSPnTIJnA2u8l1b5","title":"CI/CD Pipelines","pathname":"/cloud-infrastructure/ci-cd-pipelines","siteSpaceId":"sitesp_E1bls","breadcrumbs":[{"label":"Cloud Infrastructure"}]},{"id":"sggcQJMdkTZrzBa3WUrF","title":"Docker","pathname":"/cloud-infrastructure/docker","siteSpaceId":"sitesp_E1bls","breadcrumbs":[{"label":"Cloud Infrastructure"}]},{"id":"NUYejcDVk2QKLrSSPU74","title":"Kubernates","pathname":"/cloud-infrastructure/kubernates","siteSpaceId":"sitesp_E1bls","breadcrumbs":[{"label":"Cloud Infrastructure"}]},{"id":"73hNiiHtHGmD4HlwgK5k","title":"Infrastructure as Code","pathname":"/cloud-infrastructure/infrastructure-as-code","siteSpaceId":"sitesp_E1bls","breadcrumbs":[{"label":"Cloud Infrastructure"}]}]}