gitextract_22c5k2bq/ ├── .gitignore ├── Directory.build.props ├── LICENSE ├── README.md ├── aspnet-core-clean-arch.sln ├── src/ │ ├── Application/ │ │ ├── Application.csproj │ │ ├── ICommandHandler.cs │ │ ├── IEventHandler.cs │ │ ├── IQueryHandler.cs │ │ └── UseCases/ │ │ ├── AddContentToProduct/ │ │ │ ├── AddContentToProductCommand.cs │ │ │ └── AddContentToProductCommandHandler.cs │ │ └── CreateProduct/ │ │ ├── CreateProductCommand.cs │ │ └── CreateProductCommandHandler.cs │ ├── Domain/ │ │ ├── Abstraction/ │ │ │ ├── AggregateRoot.cs │ │ │ ├── BaseDomainEvent.cs │ │ │ ├── Entity.cs │ │ │ ├── IRepository.cs │ │ │ ├── InstanceEventRouter.cs │ │ │ └── ValueObject.cs │ │ ├── BusinessException.cs │ │ ├── Domain.csproj │ │ └── ProductContext/ │ │ ├── AttributeRef.cs │ │ ├── BrandRef.cs │ │ ├── CategoryRef.cs │ │ ├── Content.cs │ │ ├── Events/ │ │ │ ├── AttributeAddedToProduct.cs │ │ │ ├── BaseProductEvent.cs │ │ │ ├── ContentAddedToProduct.cs │ │ │ ├── ImageAddedToProduct.cs │ │ │ ├── ProductApproved.cs │ │ │ ├── ProductCreated.cs │ │ │ └── VariantAddedToProduct.cs │ │ ├── IProductRepository.cs │ │ ├── ImageRef.cs │ │ ├── Product.cs │ │ └── Variant.cs │ ├── Infrastructure/ │ │ ├── Infrastructure.csproj │ │ ├── Logging/ │ │ │ └── WebHostExtensions.cs │ │ ├── Messaging/ │ │ │ └── Mediator/ │ │ │ ├── IMediator.cs │ │ │ ├── Mediator.cs │ │ │ └── ServiceCollectionExtensions.cs │ │ ├── Persistence/ │ │ │ ├── AggregateNotFoundException.cs │ │ │ ├── ConcurrencyException.cs │ │ │ ├── EventStoreProductRepository.cs │ │ │ ├── IEventStore.cs │ │ │ ├── InMemory/ │ │ │ │ ├── EventStore/ │ │ │ │ │ └── InMemoryEventStore.cs │ │ │ │ └── ServiceCollectionExtensions.cs │ │ │ └── Mongo/ │ │ │ ├── EventStore/ │ │ │ │ └── MongoDbEventStore.cs │ │ │ ├── IMongoDbContext.cs │ │ │ ├── MongoDbContext.cs │ │ │ ├── MongoDbProductRepository.cs │ │ │ ├── MongoDbProvider.cs │ │ │ ├── MongoDbRepository.cs │ │ │ ├── MongoSettings.cs │ │ │ └── ServiceCollectionExtensions.cs │ │ └── ServiceCollectionExtensions.cs │ └── WebApi/ │ ├── Extensions/ │ │ ├── ApplicationBuilderExtensions.cs │ │ ├── OriginalNameCamelCaseContractResolver.cs │ │ └── ServiceCollectionExtensions.cs │ ├── Program.cs │ ├── Properties/ │ │ └── launchSettings.json │ ├── Startup.cs │ ├── UseCases/ │ │ ├── AddContentToProduct/ │ │ │ ├── AddContentToProductCommandValidator.cs │ │ │ └── ProductController.cs │ │ └── CreateProduct/ │ │ ├── CreateProductCommandValidator.cs │ │ └── ProductsController.cs │ ├── WebApi.csproj │ ├── app.config │ ├── appsettings.Development.json │ ├── appsettings.Production.json │ ├── appsettings.Staging.json │ └── appsettings.json └── test/ ├── Application.Tests/ │ ├── Application.Tests.csproj │ ├── CommandHandlerTestBase.cs │ └── CreateProductCommandHandlerTests.cs ├── Domain.Specs/ │ ├── Domain.Specs.csproj │ └── ProductSpecs/ │ ├── WhenContentAddedToProduct.cs │ ├── WhenCreated.cs │ ├── WhenProductApproved.cs │ └── WhenVariantAddedToProduct.cs ├── Infrastructure.Tests/ │ ├── Infrastructure.Tests.csproj │ └── MediatorTests.cs └── TestBase/ ├── InMemoryDatabaseFixture.cs ├── ScenarioFor.cs ├── ScenarioForExisting.cs ├── SpecBase.cs ├── TestBase.csproj ├── TestBaseWithInMemoryDb.cs └── TestBaseWithIoC.cs