gitextract_sty9z65e/ ├── .github/ │ └── workflows/ │ └── buildPipeline.yml ├── .gitignore ├── .nuke/ │ ├── build.schema.json │ └── parameters.json ├── LICENSE ├── README.md ├── azure-pipelines.yml ├── build/ │ ├── .editorconfig │ ├── Build.cs │ ├── BuildIntegrationTests.cs │ ├── Configuration.cs │ ├── Database.cs │ ├── Directory.Build.props │ ├── Directory.Build.targets │ ├── SUTCreator.cs │ ├── Utils/ │ │ └── SqlReadinessChecker.cs │ ├── _build.csproj │ └── _build.csproj.DotSettings ├── build.cmd ├── build.ps1 ├── build.sh ├── docker-compose.yml ├── docs/ │ ├── C4/ │ │ ├── c1_system_context.puml │ │ ├── c2_container.puml │ │ ├── c3_components.puml │ │ ├── c3_components_module.puml │ │ └── c4_class.puml │ ├── PlantUML/ │ │ ├── Commenting_Conceptual_Model.puml │ │ └── Conceptual_Model.puml │ ├── Project/ │ │ └── MyMeetings.vpp │ ├── architecture-decision-log/ │ │ ├── 0001-record-architecture-decisions.md │ │ ├── 0002-use_modular-monolith-system-architecture.md │ │ ├── 0003-use_dotnetcore_and_csharp.md │ │ ├── 0004-divide-the-system-into-4-modules.md │ │ ├── 0005-create-one-rest-api-module.md │ │ ├── 0006-create-facade-between-api-and-business-module.md │ │ ├── 0007-use-cqrs-architectural-style.md │ │ ├── 0008-allow-return-result-after-command-processing.md │ │ ├── 0009-use-2-layered-architectural-style-for-reads.md │ │ ├── 0010-use-clean-architecture-for-writes.md │ │ ├── 0011-create-rich-domain-models.md │ │ ├── 0012-use-domain-driven-design-tactical-patterns.md │ │ ├── 0013-protect-business-invariants-using-exceptions.md │ │ ├── 0014-event-driven-communication-between-modules.md │ │ ├── 0015-use-in-memory-events-bus.md │ │ ├── 0016-create-ioc-container-per-module.md │ │ └── 0017-implement-archictecture-tests.md │ ├── catalog-of-terms/ │ │ ├── Aggregate-DDD/ │ │ │ ├── README.md │ │ │ └── aggregate-ddd.puml │ │ ├── Command/ │ │ │ ├── README.md │ │ │ └── command.puml │ │ ├── Decorator-Pattern/ │ │ │ ├── README.md │ │ │ └── decorator-pattern.puml │ │ ├── Dependency-Injection/ │ │ │ ├── README.md │ │ │ └── dependency-injection.puml │ │ ├── Domain-Event/ │ │ │ ├── README.md │ │ │ └── domain-event.puml │ │ ├── Entity-DDD/ │ │ │ ├── README.md │ │ │ └── entity-ddd.puml │ │ ├── Event/ │ │ │ └── README.md │ │ ├── Event-Driven-Architecture/ │ │ │ └── README.md │ │ ├── Event-Sourcing/ │ │ │ └── README.md │ │ ├── Event-Storming/ │ │ │ └── README.md │ │ ├── Integration-Event/ │ │ │ └── README.md │ │ ├── README.md │ │ ├── Strategy-Pattern/ │ │ │ ├── README.md │ │ │ └── strategy-pattern.puml │ │ └── ValueObject-DDD/ │ │ ├── README.md │ │ └── value-object-ddd.puml │ └── mutation-tests-reports/ │ └── mutation-report.html ├── runIntegrationTests.cmd └── src/ ├── .dockerignore ├── .editorconfig ├── API/ │ ├── CompanyName.MyMeetings.API/ │ │ ├── CompanyName.MyMeetings.API.csproj │ │ ├── Configuration/ │ │ │ ├── Authorization/ │ │ │ │ ├── AttributeAuthorizationHandler.cs │ │ │ │ ├── AuthorizationChecker.cs │ │ │ │ ├── HasPermissionAttribute.cs │ │ │ │ ├── HasPermissionAuthorizationHandler.cs │ │ │ │ ├── HasPermissionAuthorizationRequirement.cs │ │ │ │ └── NoPermissionRequiredAttribute.cs │ │ │ ├── ExecutionContext/ │ │ │ │ ├── CorrelationMiddleware.cs │ │ │ │ └── ExecutionContextAccessor.cs │ │ │ ├── Extensions/ │ │ │ │ └── SwaggerExtensions.cs │ │ │ └── Validation/ │ │ │ ├── BusinessRuleValidationExceptionProblemDetails.cs │ │ │ └── InvalidCommandProblemDetails.cs │ │ ├── Modules/ │ │ │ ├── Administration/ │ │ │ │ ├── AdministrationAutofacModule.cs │ │ │ │ ├── AdministrationPermissions.cs │ │ │ │ └── MeetingGroupProposals/ │ │ │ │ └── MeetingGroupProposalsController.cs │ │ │ ├── Meetings/ │ │ │ │ ├── Countries/ │ │ │ │ │ └── CountriesController.cs │ │ │ │ ├── MeetingCommentingConfiguration/ │ │ │ │ │ └── MeetingCommentingConfigurationController.cs │ │ │ │ ├── MeetingComments/ │ │ │ │ │ ├── AddMeetingCommentRequest.cs │ │ │ │ │ ├── EditMeetingCommentRequest.cs │ │ │ │ │ └── MeetingCommentsController.cs │ │ │ │ ├── MeetingGroupProposals/ │ │ │ │ │ ├── MeetingGroupProposalsController.cs │ │ │ │ │ └── ProposeMeetingGroupRequest.cs │ │ │ │ ├── MeetingGroups/ │ │ │ │ │ ├── CreateNewMeetingGroupRequest.cs │ │ │ │ │ ├── EditMeetingGroupGeneralAttributesRequest.cs │ │ │ │ │ └── MeetingGroupsController.cs │ │ │ │ ├── Meetings/ │ │ │ │ │ ├── AddMeetingAttendeeRequest.cs │ │ │ │ │ ├── ChangeMeetingMainAttributesRequest.cs │ │ │ │ │ ├── CreateMeetingRequest.cs │ │ │ │ │ ├── MeetingsController.cs │ │ │ │ │ ├── RemoveMeetingAttendeeRequest.cs │ │ │ │ │ ├── SetMeetingAttendeeRequest.cs │ │ │ │ │ └── SetMeetingHostRequest.cs │ │ │ │ ├── MeetingsAutofacModule.cs │ │ │ │ └── MeetingsPermissions.cs │ │ │ ├── Payments/ │ │ │ │ ├── MeetingFees/ │ │ │ │ │ ├── CreateMeetingFeePaymentRequest.cs │ │ │ │ │ ├── MeetingFeePaymentsController.cs │ │ │ │ │ └── RegisterMeetingFeePaymentRequest.cs │ │ │ │ ├── Payers/ │ │ │ │ │ └── PayersController.cs │ │ │ │ ├── PaymentsAutofacModule.cs │ │ │ │ ├── PaymentsPermissions.cs │ │ │ │ ├── PriceListItems/ │ │ │ │ │ ├── ChangePriceListItemAttributesRequest.cs │ │ │ │ │ ├── CreatePriceListItemRequest.cs │ │ │ │ │ ├── GetPriceListItemRequest.cs │ │ │ │ │ └── PriceListItemsController.cs │ │ │ │ ├── RegisterSubscriptionRenewalPaymentRequest.cs │ │ │ │ ├── SubscriptionRenewalsController.cs │ │ │ │ └── Subscriptions/ │ │ │ │ ├── BuySubscriptionRequest.cs │ │ │ │ ├── RegisterSubscriptionPaymentRequest.cs │ │ │ │ ├── RenewSubscriptionRequest.cs │ │ │ │ ├── SubscriptionPaymentsController.cs │ │ │ │ └── SubscriptionsController.cs │ │ │ └── UserAccess/ │ │ │ ├── AuthenticatedUserController.cs │ │ │ ├── EmailsController.cs │ │ │ ├── RegisterNewUserRequest.cs │ │ │ ├── UserAccessAutofacModule.cs │ │ │ └── UserRegistrationsController.cs │ │ ├── Program.cs │ │ ├── Properties/ │ │ │ └── launchSettings.json │ │ ├── Startup.cs │ │ ├── appsettings.Development.json │ │ ├── appsettings.Production.json │ │ ├── appsettings.json │ │ ├── entrypoint.sh │ │ └── tempkey.rsa │ └── RequestExamples/ │ ├── Authentication.http │ ├── Users.http │ └── http-client.env.json ├── BuildingBlocks/ │ ├── Application/ │ │ ├── CompanyName.MyMeetings.BuildingBlocks.Application.csproj │ │ ├── Data/ │ │ │ └── ISqlConnectionFactory.cs │ │ ├── Emails/ │ │ │ ├── EmailMessage.cs │ │ │ └── IEmailSender.cs │ │ ├── Events/ │ │ │ ├── DomainNotificationBase.cs │ │ │ └── IDomainEventNotification.cs │ │ ├── IExecutionContextAccessor.cs │ │ ├── InvalidCommandException.cs │ │ ├── Outbox/ │ │ │ ├── IOutbox.cs │ │ │ └── OutboxMessage.cs │ │ └── Queries/ │ │ ├── IPagedQuery.cs │ │ ├── PageData.cs │ │ └── PagedQueryHelper.cs │ ├── Domain/ │ │ ├── BusinessRuleValidationException.cs │ │ ├── CompanyName.MyMeetings.BuildingBlocks.Domain.csproj │ │ ├── DomainEventBase.cs │ │ ├── Entity.cs │ │ ├── IAggregateRoot.cs │ │ ├── IBusinessRule.cs │ │ ├── IDomainEvent.cs │ │ ├── IgnoreMemberAttribute.cs │ │ ├── TypedIdValueBase.cs │ │ └── ValueObject.cs │ ├── Infrastructure/ │ │ ├── BiDictionary.cs │ │ ├── CompanyName.MyMeetings.BuildingBlocks.Infrastructure.csproj │ │ ├── DomainEventsDispatching/ │ │ │ ├── DomainEventsAccessor.cs │ │ │ ├── DomainEventsDispatcher.cs │ │ │ ├── DomainEventsDispatcherNotificationHandlerDecorator.cs │ │ │ ├── DomainNotificationsMapper.cs │ │ │ ├── IDomainEventsAccessor.cs │ │ │ ├── IDomainEventsDispatcher.cs │ │ │ ├── IDomainNotificationsMapper.cs │ │ │ └── UnitOfWorkCommandHandlerDecorator.cs │ │ ├── Emails/ │ │ │ ├── EmailSender.cs │ │ │ └── EmailsConfiguration.cs │ │ ├── EventBus/ │ │ │ ├── IEventsBus.cs │ │ │ ├── IIntegrationEventHandler.cs │ │ │ ├── InMemoryEventBus.cs │ │ │ ├── InMemoryEventBusClient.cs │ │ │ └── IntegrationEvent.cs │ │ ├── IUnitOfWork.cs │ │ ├── Inbox/ │ │ │ └── InboxMessage.cs │ │ ├── InternalCommands/ │ │ │ ├── IInternalCommandsMapper.cs │ │ │ ├── InternalCommand.cs │ │ │ └── InternalCommandsMapper.cs │ │ ├── Serialization/ │ │ │ └── AllPropertiesContractResolver.cs │ │ ├── ServiceProviderWrapper.cs │ │ ├── SqlConnectionFactory.cs │ │ ├── StronglyTypedIdValueConverterSelector.cs │ │ ├── TypedIdValueConverter.cs │ │ └── UnitOfWork.cs │ └── Tests/ │ ├── Application.UnitTests/ │ │ ├── CompanyName.MyMeetings.BuildingBlocks.Application.UnitTests.csproj │ │ └── Queries/ │ │ └── PagedQueryHelperTests.cs │ └── IntegrationTests/ │ ├── CompanyName.MyMeetings.BuildingBlocks.IntegrationTests.csproj │ ├── EnvironmentVariablesProvider.cs │ └── Probing/ │ ├── AssertErrorException.cs │ ├── IProbe.cs │ ├── Poller.cs │ └── Timeout.cs ├── CompanyName.MyMeetings.sln ├── Database/ │ ├── .dockerignore │ ├── ClearDatabase.sql │ ├── CompanyName.MyMeetings.Database/ │ │ ├── CompanyName.MyMeetings.Database.sqlproj │ │ ├── Scripts/ │ │ │ ├── ClearDatabase.sql │ │ │ ├── CreateDatabase.sql │ │ │ ├── CreateDatabase_Linux.sql │ │ │ ├── CreateDatabase_Windows.sql │ │ │ ├── CreateStructure.sql │ │ │ ├── Migrations/ │ │ │ │ └── 1_0_0_0/ │ │ │ │ ├── 0001_initial_structure.sql │ │ │ │ ├── 0002_change_meeting_comments_edit_date_type_and_add_meeting_comments_view.sql │ │ │ │ ├── 0003_add_meetings_countries_table.sql │ │ │ │ ├── 0004_add_meeting_commenting_configurations_table.sql │ │ │ │ ├── 0005_add_payer_id_to_subcription_details_view.sql │ │ │ │ ├── 0006_add_member_meeting_groups_view.sql │ │ │ │ ├── 0007_add_meeting_attendees_view.sql │ │ │ │ ├── 0008_add_meeting_details_view.sql │ │ │ │ ├── 0009_add_mock_emails_table.sql │ │ │ │ ├── 0010_add_member_meetings_view.sql │ │ │ │ ├── 0011_add_likes_count_to_meeting_comments_table.sql │ │ │ │ ├── 0012_add_likes_count_to_meeting_comments_view.sql │ │ │ │ ├── 0013_add_meeting_member_comment_likes_table.sql │ │ │ │ └── 0014_add_missing_tables_for_registrations.sql │ │ │ ├── SeedDatabase.sql │ │ │ └── Seeds/ │ │ │ └── 0001_SeedCountries.sql │ │ └── Structure/ │ │ ├── Security/ │ │ │ └── Schemas.sql │ │ ├── administration/ │ │ │ ├── Tables/ │ │ │ │ ├── InboxMessages.sql │ │ │ │ ├── InternalCommands.sql │ │ │ │ ├── MeetingGroupProposals.sql │ │ │ │ ├── Members.sql │ │ │ │ └── OutboxMessages.sql │ │ │ └── Views/ │ │ │ ├── v_MeetingGroupProposals.sql │ │ │ └── v_Members.sql │ │ ├── app/ │ │ │ └── Tables/ │ │ │ ├── Emails.sql │ │ │ └── MigrationsJournal.sql │ │ ├── meetings/ │ │ │ ├── Tables/ │ │ │ │ ├── Countries.sql │ │ │ │ ├── InboxMessages.sql │ │ │ │ ├── InternalCommands.sql │ │ │ │ ├── MeetingAttendees.sql │ │ │ │ ├── MeetingCommentingConfigurations.sql │ │ │ │ ├── MeetingComments.sql │ │ │ │ ├── MeetingGroupMembers.sql │ │ │ │ ├── MeetingGroupProposals.sql │ │ │ │ ├── MeetingGroups.sql │ │ │ │ ├── MeetingMemberCommentLikes.sql │ │ │ │ ├── MeetingNotAttendees.sql │ │ │ │ ├── MeetingWaitlistMembers.sql │ │ │ │ ├── Meetings.sql │ │ │ │ ├── MemberSubscriptions.sql │ │ │ │ ├── Members.sql │ │ │ │ └── OutboxMessages.sql │ │ │ └── Views/ │ │ │ ├── v_Countries.sql │ │ │ ├── v_MeetingAttendees.sql │ │ │ ├── v_MeetingComments.sql │ │ │ ├── v_MeetingDetails.sql │ │ │ ├── v_MeetingGroupMembers.sql │ │ │ ├── v_MeetingGroupProposals.sql │ │ │ ├── v_MeetingGroups.sql │ │ │ ├── v_Meetings.sql │ │ │ ├── v_MemberMeetingGroups.sql │ │ │ ├── v_MemberMeetings.sql │ │ │ └── v_Members.sql │ │ ├── payments/ │ │ │ ├── Tables/ │ │ │ │ ├── InboxMessages.sql │ │ │ │ ├── InternalCommands.sql │ │ │ │ ├── MeetingFees.sql │ │ │ │ ├── Messages.sql │ │ │ │ ├── OutboxMessages.sql │ │ │ │ ├── Payers.sql │ │ │ │ ├── PriceListItems.sql │ │ │ │ ├── Streams.sql │ │ │ │ ├── SubscriptionCheckpoints.sql │ │ │ │ ├── SubscriptionDetails.sql │ │ │ │ └── SubscriptionPayments.sql │ │ │ └── Types/ │ │ │ └── NewStreamMessages.sql │ │ ├── registrations/ │ │ │ ├── Tables/ │ │ │ │ ├── InboxMessages.sql │ │ │ │ ├── InternalCommands.sql │ │ │ │ ├── OutboxMessages.sql │ │ │ │ └── UserRegistrations.sql │ │ │ └── Views/ │ │ │ └── v_UserRegistrations.sql │ │ └── users/ │ │ ├── Tables/ │ │ │ ├── InboxMessages.sql │ │ │ ├── InternalCommands.sql │ │ │ ├── OutboxMessages.sql │ │ │ ├── Permissions.sql │ │ │ ├── RolesToPermissions.sql │ │ │ ├── UserRoles.sql │ │ │ └── Users.sql │ │ └── Views/ │ │ ├── v_UserPermissions.sql │ │ ├── v_UserRoles.sql │ │ └── v_Users.sql │ ├── CompanyName.MyMeetings.Database.Build/ │ │ └── CompanyName.MyMeetings.Database.Build.csproj │ ├── DatabaseMigrator/ │ │ ├── .dockerignore │ │ ├── DatabaseMigrator.csproj │ │ ├── Program.cs │ │ └── SerilogUpgradeLog.cs │ ├── Dockerfile │ ├── Dockerfile_DatabaseMigrator │ ├── InitializeDatabase.sql │ ├── entrypoint.sh │ ├── entrypoint_DatabaseMigrator.sh │ └── wait-for-it.sh ├── Directory.Build.props ├── Directory.Build.targets ├── Directory.Packages.props ├── Dockerfile ├── Modules/ │ ├── Administration/ │ │ ├── Application/ │ │ │ ├── CompanyName.MyMeetings.Modules.Administration.Application.csproj │ │ │ ├── Configuration/ │ │ │ │ ├── Commands/ │ │ │ │ │ ├── ICommandHandler.cs │ │ │ │ │ ├── ICommandsScheduler.cs │ │ │ │ │ └── InternalCommandBase.cs │ │ │ │ └── Queries/ │ │ │ │ └── IQueryHandler.cs │ │ │ ├── Contracts/ │ │ │ │ ├── CommandBase.cs │ │ │ │ ├── IAdministrationModule.cs │ │ │ │ ├── ICommand.cs │ │ │ │ ├── IQuery.cs │ │ │ │ ├── IRecurringCommand.cs │ │ │ │ └── QueryBase.cs │ │ │ ├── MeetingGroupProposals/ │ │ │ │ ├── AcceptMeetingGroupProposal/ │ │ │ │ │ ├── AcceptMeetingGroupProposalCommand.cs │ │ │ │ │ ├── AcceptMeetingGroupProposalCommandHandler.cs │ │ │ │ │ ├── MeetingGroupProposalAcceptedNotification.cs │ │ │ │ │ └── MeetingGroupProposalAcceptedNotificationHandler.cs │ │ │ │ ├── GetMeetingGroupProposal/ │ │ │ │ │ ├── GetMeetingGroupProposalQuery.cs │ │ │ │ │ ├── GetMeetingGroupProposalQueryHandler.cs │ │ │ │ │ └── MeetingGroupProposalDto.cs │ │ │ │ ├── GetMeetingGroupProposals/ │ │ │ │ │ ├── GetMeetingGroupProposalsQuery.cs │ │ │ │ │ └── GetMeetingGroupProposalsQueryHandler.cs │ │ │ │ ├── MeetingGroupProposedIntegrationEventHandler.cs │ │ │ │ └── RequestMeetingGroupProposalVerification/ │ │ │ │ ├── RequestMeetingGroupProposalVerificationCommand.cs │ │ │ │ └── RequestMeetingGroupProposalVerificationCommandHandler.cs │ │ │ └── Members/ │ │ │ ├── CreateMember/ │ │ │ │ ├── CreateMemberCommand.cs │ │ │ │ └── CreateMemberCommandHandler.cs │ │ │ ├── GetMember/ │ │ │ │ ├── GetMemberQuery.cs │ │ │ │ ├── GetMemberQueryHandler.cs │ │ │ │ └── MemberDto.cs │ │ │ └── NewUserRegisteredIntegrationEventHandler.cs │ │ ├── Domain/ │ │ │ ├── CompanyName.MyMeetings.Modules.Administration.Domain.csproj │ │ │ ├── MeetingGroupProposals/ │ │ │ │ ├── Events/ │ │ │ │ │ ├── MeetingGroupProposalAcceptedDomainEvent.cs │ │ │ │ │ ├── MeetingGroupProposalRejectedDomainEvent.cs │ │ │ │ │ └── MeetingGroupProposalVerificationRequestedDomainEvent.cs │ │ │ │ ├── IMeetingGroupProposalRepository.cs │ │ │ │ ├── MeetingGroupLocation.cs │ │ │ │ ├── MeetingGroupProposal.cs │ │ │ │ ├── MeetingGroupProposalDecision.cs │ │ │ │ ├── MeetingGroupProposalId.cs │ │ │ │ ├── MeetingGroupProposalStatus.cs │ │ │ │ └── Rules/ │ │ │ │ ├── MeetingGroupProposalCanBeVerifiedOnceRule.cs │ │ │ │ └── MeetingGroupProposalRejectionMustHaveAReasonRule.cs │ │ │ ├── Members/ │ │ │ │ ├── Events/ │ │ │ │ │ └── MemberCreatedDomainEvent.cs │ │ │ │ ├── IMemberRepository.cs │ │ │ │ ├── Member.cs │ │ │ │ └── MemberId.cs │ │ │ └── Users/ │ │ │ ├── IUserContext.cs │ │ │ └── UserId.cs │ │ ├── Infrastructure/ │ │ │ ├── AdministrationContext.cs │ │ │ ├── AdministrationModule.cs │ │ │ ├── CompanyName.MyMeetings.Modules.Administration.Infrastructure.csproj │ │ │ ├── Configuration/ │ │ │ │ ├── AdministrationCompositionRoot.cs │ │ │ │ ├── AdministrationStartup.cs │ │ │ │ ├── AllConstructorFinder.cs │ │ │ │ ├── Assemblies.cs │ │ │ │ ├── Authentication/ │ │ │ │ │ └── AuthenticationModule.cs │ │ │ │ ├── DataAccess/ │ │ │ │ │ └── DataAccessModule.cs │ │ │ │ ├── EventsBus/ │ │ │ │ │ ├── EventsBusModule.cs │ │ │ │ │ ├── EventsBusStartup.cs │ │ │ │ │ └── IntegrationEventGenericHandler.cs │ │ │ │ ├── Logging/ │ │ │ │ │ └── LoggingModule.cs │ │ │ │ ├── Mediation/ │ │ │ │ │ └── MediatorModule.cs │ │ │ │ ├── Processing/ │ │ │ │ │ ├── CommandsExecutor.cs │ │ │ │ │ ├── IRecurringCommand.cs │ │ │ │ │ ├── Inbox/ │ │ │ │ │ │ ├── InboxMessageDto.cs │ │ │ │ │ │ ├── ProcessInboxCommand.cs │ │ │ │ │ │ ├── ProcessInboxCommandHandler.cs │ │ │ │ │ │ └── ProcessInboxJob.cs │ │ │ │ │ ├── InternalCommands/ │ │ │ │ │ │ ├── CommandsScheduler.cs │ │ │ │ │ │ ├── InternalCommandsModule.cs │ │ │ │ │ │ ├── ProcessInternalCommandsCommand.cs │ │ │ │ │ │ ├── ProcessInternalCommandsCommandHandler.cs │ │ │ │ │ │ └── ProcessInternalCommandsJob.cs │ │ │ │ │ ├── LoggingCommandHandlerDecorator.cs │ │ │ │ │ ├── LoggingCommandHandlerWithResultDecorator.cs │ │ │ │ │ ├── Outbox/ │ │ │ │ │ │ ├── OutboxMessageDto.cs │ │ │ │ │ │ ├── OutboxModule.cs │ │ │ │ │ │ ├── ProcessOutboxCommand.cs │ │ │ │ │ │ ├── ProcessOutboxCommandHandler.cs │ │ │ │ │ │ └── ProcessOutboxJob.cs │ │ │ │ │ ├── ProcessingModule.cs │ │ │ │ │ ├── UnitOfWorkCommandHandlerDecorator.cs │ │ │ │ │ ├── UnitOfWorkCommandHandlerWithResultDecorator.cs │ │ │ │ │ ├── ValidationCommandHandlerDecorator.cs │ │ │ │ │ └── ValidationCommandHandlerWithResultDecorator.cs │ │ │ │ ├── Quartz/ │ │ │ │ │ ├── QuartzModule.cs │ │ │ │ │ ├── QuartzStartup.cs │ │ │ │ │ └── SerilogLogProvider.cs │ │ │ │ └── Users/ │ │ │ │ └── UserContext.cs │ │ │ ├── Domain/ │ │ │ │ ├── MeetingGroupProposals/ │ │ │ │ │ ├── MeetingGroupProposalEntityTypeConfiguration.cs │ │ │ │ │ └── MeetingGroupProposalRepository.cs │ │ │ │ └── Members/ │ │ │ │ ├── MemberEntityTypeConfiguration.cs │ │ │ │ └── MemberRepository.cs │ │ │ ├── InternalCommands/ │ │ │ │ └── InternalCommandEntityTypeConfiguration.cs │ │ │ └── Outbox/ │ │ │ ├── OutboxAccessor.cs │ │ │ └── OutboxMessageEntityTypeConfiguration.cs │ │ ├── IntegrationEvents/ │ │ │ ├── CompanyName.MyMeetings.Modules.Administration.IntegrationEvents.csproj │ │ │ └── MeetingGroupProposals/ │ │ │ └── MeetingGroupProposalAcceptedIntegrationEvent.cs │ │ └── Tests/ │ │ ├── ArchTests/ │ │ │ ├── Application/ │ │ │ │ └── ApplicationTests.cs │ │ │ ├── CompanyName.MyMeetings.Modules.Administration.ArchTests.csproj │ │ │ ├── Domain/ │ │ │ │ └── DomainTests.cs │ │ │ ├── Module/ │ │ │ │ └── LayersTests.cs │ │ │ └── SeedWork/ │ │ │ └── TestBase.cs │ │ ├── IntegrationTests/ │ │ │ ├── AssemblyInfo.cs │ │ │ ├── CompanyName.MyMeetings.Modules.Administration.IntegrationTests.csproj │ │ │ ├── MeetingGroupProposals/ │ │ │ │ ├── MeetingGroupProposalSampleData.cs │ │ │ │ └── MeetingGroupProposalTests.cs │ │ │ ├── Members/ │ │ │ │ ├── CreateMemberTests.cs │ │ │ │ └── MemberSampleData.cs │ │ │ └── SeedWork/ │ │ │ ├── ExecutionContextMock.cs │ │ │ ├── OutboxMessagesHelper.cs │ │ │ └── TestBase.cs │ │ └── UnitTests/ │ │ ├── CompanyName.MyMeetings.Modules.Administration.Domain.UnitTests.csproj │ │ ├── MeetingGroupProposals/ │ │ │ └── MeetingGroupProposalTests.cs │ │ ├── Members/ │ │ │ └── MemberTests.cs │ │ └── SeedWork/ │ │ ├── DomainEventsTestHelper.cs │ │ └── TestBase.cs │ ├── Meetings/ │ │ ├── Application/ │ │ │ ├── CompanyName.MyMeetings.Modules.Meetings.Application.csproj │ │ │ ├── Configuration/ │ │ │ │ ├── Commands/ │ │ │ │ │ ├── ICommandHandler.cs │ │ │ │ │ ├── ICommandsScheduler.cs │ │ │ │ │ └── InternalCommandBase.cs │ │ │ │ └── Queries/ │ │ │ │ └── IQueryHandler.cs │ │ │ ├── Contracts/ │ │ │ │ ├── CommandBase.cs │ │ │ │ ├── ICommand.cs │ │ │ │ ├── IMeetingsModule.cs │ │ │ │ ├── IQuery.cs │ │ │ │ ├── IRecurringCommand.cs │ │ │ │ └── QueryBase.cs │ │ │ ├── Countries/ │ │ │ │ ├── CountryDto.cs │ │ │ │ ├── GetAllCountriesQuery.cs │ │ │ │ └── GetAllCountriesQueryHandler.cs │ │ │ ├── MeetingCommentingConfigurations/ │ │ │ │ ├── DisableMeetingCommentingConfiguration/ │ │ │ │ │ ├── DisableMeetingCommentingConfigurationCommand.cs │ │ │ │ │ └── DisableMeetingCommentingConfigurationCommandHandler.cs │ │ │ │ ├── EnableMeetingCommentingConfiguration/ │ │ │ │ │ ├── EnableMeetingCommentingConfigurationCommand.cs │ │ │ │ │ └── EnableMeetingCommentingConfigurationCommandHandler.cs │ │ │ │ ├── GetMeetingCommentingConfiguration/ │ │ │ │ │ ├── GetMeetingCommentingConfigurationQuery.cs │ │ │ │ │ ├── GetMeetingCommentingConfigurationQueryHandler.cs │ │ │ │ │ └── MeetingCommentingConfigurationDto.cs │ │ │ │ └── MeetingCreatedEventHandler.cs │ │ │ ├── MeetingComments/ │ │ │ │ ├── AddMeetingComment/ │ │ │ │ │ ├── AddMeetingCommentCommand.cs │ │ │ │ │ ├── AddMeetingCommentCommandHandler.cs │ │ │ │ │ └── AddMeetingCommentCommandValidator.cs │ │ │ │ ├── AddMeetingCommentLike/ │ │ │ │ │ ├── AddMeetingCommentLikeCommand.cs │ │ │ │ │ └── AddMeetingCommentLikeCommandHandler.cs │ │ │ │ ├── AddMeetingCommentReply/ │ │ │ │ │ ├── AddReplyToMeetingCommentCommand.cs │ │ │ │ │ └── AddReplyToMeetingCommentCommandHandler.cs │ │ │ │ ├── EditMeetingComment/ │ │ │ │ │ ├── EditMeetingCommentCommand.cs │ │ │ │ │ ├── EditMeetingCommentCommandHandler.cs │ │ │ │ │ └── EditMeetingCommentCommandValidator.cs │ │ │ │ ├── GetMeetingCommentLikers/ │ │ │ │ │ ├── GetMeetingCommentLikersQuery.cs │ │ │ │ │ ├── GetMeetingCommentLikersQueryHandler.cs │ │ │ │ │ └── MeetingCommentLikerDto.cs │ │ │ │ ├── GetMeetingComments/ │ │ │ │ │ ├── GetMeetingCommentsQuery.cs │ │ │ │ │ ├── GetMeetingCommentsQueryHandler.cs │ │ │ │ │ └── MeetingCommentDto.cs │ │ │ │ ├── MeetingCommentLikedNotification.cs │ │ │ │ ├── MeetingCommentLikedNotificationHandler.cs │ │ │ │ ├── MeetingCommentUnlikeNotificationHandler.cs │ │ │ │ ├── MeetingCommentUnlikedNotification.cs │ │ │ │ ├── RemoveMeetingComment/ │ │ │ │ │ ├── RemoveMeetingCommentCommand.cs │ │ │ │ │ └── RemoveMeetingCommentCommandHandler.cs │ │ │ │ └── RemoveMeetingCommentLike/ │ │ │ │ ├── RemoveMeetingCommentLikeCommand.cs │ │ │ │ └── RemoveMeetingCommentLikeCommandHandler.cs │ │ │ ├── MeetingGroupProposals/ │ │ │ │ ├── AcceptMeetingGroupProposal/ │ │ │ │ │ ├── AcceptMeetingGroupProposalCommand.cs │ │ │ │ │ ├── AcceptMeetingGroupProposalCommandHandler.cs │ │ │ │ │ ├── AcceptMeetingGroupProposalCommandValidator.cs │ │ │ │ │ ├── MeetingGroupProposalAcceptedNotification.cs │ │ │ │ │ └── MeetingGroupProposalAcceptedNotificationHandler.cs │ │ │ │ ├── GetAllMeetingGroupProposals/ │ │ │ │ │ ├── GetAllMeetingGroupProposalsQuery.cs │ │ │ │ │ └── GetAllMeetingGroupProposalsQueryHandler.cs │ │ │ │ ├── GetMeetingGroupProposal/ │ │ │ │ │ ├── GetMeetingGroupProposalQuery.cs │ │ │ │ │ ├── GetMeetingGroupProposalQueryHandler.cs │ │ │ │ │ └── MeetingGroupProposalDto.cs │ │ │ │ ├── GetMemberMeetingGroupProposals/ │ │ │ │ │ ├── GetMemberMeetingGroupProposalsQuery.cs │ │ │ │ │ └── GetMemberMeetingGroupProposalsQueryHandler.cs │ │ │ │ ├── MeetingGroupProposalAcceptedIntegrationEventHandler.cs │ │ │ │ ├── MeetingGroupProposedNotification.cs │ │ │ │ ├── MeetingGroupProposedNotificationHandler.cs │ │ │ │ └── ProposeMeetingGroup/ │ │ │ │ ├── ProposeMeetingGroupCommand.cs │ │ │ │ ├── ProposeMeetingGroupCommandHandler.cs │ │ │ │ └── ProposeMeetingGroupCommandValidator.cs │ │ │ ├── MeetingGroups/ │ │ │ │ ├── CreateNewMeetingGroup/ │ │ │ │ │ ├── CreateNewMeetingGroupCommand.cs │ │ │ │ │ └── CreateNewMeetingGroupCommandHandler.cs │ │ │ │ ├── EditMeetingGroupGeneralAttributes/ │ │ │ │ │ ├── EditMeetingGroupGeneralAttributesCommand.cs │ │ │ │ │ └── EditMeetingGroupGeneralAttributesCommandHandler.cs │ │ │ │ ├── GetAllMeetingGroups/ │ │ │ │ │ ├── GetAllMeetingGroupsQuery.cs │ │ │ │ │ ├── GetAllMeetingGroupsQueryHandler.cs │ │ │ │ │ └── MeetingGroupDto.cs │ │ │ │ ├── GetAuthenticationMemberMeetingGroups/ │ │ │ │ │ ├── GetAuthenticationMemberMeetingGroupsQuery.cs │ │ │ │ │ ├── GetAuthenticationMemberMeetingGroupsQueryHandler.cs │ │ │ │ │ └── MemberMeetingGroupDto.cs │ │ │ │ ├── GetMeetingGroupDetails/ │ │ │ │ │ ├── GetMeetingGroupDetailsQuery.cs │ │ │ │ │ ├── GetMeetingGroupDetailsQueryHandler.cs │ │ │ │ │ └── MeetingGroupDetailsDto.cs │ │ │ │ ├── JoinToGroup/ │ │ │ │ │ ├── JoinToGroupCommand.cs │ │ │ │ │ └── JoinToGroupCommandHandler.cs │ │ │ │ ├── LeaveMeetingGroup/ │ │ │ │ │ ├── LeaveMeetingGroupCommand.cs │ │ │ │ │ └── LeaveMeetingGroupCommandHandler.cs │ │ │ │ ├── MeetingGroupCreatedNotification.cs │ │ │ │ ├── MeetingGroupCreatedSendEmailHandler.cs │ │ │ │ ├── SendMeetingGroupCreatedEmail/ │ │ │ │ │ ├── SendMeetingGroupCreatedEmailCommand.cs │ │ │ │ │ └── SendMeetingGroupCreatedEmailCommandHandler.cs │ │ │ │ └── SetMeetingGroupExpirationDate/ │ │ │ │ ├── SetMeetingGroupExpirationDateCommand.cs │ │ │ │ └── SetMeetingGroupExpirationDateCommandHandler.cs │ │ │ ├── Meetings/ │ │ │ │ ├── AddMeetingAttendee/ │ │ │ │ │ ├── AddMeetingAttendeeCommand.cs │ │ │ │ │ └── AddMeetingAttendeeCommandHandler.cs │ │ │ │ ├── AddMeetingNotAttendee/ │ │ │ │ │ ├── AddMeetingNotAttendeeCommand.cs │ │ │ │ │ └── AddMeetingNotAttendeeCommandHandler.cs │ │ │ │ ├── CancelMeeting/ │ │ │ │ │ ├── CancelMeetingCommand.cs │ │ │ │ │ └── CancelMeetingCommandHandler.cs │ │ │ │ ├── ChangeMeetingMainAttributes/ │ │ │ │ │ ├── ChangeMeetingMainAttributesCommand.cs │ │ │ │ │ └── ChangeMeetingMainAttributesCommandHandler.cs │ │ │ │ ├── ChangeNotAttendeeDecision/ │ │ │ │ │ ├── ChangeNotAttendeeDecisionCommand.cs │ │ │ │ │ └── ChangeNotAttendeeDecisionCommandHandler.cs │ │ │ │ ├── CreateMeeting/ │ │ │ │ │ ├── CreateMeetingCommand.cs │ │ │ │ │ └── CreateMeetingCommandHandler.cs │ │ │ │ ├── GetAuthenticatedMemberMeetings/ │ │ │ │ │ ├── GetAuthenticatedMemberMeetingsQuery.cs │ │ │ │ │ ├── GetAuthenticatedMemberMeetingsQueryHandler.cs │ │ │ │ │ └── MemberMeetingDto.cs │ │ │ │ ├── GetMeetingAttendees/ │ │ │ │ │ ├── GetMeetingAttendeesQuery.cs │ │ │ │ │ ├── GetMeetingAttendeesQueryHandler.cs │ │ │ │ │ └── MeetingAttendeeDto.cs │ │ │ │ ├── GetMeetingDetails/ │ │ │ │ │ ├── GetMeetingDetailsQuery.cs │ │ │ │ │ ├── GetMeetingDetailsQueryHandler.cs │ │ │ │ │ └── MeetingDetailsDto.cs │ │ │ │ ├── MarkMeetingAttendeeFeeAsPayedCommand.cs │ │ │ │ ├── MarkMeetingAttendeeFeeAsPayedCommandHandler.cs │ │ │ │ ├── MeetingDto.cs │ │ │ │ ├── MeetingFeePaidIntegrationEventHandler.cs │ │ │ │ ├── MeetingsQueryHelper.cs │ │ │ │ ├── RemoveMeetingAttendee/ │ │ │ │ │ ├── RemoveMeetingAttendeeCommand.cs │ │ │ │ │ └── RemoveMeetingAttendeeCommandHandler.cs │ │ │ │ ├── SendMeetingAttendeeAddedEmail/ │ │ │ │ │ ├── MeetingAttendeeAddedNotification.cs │ │ │ │ │ ├── MeetingAttendeeAddedNotificationHandler.cs │ │ │ │ │ ├── MeetingAttendeeAddedPublishEventNotificationHandler.cs │ │ │ │ │ ├── SendMeetingAttendeeAddedEmailCommand.cs │ │ │ │ │ └── SendMeetingAttendeeAddedEmailCommandHandler.cs │ │ │ │ ├── SetMeetingAttendeeRole/ │ │ │ │ │ ├── SetMeetingAttendeeRoleCommand.cs │ │ │ │ │ └── SetMeetingAttendeeRoleCommandHandler.cs │ │ │ │ ├── SetMeetingHostRole/ │ │ │ │ │ ├── SetMeetingHostRoleCommand.cs │ │ │ │ │ └── SetMeetingHostRoleCommandHandler.cs │ │ │ │ ├── SignOffMemberFromWaitlist/ │ │ │ │ │ ├── SignOffMemberFromWaitlistCommand.cs │ │ │ │ │ └── SignOffMemberFromWaitlistCommandHandler.cs │ │ │ │ └── SignUpMemberToWaitlist/ │ │ │ │ ├── SignUpMemberToWaitlistCommand.cs │ │ │ │ └── SignUpMemberToWaitlistCommandHandler.cs │ │ │ ├── MemberSubscriptions/ │ │ │ │ ├── ChangeSubscriptionExpirationDateForMember/ │ │ │ │ │ ├── ChangeSubscriptionExpirationDateForMemberCommand.cs │ │ │ │ │ └── ChangeSubscriptionExpirationDateForMemberCommandHandler.cs │ │ │ │ ├── MemberSubscriptionExpirationDateChangedNotification.cs │ │ │ │ ├── MemberSubscriptionExpirationDateChangedNotificationHandler.cs │ │ │ │ └── SubscriptionExpirationDateChangedIntegrationEventHandler.cs │ │ │ └── Members/ │ │ │ ├── CreateMember/ │ │ │ │ ├── CreateMemberCommand.cs │ │ │ │ ├── CreateMemberCommandHandler.cs │ │ │ │ ├── MemberCratedNotificationHandler.cs │ │ │ │ ├── MemberCreatedNotification.cs │ │ │ │ └── NewUserRegisteredIntegrationEventHandler.cs │ │ │ ├── MemberContext.cs │ │ │ ├── MemberDto.cs │ │ │ └── MembersQueryHelper.cs │ │ ├── Domain/ │ │ │ ├── CompanyName.MyMeetings.Modules.Meetings.Domain.csproj │ │ │ ├── MeetingCommentingConfigurations/ │ │ │ │ ├── Events/ │ │ │ │ │ ├── MeetingCommentingConfigurationCreatedDomainEvent.cs │ │ │ │ │ ├── MeetingCommentingDisabledDomainEvent.cs │ │ │ │ │ └── MeetingCommentingEnabledDomainEvent.cs │ │ │ │ ├── IMeetingCommentingConfigurationRepository.cs │ │ │ │ ├── MeetingCommentingConfiguration.cs │ │ │ │ ├── MeetingCommentingConfigurationId.cs │ │ │ │ └── Rules/ │ │ │ │ ├── MeetingCommentingCanBeDisabledOnlyByGroupOrganizerRule.cs │ │ │ │ └── MeetingCommentingCanBeEnabledOnlyByGroupOrganizerRule.cs │ │ │ ├── MeetingComments/ │ │ │ │ ├── Events/ │ │ │ │ │ ├── MeetingCommentAddedDomainEvent.cs │ │ │ │ │ ├── MeetingCommentEditedDomainEvent.cs │ │ │ │ │ ├── MeetingCommentRemovedDomainEvent.cs │ │ │ │ │ └── ReplyToMeetingCommentAddedDomainEvent.cs │ │ │ │ ├── IMeetingCommentRepository.cs │ │ │ │ ├── MeetingComment.cs │ │ │ │ ├── MeetingCommentId.cs │ │ │ │ └── Rules/ │ │ │ │ ├── CommentCanBeAddedOnlyByMeetingGroupMemberRule.cs │ │ │ │ ├── CommentCanBeCreatedOnlyIfCommentingForMeetingEnabledRule.cs │ │ │ │ ├── CommentCanBeEditedOnlyIfCommentingForMeetingEnabledRule.cs │ │ │ │ ├── CommentCanBeLikedOnlyByMeetingGroupMemberRule.cs │ │ │ │ ├── CommentCannotBeLikedByTheSameMemberMoreThanOnceRule.cs │ │ │ │ ├── CommentTextMustBeProvidedRule.cs │ │ │ │ ├── MeetingCommentCanBeEditedOnlyByAuthorRule.cs │ │ │ │ ├── MeetingCommentCanBeRemovedOnlyByAuthorOrGroupOrganizerRule.cs │ │ │ │ └── RemovingReasonCanBeProvidedOnlyByGroupOrganizerRule.cs │ │ │ ├── MeetingGroupProposals/ │ │ │ │ ├── Events/ │ │ │ │ │ ├── MeetingGroupProposalAcceptedDomainEvent.cs │ │ │ │ │ └── MeetingGroupProposedDomainEvent.cs │ │ │ │ ├── IMeetingGroupProposalRepository.cs │ │ │ │ ├── MeetingGroupProposal.cs │ │ │ │ ├── MeetingGroupProposalId.cs │ │ │ │ ├── MeetingGroupProposalStatus.cs │ │ │ │ └── Rules/ │ │ │ │ └── MeetingGroupProposalCannotBeAcceptedMoreThanOnceRule.cs │ │ │ ├── MeetingGroups/ │ │ │ │ ├── Events/ │ │ │ │ │ ├── MeetingAttendeeChangedDecisionDomainEvent.cs │ │ │ │ │ ├── MeetingGroupCreatedDomainEvent.cs │ │ │ │ │ ├── MeetingGroupGeneralAttributesEditedDomainEvent.cs │ │ │ │ │ ├── MeetingGroupMemberLeftGroupDomainEvent.cs │ │ │ │ │ ├── MeetingGroupPaymentInfoUpdatedDomainEvent.cs │ │ │ │ │ ├── MeetingNotAttendeeChangedDecisionDomainEvent.cs │ │ │ │ │ └── NewMeetingGroupMemberJoinedDomainEvent.cs │ │ │ │ ├── IMeetingGroupRepository.cs │ │ │ │ ├── MeetingGroup.cs │ │ │ │ ├── MeetingGroupId.cs │ │ │ │ ├── MeetingGroupLocation.cs │ │ │ │ ├── MeetingGroupMember.cs │ │ │ │ ├── MeetingGroupMemberRole.cs │ │ │ │ ├── Policies/ │ │ │ │ │ ├── MeetingGroupExpirationDatePolicy.cs │ │ │ │ │ └── MeetingGroupMemberData.cs │ │ │ │ └── Rules/ │ │ │ │ ├── MeetingCanBeOrganizedOnlyByPayedGroupRule.cs │ │ │ │ ├── MeetingGroupMemberCannotBeAddedTwiceRule.cs │ │ │ │ ├── MeetingHostMustBeAMeetingGroupMemberRule.cs │ │ │ │ └── NotActualGroupMemberCannotLeaveGroupRule.cs │ │ │ ├── MeetingMemberCommentLikes/ │ │ │ │ ├── Events/ │ │ │ │ │ ├── MeetingCommentLikedDomainEvent.cs │ │ │ │ │ └── MeetingCommentUnlikedDomainEvent.cs │ │ │ │ ├── IMeetingMemberCommentLikesRepository.cs │ │ │ │ ├── MeetingMemberCommentLike.cs │ │ │ │ └── MeetingMemberCommentLikeId.cs │ │ │ ├── Meetings/ │ │ │ │ ├── Events/ │ │ │ │ │ ├── MeetingAttendeeAddedDomainEvent.cs │ │ │ │ │ ├── MeetingAttendeeFeePaidDomainEvent.cs │ │ │ │ │ ├── MeetingAttendeeRemovedDomainEvent.cs │ │ │ │ │ ├── MeetingCanceledDomainEvent.cs │ │ │ │ │ ├── MeetingCreatedDomainEvent.cs │ │ │ │ │ ├── MeetingEditedDomainEvent.cs │ │ │ │ │ ├── MeetingMainAttributesChangedDomainEvent.cs │ │ │ │ │ ├── MeetingNotAttendeeAddedDomainEvent.cs │ │ │ │ │ ├── MeetingWaitlistMemberAddedDomainEvent.cs │ │ │ │ │ ├── MemberSetAsAttendeeDomainEvent.cs │ │ │ │ │ ├── MemberSignedOffFromMeetingWaitlistDomainEvent.cs │ │ │ │ │ └── NewMeetingHostSetDomainEvent.cs │ │ │ │ ├── IMeetingRepository.cs │ │ │ │ ├── Meeting.cs │ │ │ │ ├── MeetingAttendee.cs │ │ │ │ ├── MeetingAttendeeRole.cs │ │ │ │ ├── MeetingId.cs │ │ │ │ ├── MeetingLimits.cs │ │ │ │ ├── MeetingLocation.cs │ │ │ │ ├── MeetingNotAttendee.cs │ │ │ │ ├── MeetingTerm.cs │ │ │ │ ├── MeetingWaitlistMember.cs │ │ │ │ ├── MoneyValue.cs │ │ │ │ ├── Rules/ │ │ │ │ │ ├── AttendeeCanBeAddedOnlyInRsvpTermRule.cs │ │ │ │ │ ├── AttendeesLimitCannotBeChangedToSmallerThanActiveAttendeesRule.cs │ │ │ │ │ ├── MeetingAttendeeMustBeAMemberOfGroupRule.cs │ │ │ │ │ ├── MeetingAttendeesLimitCannotBeNegativeRule.cs │ │ │ │ │ ├── MeetingAttendeesLimitMustBeGreaterThanGuestsLimitRule.cs │ │ │ │ │ ├── MeetingAttendeesNumberIsAboveLimitRule.cs │ │ │ │ │ ├── MeetingCannotBeChangedAfterStartRule.cs │ │ │ │ │ ├── MeetingGuestsLimitCannotBeNegativeRule.cs │ │ │ │ │ ├── MeetingGuestsNumberIsAboveLimitRule.cs │ │ │ │ │ ├── MeetingMustHaveAtLeastOneHostRule.cs │ │ │ │ │ ├── MemberCannotBeAnAttendeeOfMeetingMoreThanOnceRule.cs │ │ │ │ │ ├── MemberCannotBeMoreThanOnceOnMeetingWaitlistRule.cs │ │ │ │ │ ├── MemberCannotBeNotAttendeeTwiceRule.cs │ │ │ │ │ ├── MemberCannotHaveSetAttendeeRoleMoreThanOnceRule.cs │ │ │ │ │ ├── MemberOnWaitlistMustBeAMemberOfGroupRule.cs │ │ │ │ │ ├── NotActiveMemberOfWaitlistCannotBeSignedOffRule.cs │ │ │ │ │ ├── NotActiveNotAttendeeCannotChangeDecisionRule.cs │ │ │ │ │ ├── OnlyActiveAttendeeCanBeRemovedFromMeetingRule.cs │ │ │ │ │ ├── OnlyMeetingAttendeeCanHaveChangedRoleRule.cs │ │ │ │ │ ├── OnlyMeetingOrGroupOrganizerCanSetMeetingMemberRolesRule.cs │ │ │ │ │ └── ReasonOfRemovingAttendeeFromMeetingMustBeProvidedRule.cs │ │ │ │ └── Term.cs │ │ │ ├── Members/ │ │ │ │ ├── Events/ │ │ │ │ │ └── MemberCreatedDomainEvent.cs │ │ │ │ ├── IMemberContext.cs │ │ │ │ ├── IMemberRepository.cs │ │ │ │ ├── MeetingGroupMemberData.cs │ │ │ │ ├── Member.cs │ │ │ │ ├── MemberId.cs │ │ │ │ └── MemberSubscriptions/ │ │ │ │ ├── Events/ │ │ │ │ │ └── MemberSubscriptionExpirationDateChangedDomainEvent.cs │ │ │ │ ├── IMemberSubscriptionRepository.cs │ │ │ │ ├── MemberSubscription.cs │ │ │ │ └── MemberSubscriptionId.cs │ │ │ └── SharedKernel/ │ │ │ └── SystemClock.cs │ │ ├── Infrastructure/ │ │ │ ├── CompanyName.MyMeetings.Modules.Meetings.Infrastructure.csproj │ │ │ ├── Configuration/ │ │ │ │ ├── AllConstructorFinder.cs │ │ │ │ ├── Assemblies.cs │ │ │ │ ├── Authentication/ │ │ │ │ │ └── AuthenticationModule.cs │ │ │ │ ├── DataAccess/ │ │ │ │ │ └── DataAccessModule.cs │ │ │ │ ├── Email/ │ │ │ │ │ └── EmailModule.cs │ │ │ │ ├── EventsBus/ │ │ │ │ │ ├── EventsBusModule.cs │ │ │ │ │ ├── EventsBusStartup.cs │ │ │ │ │ └── IntegrationEventGenericHandler.cs │ │ │ │ ├── Logging/ │ │ │ │ │ └── LoggingModule.cs │ │ │ │ ├── Mediation/ │ │ │ │ │ └── MediatorModule.cs │ │ │ │ ├── MeetingsCompositionRoot.cs │ │ │ │ ├── MeetingsStartup.cs │ │ │ │ ├── Processing/ │ │ │ │ │ ├── CommandsExecutor.cs │ │ │ │ │ ├── IRecurringCommand.cs │ │ │ │ │ ├── Inbox/ │ │ │ │ │ │ ├── InboxMessageDto.cs │ │ │ │ │ │ ├── ProcessInboxCommand.cs │ │ │ │ │ │ ├── ProcessInboxCommandHandler.cs │ │ │ │ │ │ └── ProcessInboxJob.cs │ │ │ │ │ ├── InternalCommands/ │ │ │ │ │ │ ├── CommandsScheduler.cs │ │ │ │ │ │ ├── ProcessInternalCommandsCommand.cs │ │ │ │ │ │ ├── ProcessInternalCommandsCommandHandler.cs │ │ │ │ │ │ └── ProcessInternalCommandsJob.cs │ │ │ │ │ ├── LoggingCommandHandlerDecorator.cs │ │ │ │ │ ├── LoggingCommandHandlerWithResultDecorator.cs │ │ │ │ │ ├── Outbox/ │ │ │ │ │ │ ├── OutboxMessageDto.cs │ │ │ │ │ │ ├── OutboxModule.cs │ │ │ │ │ │ ├── ProcessOutboxCommand.cs │ │ │ │ │ │ ├── ProcessOutboxCommandHandler.cs │ │ │ │ │ │ └── ProcessOutboxJob.cs │ │ │ │ │ ├── ProcessingModule.cs │ │ │ │ │ ├── UnitOfWorkCommandHandlerDecorator.cs │ │ │ │ │ ├── UnitOfWorkCommandHandlerWithResultDecorator.cs │ │ │ │ │ ├── ValidationCommandHandlerDecorator.cs │ │ │ │ │ └── ValidationCommandHandlerWithResultDecorator.cs │ │ │ │ └── Quartz/ │ │ │ │ ├── QuartzModule.cs │ │ │ │ ├── QuartzStartup.cs │ │ │ │ └── SerilogLogProvider.cs │ │ │ ├── Domain/ │ │ │ │ ├── MeetingCommentingConfigurations/ │ │ │ │ │ ├── MeetingCommentingConfigurationEntityTypeConfiguration.cs │ │ │ │ │ └── MeetingCommentingConfigurationRepository.cs │ │ │ │ ├── MeetingComments/ │ │ │ │ │ ├── MeetingCommentEntityTypeConfiguration.cs │ │ │ │ │ └── MeetingCommentRepository.cs │ │ │ │ ├── MeetingGroupProposals/ │ │ │ │ │ ├── MeetingGroupProposalEntityTypeConfiguration.cs │ │ │ │ │ └── MeetingGroupProposalRepository.cs │ │ │ │ ├── MeetingGroups/ │ │ │ │ │ ├── MeetingGroupRepository.cs │ │ │ │ │ └── MeetingGroupsEntityTypeConfiguration.cs │ │ │ │ ├── MeetingMemberCommentLikes/ │ │ │ │ │ ├── MeetingMemberCommentLikeEntityTypeConfiguration.cs │ │ │ │ │ └── MeetingMemberCommentLikeRepository.cs │ │ │ │ ├── Meetings/ │ │ │ │ │ ├── MeetingEntityTypeConfiguration.cs │ │ │ │ │ └── MeetingRepository.cs │ │ │ │ └── Members/ │ │ │ │ ├── MemberEntityTypeConfiguration.cs │ │ │ │ ├── MemberRepository.cs │ │ │ │ └── MemberSubscriptions/ │ │ │ │ ├── MemberSubscriptionEntityTypeConfiguration.cs │ │ │ │ └── MemberSubscriptionRepository.cs │ │ │ ├── InternalCommands/ │ │ │ │ └── InternalCommandEntityTypeConfiguration.cs │ │ │ ├── MeetingsContext.cs │ │ │ ├── MeetingsModule.cs │ │ │ └── Outbox/ │ │ │ ├── OutboxAccessor.cs │ │ │ └── OutboxMessageEntityTypeConfiguration.cs │ │ ├── IntegrationEvents/ │ │ │ ├── CompanyName.MyMeetings.Modules.Meetings.IntegrationEvents.csproj │ │ │ ├── MeetingAttendeeAddedIntegrationEvent.cs │ │ │ ├── MeetingGroupProposedIntegrationEvent.cs │ │ │ └── MemberCreatedIntegrationEvent.cs │ │ └── Tests/ │ │ ├── ArchTests/ │ │ │ ├── Application/ │ │ │ │ └── ApplicationTests.cs │ │ │ ├── CompanyName.MyMeetings.Modules.Meetings.ArchTests.csproj │ │ │ ├── Domain/ │ │ │ │ └── DomainTests.cs │ │ │ ├── Module/ │ │ │ │ └── LayersTests.cs │ │ │ └── SeedWork/ │ │ │ └── TestBase.cs │ │ ├── IntegrationTests/ │ │ │ ├── AssemblyInfo.cs │ │ │ ├── CompanyName.MyMeetings.Modules.Meetings.IntegrationTests.csproj │ │ │ ├── Countries/ │ │ │ │ ├── 0001_SeedCountries.sql │ │ │ │ └── GetCountriesTests.cs │ │ │ ├── MeetingCommentLikes/ │ │ │ │ ├── AddMeetingCommentLikeTests.cs │ │ │ │ ├── GetLikedMeetingCommentProbe.cs │ │ │ │ ├── GetMeetingCommentsProbe.cs │ │ │ │ └── RemoveMeetingCommentLikeTests.cs │ │ │ ├── MeetingCommentingConfigurations/ │ │ │ │ ├── CreateMeetingCommentingConfigurationTests.cs │ │ │ │ ├── DisableMeetingCommentingConfigurationTests.cs │ │ │ │ └── EnableMeetingCommentingConfigurationTests.cs │ │ │ ├── MeetingComments/ │ │ │ │ ├── AddMeetingCommentTests.cs │ │ │ │ ├── AddReplyToMeetingCommentTests.cs │ │ │ │ ├── EditMeetingCommentTests.cs │ │ │ │ ├── GetMeetingCommentsTests.cs │ │ │ │ └── RemoveMeetingCommentTests.cs │ │ │ ├── MeetingGroupProposals/ │ │ │ │ ├── GetMeetingGroupProposalsTests.cs │ │ │ │ ├── MeetingGroupProposalSampleData.cs │ │ │ │ └── ProposeMeetingGroupTests.cs │ │ │ ├── MeetingGroups/ │ │ │ │ └── CreateNewMeetingGroupTests.cs │ │ │ ├── Meetings/ │ │ │ │ ├── MeetingCreateTests.cs │ │ │ │ └── MeetingHelper.cs │ │ │ └── SeedWork/ │ │ │ ├── EventsBusMock.cs │ │ │ ├── ExecutionContextMock.cs │ │ │ ├── OutboxMessagesHelper.cs │ │ │ └── TestBase.cs │ │ └── UnitTests/ │ │ ├── CompanyName.MyMeetings.Modules.Meetings.Domain.UnitTests.csproj │ │ ├── MeetingGroupProposals/ │ │ │ └── MeetingGroupProposalTests.cs │ │ ├── MeetingGroups/ │ │ │ └── MeetingGroupTests.cs │ │ ├── Meetings/ │ │ │ ├── MeetingAddAttendeeTests.cs │ │ │ ├── MeetingAddNotAttendeeTests.cs │ │ │ ├── MeetingCommentTests.cs │ │ │ ├── MeetingCommentingConfigurationTests.cs │ │ │ ├── MeetingLimitsTests.cs │ │ │ ├── MeetingRolesTests.cs │ │ │ ├── MeetingTests.cs │ │ │ ├── MeetingTestsBase.cs │ │ │ └── MeetingWaitlistTests.cs │ │ ├── Members/ │ │ │ └── MemberTests.cs │ │ └── SeedWork/ │ │ ├── DomainEventsTestHelper.cs │ │ └── TestBase.cs │ ├── Payments/ │ │ ├── Application/ │ │ │ ├── CompanyName.MyMeetings.Modules.Payments.Application.csproj │ │ │ ├── Configuration/ │ │ │ │ ├── Commands/ │ │ │ │ │ ├── ICommandHandler.cs │ │ │ │ │ ├── ICommandsScheduler.cs │ │ │ │ │ └── InternalCommandBase.cs │ │ │ │ ├── Projections/ │ │ │ │ │ ├── IProjector.cs │ │ │ │ │ └── ProjectorBase.cs │ │ │ │ └── Queries/ │ │ │ │ └── IQueryHandler.cs │ │ │ ├── Contracts/ │ │ │ │ ├── CommandBase.cs │ │ │ │ ├── ICommand.cs │ │ │ │ ├── IPaymentsModule.cs │ │ │ │ ├── IQuery.cs │ │ │ │ ├── IRecurringCommand.cs │ │ │ │ └── QueryBase.cs │ │ │ ├── MeetingFees/ │ │ │ │ ├── CreateMeetingFee/ │ │ │ │ │ ├── CreateMeetingFeeCommand.cs │ │ │ │ │ └── CreateMeetingFeeCommandHandler.cs │ │ │ │ ├── CreateMeetingFeePayment/ │ │ │ │ │ ├── CreateMeetingFeePaymentCommand.cs │ │ │ │ │ └── CreateMeetingFeePaymentCommandHandler.cs │ │ │ │ ├── GetMeetingFees/ │ │ │ │ │ ├── GetMeetingFeesQuery.cs │ │ │ │ │ ├── GetMeetingFeesQueryHandler.cs │ │ │ │ │ ├── MeetingFeeDto.cs │ │ │ │ │ └── MeetingFeesProjector.cs │ │ │ │ ├── MarkMeetingFeeAsPaid/ │ │ │ │ │ ├── MarkMeetingFeeAsPaidCommand.cs │ │ │ │ │ ├── MarkMeetingFeeAsPaidCommandHandler.cs │ │ │ │ │ ├── MeetingFeePaidNotification.cs │ │ │ │ │ └── MeetingFeePaidNotificationHandler.cs │ │ │ │ ├── MarkMeetingFeePaymentAsPaid/ │ │ │ │ │ ├── MarkMeetingFeePaymentAsPaidCommand.cs │ │ │ │ │ ├── MarkMeetingFeePaymentAsPaidCommandHandler.cs │ │ │ │ │ ├── MeetingFeePaymentPaidNotification.cs │ │ │ │ │ └── MeetingFeePaymentPaidNotificationHandler.cs │ │ │ │ └── MeetingAttendeeAddedIntegrationEventHandler.cs │ │ │ ├── Payers/ │ │ │ │ ├── CreatePayer/ │ │ │ │ │ ├── CreatePayerCommand.cs │ │ │ │ │ ├── CreatePayerCommandHandler.cs │ │ │ │ │ └── NewUserRegisteredIntegrationEventHandler.cs │ │ │ │ ├── GetPayer/ │ │ │ │ │ ├── GetPayerQuery.cs │ │ │ │ │ ├── GetPayerQueryHandler.cs │ │ │ │ │ ├── PayerDetailsProjector.cs │ │ │ │ │ └── PayerDto.cs │ │ │ │ └── GetPayerEmail/ │ │ │ │ └── PayerEmailProvider.cs │ │ │ ├── PriceListItems/ │ │ │ │ ├── ActivatePriceListItem/ │ │ │ │ │ ├── ActivatePriceListItemCommand.cs │ │ │ │ │ └── ActivatePriceListItemCommandHandler.cs │ │ │ │ ├── ChangePriceListItemAttributes/ │ │ │ │ │ ├── ChangePriceListItemAttributesCommand.cs │ │ │ │ │ └── ChangePriceListItemAttributesCommandHandler.cs │ │ │ │ ├── CreatePriceListItem/ │ │ │ │ │ ├── CreatePriceListItemCommand.cs │ │ │ │ │ └── CreatePriceListItemCommandHandler.cs │ │ │ │ ├── DeactivatePriceListItem/ │ │ │ │ │ ├── DeactivatePriceListItemCommand.cs │ │ │ │ │ └── DeactivatePriceListItemCommandHandler.cs │ │ │ │ ├── GetPriceListItem/ │ │ │ │ │ ├── GetPriceListItemQuery.cs │ │ │ │ │ ├── GetPriceListItemQueryHandler.cs │ │ │ │ │ ├── PriceListItemMoneyValueDto.cs │ │ │ │ │ └── PriceListItemsProjector.cs │ │ │ │ ├── GetPriceListItems/ │ │ │ │ │ ├── GetPriceListItemsQuery.cs │ │ │ │ │ └── GetPriceListItemsQueryHandler.cs │ │ │ │ ├── PriceListFactory.cs │ │ │ │ └── PriceListItemDto.cs │ │ │ └── Subscriptions/ │ │ │ ├── BuySubscription/ │ │ │ │ ├── BuySubscriptionCommand.cs │ │ │ │ └── BuySubscriptionCommandHandler.cs │ │ │ ├── BuySubscriptionRenewal/ │ │ │ │ ├── BuySubscriptionRenewalCommand.cs │ │ │ │ └── BuySubscriptionRenewalCommandHandler.cs │ │ │ ├── CreateSubscription/ │ │ │ │ ├── CreateSubscriptionCommand.cs │ │ │ │ ├── CreateSubscriptionCommandHandler.cs │ │ │ │ ├── SubscriptionCreatedEnqueueEmailConfirmationHandler.cs │ │ │ │ ├── SubscriptionCreatedNotification.cs │ │ │ │ └── SubscriptionCreatedNotificationHandler.cs │ │ │ ├── ExpireSubscription/ │ │ │ │ ├── ExpireSubscriptionCommand.cs │ │ │ │ └── ExpireSubscriptionCommandHandler.cs │ │ │ ├── ExpireSubscriptionPayment/ │ │ │ │ ├── ExpireSubscriptionPaymentCommand.cs │ │ │ │ └── ExpireSubscriptionPaymentCommandHandler.cs │ │ │ ├── ExpireSubscriptionPayments/ │ │ │ │ ├── ExpireSubscriptionPaymentsCommand.cs │ │ │ │ └── ExpireSubscriptionPaymentsCommandHandler.cs │ │ │ ├── ExpireSubscriptions/ │ │ │ │ ├── ExpireSubscriptionsCommand.cs │ │ │ │ └── ExpireSubscriptionsCommandHandler.cs │ │ │ ├── GetPayerSubscription/ │ │ │ │ ├── GetAuthenticatedPayerSubscriptionQuery.cs │ │ │ │ └── GetAuthenticatedPayerSubscriptionQueryHandler.cs │ │ │ ├── GetSubscriptionDetails/ │ │ │ │ ├── GetSubscriptionDetailsQuery.cs │ │ │ │ ├── GetSubscriptionDetailsQueryHandler.cs │ │ │ │ ├── SubscriptionDetailsDto.cs │ │ │ │ └── SubscriptionDetailsProjector.cs │ │ │ ├── GetSubscriptionPayments/ │ │ │ │ ├── GetSubscriptionPaymentsQuery.cs │ │ │ │ ├── GetSubscriptionPaymentsQueryHandler.cs │ │ │ │ ├── SubscriptionPaymentDto.cs │ │ │ │ └── SubscriptionPaymentsProjector.cs │ │ │ ├── MarkSubscriptionPaymentAsPaid/ │ │ │ │ ├── MarkSubscriptionPaymentAsPaidCommand.cs │ │ │ │ ├── MarkSubscriptionPaymentAsPaidCommandHandler.cs │ │ │ │ ├── SubscriptionPaymentPaidNotification.cs │ │ │ │ └── SubscriptionPaymentPaidNotificationHandler.cs │ │ │ ├── MarkSubscriptionRenewalPaymentAsPaid/ │ │ │ │ ├── MarkSubscriptionRenewalPaymentAsPaidCommand.cs │ │ │ │ ├── MarkSubscriptionRenewalPaymentAsPaidCommandHandler.cs │ │ │ │ ├── SubscriptionRenewalPaymentAsPaidNotificationHandler.cs │ │ │ │ └── SubscriptionRenewalPaymentPaidNotification.cs │ │ │ ├── RenewSubscription/ │ │ │ │ ├── RenewSubscriptionCommand.cs │ │ │ │ ├── RenewSubscriptionCommandHandler.cs │ │ │ │ ├── SubscriptionRenewedEnqueueEmailConfirmationHandler.cs │ │ │ │ ├── SubscriptionRenewedNotification.cs │ │ │ │ └── SubscriptionRenewedNotificationHandler.cs │ │ │ ├── SendSubscriptionCreationConfirmationEmail/ │ │ │ │ ├── SendSubscriptionCreationConfirmationEmailCommand.cs │ │ │ │ └── SendSubscriptionCreationConfirmationEmailCommandHandler.cs │ │ │ └── SendSubscriptionRenewalConfirmationEmail/ │ │ │ ├── SendSubscriptionRenewalConfirmationEmailCommand.cs │ │ │ └── SendSubscriptionRenewalConfirmationEmailCommandHandler.cs │ │ ├── Domain/ │ │ │ ├── CompanyName.MyMeetings.Modules.Payments.Domain.csproj │ │ │ ├── MeetingFeePayments/ │ │ │ │ ├── Events/ │ │ │ │ │ ├── MeetingFeePaymentCreatedDomainEvent.cs │ │ │ │ │ ├── MeetingFeePaymentExpiredDomainEvent.cs │ │ │ │ │ └── MeetingFeePaymentPaidDomainEvent.cs │ │ │ │ ├── MeetingFeePayment.cs │ │ │ │ ├── MeetingFeePaymentId.cs │ │ │ │ ├── MeetingFeePaymentSnapshot.cs │ │ │ │ └── MeetingFeePaymentStatus.cs │ │ │ ├── MeetingFees/ │ │ │ │ ├── Events/ │ │ │ │ │ ├── MeetingFeeCanceledDomainEvent.cs │ │ │ │ │ ├── MeetingFeeCreatedDomainEvent.cs │ │ │ │ │ ├── MeetingFeeExpiredDomainEvent.cs │ │ │ │ │ └── MeetingFeePaidDomainEvent.cs │ │ │ │ ├── MeetingFee.cs │ │ │ │ ├── MeetingFeeId.cs │ │ │ │ ├── MeetingFeeSnapshot.cs │ │ │ │ ├── MeetingFeeStatus.cs │ │ │ │ └── MeetingId.cs │ │ │ ├── Payers/ │ │ │ │ ├── Events/ │ │ │ │ │ └── PayerCreatedDomainEvent.cs │ │ │ │ ├── IPayerContext.cs │ │ │ │ ├── IPayerRepository.cs │ │ │ │ ├── Payer.cs │ │ │ │ └── PayerId.cs │ │ │ ├── PriceListItems/ │ │ │ │ ├── Events/ │ │ │ │ │ ├── PriceListItemActivatedDomainEvent.cs │ │ │ │ │ ├── PriceListItemAttributesChangedDomainEvent.cs │ │ │ │ │ ├── PriceListItemCreatedDomainEvent.cs │ │ │ │ │ └── PriceListItemDeactivatedDomainEvent.cs │ │ │ │ ├── PriceList.cs │ │ │ │ ├── PriceListItem.cs │ │ │ │ ├── PriceListItemCategory.cs │ │ │ │ ├── PriceListItemData.cs │ │ │ │ ├── PriceListItemId.cs │ │ │ │ └── PricingStrategies/ │ │ │ │ ├── DirectValueFromPriceListPricingStrategy.cs │ │ │ │ ├── DirectValuePricingStrategy.cs │ │ │ │ ├── DiscountedValueFromPriceListPricingStrategy.cs │ │ │ │ └── IPricingStrategy.cs │ │ │ ├── SeedWork/ │ │ │ │ ├── AggregateId.cs │ │ │ │ ├── AggregateRoot.cs │ │ │ │ ├── IAggregateStore.cs │ │ │ │ ├── MoneyValue.cs │ │ │ │ ├── Rules/ │ │ │ │ │ ├── MoneyMustHaveTheSameCurrencyRule.cs │ │ │ │ │ └── ValueOfMoneyMustNotBeNegativeRule.cs │ │ │ │ └── SystemClock.cs │ │ │ ├── SubscriptionPayments/ │ │ │ │ ├── Events/ │ │ │ │ │ ├── SubscriptionPaymentCreatedDomainEvent.cs │ │ │ │ │ ├── SubscriptionPaymentExpiredDomainEvent.cs │ │ │ │ │ └── SubscriptionPaymentPaidDomainEvent.cs │ │ │ │ ├── Rules/ │ │ │ │ │ ├── PriceForSubscriptionMustBeDefinedRule.cs │ │ │ │ │ └── PriceOfferMustMatchPriceInPriceListRule.cs │ │ │ │ ├── SubscriptionPayment.cs │ │ │ │ ├── SubscriptionPaymentId.cs │ │ │ │ ├── SubscriptionPaymentSnapshot.cs │ │ │ │ └── SubscriptionPaymentStatus.cs │ │ │ ├── SubscriptionRenewalPayments/ │ │ │ │ ├── Events/ │ │ │ │ │ ├── SubscriptionRenewalPaymentCreatedDomainEvent.cs │ │ │ │ │ └── SubscriptionRenewalPaymentPaidDomainEvent.cs │ │ │ │ ├── Rules/ │ │ │ │ │ └── PriceOfferMustMatchPriceInPriceListRule.cs │ │ │ │ ├── SubscriptionRenewalPayment.cs │ │ │ │ ├── SubscriptionRenewalPaymentId.cs │ │ │ │ ├── SubscriptionRenewalPaymentSnapshot.cs │ │ │ │ └── SubscriptionRenewalPaymentStatus.cs │ │ │ ├── Subscriptions/ │ │ │ │ ├── Events/ │ │ │ │ │ ├── SubscriptionCreatedDomainEvent.cs │ │ │ │ │ ├── SubscriptionExpiredDomainEvent.cs │ │ │ │ │ └── SubscriptionRenewedDomainEvent.cs │ │ │ │ ├── SubscriberId.cs │ │ │ │ ├── Subscription.cs │ │ │ │ ├── SubscriptionDateExpirationCalculator.cs │ │ │ │ ├── SubscriptionId.cs │ │ │ │ ├── SubscriptionPeriod.cs │ │ │ │ └── SubscriptionStatus.cs │ │ │ └── Users/ │ │ │ ├── IUserContext.cs │ │ │ └── UserId.cs │ │ ├── Infrastructure/ │ │ │ ├── AggregateStore/ │ │ │ │ ├── AggregateStoreDomainEventsAccessor.cs │ │ │ │ ├── DomainEventTypeMappings.cs │ │ │ │ ├── ICheckpointStore.cs │ │ │ │ ├── SqlOutboxAccessor.cs │ │ │ │ ├── SqlServerCheckpointStore.cs │ │ │ │ ├── SqlStreamAggregateStore.cs │ │ │ │ ├── SubscriptionCode.cs │ │ │ │ └── SubscriptionsManager.cs │ │ │ ├── CompanyName.MyMeetings.Modules.Payments.Infrastructure.csproj │ │ │ ├── Configuration/ │ │ │ │ ├── AllConstructorFinder.cs │ │ │ │ ├── Assemblies.cs │ │ │ │ ├── Authentication/ │ │ │ │ │ ├── AuthenticationModule.cs │ │ │ │ │ └── PayerContext.cs │ │ │ │ ├── DataAccess/ │ │ │ │ │ └── DataAccessModule.cs │ │ │ │ ├── DatabaseSchema.cs │ │ │ │ ├── Email/ │ │ │ │ │ └── EmailModule.cs │ │ │ │ ├── EventsBus/ │ │ │ │ │ ├── EventsBusModule.cs │ │ │ │ │ ├── EventsBusStartup.cs │ │ │ │ │ └── IntegrationEventGenericHandler.cs │ │ │ │ ├── Logging/ │ │ │ │ │ └── LoggingModule.cs │ │ │ │ ├── Mediation/ │ │ │ │ │ └── MediatorModule.cs │ │ │ │ ├── PaymentsCompositionRoot.cs │ │ │ │ ├── PaymentsStartup.cs │ │ │ │ ├── Processing/ │ │ │ │ │ ├── CommandsExecutor.cs │ │ │ │ │ ├── Inbox/ │ │ │ │ │ │ ├── InboxMessageDto.cs │ │ │ │ │ │ ├── ProcessInboxCommand.cs │ │ │ │ │ │ ├── ProcessInboxCommandHandler.cs │ │ │ │ │ │ └── ProcessInboxJob.cs │ │ │ │ │ ├── InternalCommands/ │ │ │ │ │ │ ├── CommandsScheduler.cs │ │ │ │ │ │ ├── ProcessInternalCommandsCommand.cs │ │ │ │ │ │ ├── ProcessInternalCommandsCommandHandler.cs │ │ │ │ │ │ └── ProcessInternalCommandsJob.cs │ │ │ │ │ ├── LoggingCommandHandlerDecorator.cs │ │ │ │ │ ├── LoggingCommandHandlerWithResultDecorator.cs │ │ │ │ │ ├── Outbox/ │ │ │ │ │ │ ├── OutboxMessageDto.cs │ │ │ │ │ │ ├── OutboxModule.cs │ │ │ │ │ │ ├── ProcessOutboxCommand.cs │ │ │ │ │ │ ├── ProcessOutboxCommandHandler.cs │ │ │ │ │ │ └── ProcessOutboxJob.cs │ │ │ │ │ ├── PaymentsUnitOfWork.cs │ │ │ │ │ ├── ProcessingModule.cs │ │ │ │ │ ├── UnitOfWorkCommandHandlerDecorator.cs │ │ │ │ │ ├── UnitOfWorkCommandHandlerWithResultDecorator.cs │ │ │ │ │ ├── ValidationCommandHandlerDecorator.cs │ │ │ │ │ └── ValidationCommandHandlerWithResultDecorator.cs │ │ │ │ └── Quartz/ │ │ │ │ ├── Jobs/ │ │ │ │ │ ├── ExpireSubscriptionPaymentsJob.cs │ │ │ │ │ └── ExpireSubscriptionsJob.cs │ │ │ │ ├── QuartzModule.cs │ │ │ │ ├── QuartzStartup.cs │ │ │ │ └── SerilogLogProvider.cs │ │ │ ├── InternalCommands/ │ │ │ │ └── InternalCommandEntityTypeConfiguration.cs │ │ │ └── PaymentsModule.cs │ │ ├── IntegrationEvents/ │ │ │ ├── CompanyName.MyMeetings.Modules.Payments.IntegrationEvents.csproj │ │ │ ├── MeetingFeePaidIntegrationEvent.cs │ │ │ └── SubscriptionExpirationDateChangedIntegrationEvent.cs │ │ └── Tests/ │ │ ├── ArchTests/ │ │ │ ├── Application/ │ │ │ │ └── ApplicationTests.cs │ │ │ ├── CompanyName.MyMeetings.Modules.Payments.ArchTests.csproj │ │ │ ├── Domain/ │ │ │ │ └── DomainTests.cs │ │ │ ├── Module/ │ │ │ │ └── LayersTests.cs │ │ │ └── SeedWork/ │ │ │ └── TestBase.cs │ │ ├── IntegrationTests/ │ │ │ ├── AssemblyInfo.cs │ │ │ ├── CompanyName.MyMeetings.Modules.Payments.IntegrationTests.csproj │ │ │ ├── MeetingFees/ │ │ │ │ └── MeetingFeesTests.cs │ │ │ ├── Payers/ │ │ │ │ ├── PayerSampleData.cs │ │ │ │ └── PayerTests.cs │ │ │ ├── PriceList/ │ │ │ │ └── PriceListHelper.cs │ │ │ ├── SeedWork/ │ │ │ │ ├── EventsBusMock.cs │ │ │ │ ├── ExecutionContextMock.cs │ │ │ │ ├── OutboxMessagesHelper.cs │ │ │ │ └── TestBase.cs │ │ │ └── Subscriptions/ │ │ │ ├── BuySubscriptionTests.cs │ │ │ ├── GetSubscriptionPaymentsProbe.cs │ │ │ ├── SubscriptionLifecycleTests.cs │ │ │ └── SubscriptionPaymentsTests.cs │ │ └── UnitTests/ │ │ ├── CompanyName.MyMeetings.Modules.Payments.Domain.UnitTests.csproj │ │ ├── Payers/ │ │ │ └── PayerTests.cs │ │ ├── PriceListItems/ │ │ │ └── PriceListItemTests.cs │ │ ├── SeedWork/ │ │ │ ├── DomainEventsTestHelper.cs │ │ │ └── TestBase.cs │ │ ├── SubscriptionPayments/ │ │ │ ├── SubscriptionPaymentTests.cs │ │ │ └── SubscriptionPaymentTestsBase.cs │ │ ├── SubscriptionRenewalPayments/ │ │ │ ├── SubscriptionRenewalPaymentTests.cs │ │ │ └── SubscriptionRenewalPaymentTestsBase.cs │ │ └── Subscriptions/ │ │ ├── SubscriptionDateExpirationCalculatorTests.cs │ │ └── SubscriptionTests.cs │ ├── Registrations/ │ │ ├── Application/ │ │ │ ├── CompanyName.MyMeetings.Modules.Registrations.Application.csproj │ │ │ ├── Configuration/ │ │ │ │ ├── Commands/ │ │ │ │ │ ├── ICommandHandler.cs │ │ │ │ │ ├── ICommandsScheduler.cs │ │ │ │ │ └── InternalCommandBase.cs │ │ │ │ └── Queries/ │ │ │ │ └── IQueryHandler.cs │ │ │ ├── Contracts/ │ │ │ │ ├── CommandBase.cs │ │ │ │ ├── CustomClaimTypes.cs │ │ │ │ ├── ICommand.cs │ │ │ │ ├── IQuery.cs │ │ │ │ ├── IRecurringCommand.cs │ │ │ │ ├── IRegistrationsModule.cs │ │ │ │ ├── QueryBase.cs │ │ │ │ └── Roles.cs │ │ │ └── UserRegistrations/ │ │ │ ├── ConfirmUserRegistration/ │ │ │ │ ├── ConfirmUserRegistrationCommand.cs │ │ │ │ ├── ConfirmUserRegistrationCommandHandler.cs │ │ │ │ ├── IUserCreator.cs │ │ │ │ ├── UserRegistrationConfirmedNotification.cs │ │ │ │ └── UserRegistrationConfirmedNotificationHandler.cs │ │ │ ├── GetUserRegistration/ │ │ │ │ ├── GetUserRegistrationQuery.cs │ │ │ │ ├── GetUserRegistrationQueryHandler.cs │ │ │ │ ├── UserRegistrationDto.cs │ │ │ │ └── UserRegistrationProvider.cs │ │ │ ├── RegisterNewUser/ │ │ │ │ ├── NewUserRegisteredEnqueueEmailConfirmationHandler.cs │ │ │ │ ├── NewUserRegisteredNotification.cs │ │ │ │ ├── NewUserRegisteredPublishEventHandler.cs │ │ │ │ ├── PasswordManager.cs │ │ │ │ ├── RegisterNewUserCommand.cs │ │ │ │ └── RegisterNewUserCommandHandler.cs │ │ │ ├── SendUserRegistrationConfirmationEmail/ │ │ │ │ ├── SendUserRegistrationConfirmationEmailCommand.cs │ │ │ │ └── SendUserRegistrationConfirmationEmailCommandHandler.cs │ │ │ └── UsersCounter.cs │ │ ├── Domain/ │ │ │ ├── CompanyName.MyMeetings.Modules.Registrations.Domain.csproj │ │ │ └── UserRegistrations/ │ │ │ ├── Events/ │ │ │ │ ├── NewUserRegisteredDomainEvent.cs │ │ │ │ ├── UserRegistrationConfirmedDomainEvent.cs │ │ │ │ └── UserRegistrationExpiredDomainEvent.cs │ │ │ ├── IUserRegistrationRepository.cs │ │ │ ├── IUsersCounter.cs │ │ │ ├── Rules/ │ │ │ │ ├── UserCannotBeCreatedWhenRegistrationIsNotConfirmedRule.cs │ │ │ │ ├── UserLoginMustBeUniqueRule.cs │ │ │ │ ├── UserRegistrationCannotBeConfirmedAfterExpirationRule.cs │ │ │ │ ├── UserRegistrationCannotBeConfirmedMoreThanOnceRule.cs │ │ │ │ └── UserRegistrationCannotBeExpiredMoreThanOnceRule.cs │ │ │ ├── UserRegistration.cs │ │ │ ├── UserRegistrationId.cs │ │ │ └── UserRegistrationStatus.cs │ │ ├── Infrastructure/ │ │ │ ├── CompanyName.MyMeetings.Modules.Registrations.Infrastructure.csproj │ │ │ ├── Configuration/ │ │ │ │ ├── AllConstructorFinder.cs │ │ │ │ ├── Assemblies.cs │ │ │ │ ├── Commands/ │ │ │ │ │ ├── ICommandHandler.cs │ │ │ │ │ ├── ICommandsScheduler.cs │ │ │ │ │ └── InternalCommandBase.cs │ │ │ │ ├── DataAccess/ │ │ │ │ │ └── DataAccessModule.cs │ │ │ │ ├── Domain/ │ │ │ │ │ └── DomainModule.cs │ │ │ │ ├── Email/ │ │ │ │ │ └── EmailModule.cs │ │ │ │ ├── EventsBus/ │ │ │ │ │ ├── EventsBusModule.cs │ │ │ │ │ ├── EventsBusStartup.cs │ │ │ │ │ └── IntegrationEventGenericHandler.cs │ │ │ │ ├── Logging/ │ │ │ │ │ └── LoggingModule.cs │ │ │ │ ├── Mediation/ │ │ │ │ │ └── MediatorModule.cs │ │ │ │ ├── Processing/ │ │ │ │ │ ├── CommandsExecutor.cs │ │ │ │ │ ├── IRecurringCommand.cs │ │ │ │ │ ├── Inbox/ │ │ │ │ │ │ ├── InboxMessageDto.cs │ │ │ │ │ │ ├── ProcessInboxCommand.cs │ │ │ │ │ │ ├── ProcessInboxCommandHandler.cs │ │ │ │ │ │ └── ProcessInboxJob.cs │ │ │ │ │ ├── InternalCommands/ │ │ │ │ │ │ ├── CommandsScheduler.cs │ │ │ │ │ │ ├── ProcessInternalCommandsCommand.cs │ │ │ │ │ │ ├── ProcessInternalCommandsCommandHandler.cs │ │ │ │ │ │ └── ProcessInternalCommandsJob.cs │ │ │ │ │ ├── LoggingCommandHandlerDecorator.cs │ │ │ │ │ ├── LoggingCommandHandlerWithResultDecorator.cs │ │ │ │ │ ├── Outbox/ │ │ │ │ │ │ ├── OutboxMessageDto.cs │ │ │ │ │ │ ├── OutboxModule.cs │ │ │ │ │ │ ├── ProcessOutboxCommand.cs │ │ │ │ │ │ ├── ProcessOutboxCommandHandler.cs │ │ │ │ │ │ └── ProcessOutboxJob.cs │ │ │ │ │ ├── ProcessingModule.cs │ │ │ │ │ ├── UnitOfWorkCommandHandlerDecorator.cs │ │ │ │ │ ├── UnitOfWorkCommandHandlerWithResultDecorator.cs │ │ │ │ │ ├── ValidationCommandHandlerDecorator.cs │ │ │ │ │ └── ValidationCommandHandlerWithResultDecorator.cs │ │ │ │ ├── Quartz/ │ │ │ │ │ ├── QuartzModule.cs │ │ │ │ │ ├── QuartzStartup.cs │ │ │ │ │ └── SerilogLogProvider.cs │ │ │ │ ├── RegistrationsCompositionRoot.cs │ │ │ │ ├── RegistrationsStartup.cs │ │ │ │ └── UserAccess/ │ │ │ │ └── UserAccessAutofacModule.cs │ │ │ ├── Domain/ │ │ │ │ └── UserRegistrations/ │ │ │ │ ├── UserRegistrationEntityTypeConfiguration.cs │ │ │ │ └── UserRegistrationRepository.cs │ │ │ ├── InternalCommands/ │ │ │ │ └── InternalCommandEntityTypeConfiguration.cs │ │ │ ├── Outbox/ │ │ │ │ ├── OutboxAccessor.cs │ │ │ │ └── OutboxMessageEntityTypeConfiguration.cs │ │ │ ├── RegistrationsContext.cs │ │ │ ├── RegistrationsModule.cs │ │ │ └── Users/ │ │ │ └── UserAccessGateway.cs │ │ ├── IntegrationEvents/ │ │ │ ├── Class1.cs │ │ │ ├── CompanyName.MyMeetings.Modules.Registrations.IntegrationEvents.csproj │ │ │ └── NewUserRegisteredIntegrationEvent.cs │ │ └── Tests/ │ │ ├── ArchTests/ │ │ │ ├── Application/ │ │ │ │ └── ApplicationTests.cs │ │ │ ├── CompanyName.MyMeetings.Modules.Registrations.ArchTests.csproj │ │ │ ├── Domain/ │ │ │ │ └── DomainTests.cs │ │ │ ├── Module/ │ │ │ │ └── LayersTests.cs │ │ │ └── SeedWork/ │ │ │ └── TestBase.cs │ │ ├── IntegrationTests/ │ │ │ ├── AssemblyInfo.cs │ │ │ ├── CompanyNames.MyMeetings.Modules.Registrations.IntegrationTests.csproj │ │ │ ├── SeedWork/ │ │ │ │ ├── ExecutionContextMock.cs │ │ │ │ ├── OutboxMessagesHelper.cs │ │ │ │ └── TestBase.cs │ │ │ └── UserRegistrations/ │ │ │ ├── ConfirmUserRegistrationTests.cs │ │ │ ├── SendUserRegistrationConfirmationEmailTests.cs │ │ │ ├── UserRegistrationSampleData.cs │ │ │ └── UserRegistrationTests.cs │ │ └── UnitTests/ │ │ ├── CompanyName.MyMeetings.Modules.Registrations.Domain.UnitTests.csproj │ │ ├── SeedWork/ │ │ │ ├── DomainEventsTestHelper.cs │ │ │ └── TestBase.cs │ │ └── UserRegistrations/ │ │ └── UserRegistrationTests.cs │ └── UserAccess/ │ ├── Application/ │ │ ├── Authentication/ │ │ │ └── Authenticate/ │ │ │ ├── AuthenticateCommand.cs │ │ │ ├── AuthenticateCommandHandler.cs │ │ │ ├── AuthenticateCommandValidator.cs │ │ │ ├── AuthenticationResult.cs │ │ │ ├── PasswordManager.cs │ │ │ └── UserDto.cs │ │ ├── Authorization/ │ │ │ ├── GetAuthenticatedUserPermissions/ │ │ │ │ ├── GetAuthenticatedUserPermissionsQuery.cs │ │ │ │ └── GetAuthenticatedUserPermissionsQueryHandler.cs │ │ │ └── GetUserPermissions/ │ │ │ ├── GetUserPermissionsQuery.cs │ │ │ ├── GetUserPermissionsQueryHandler.cs │ │ │ └── UserPermissionDto.cs │ │ ├── CompanyName.MyMeetings.Modules.UserAccess.Application.csproj │ │ ├── Configuration/ │ │ │ ├── Commands/ │ │ │ │ ├── ICommandHandler.cs │ │ │ │ ├── ICommandsScheduler.cs │ │ │ │ └── InternalCommandBase.cs │ │ │ └── Queries/ │ │ │ └── IQueryHandler.cs │ │ ├── Contracts/ │ │ │ ├── CommandBase.cs │ │ │ ├── CustomClaimTypes.cs │ │ │ ├── ICommand.cs │ │ │ ├── IQuery.cs │ │ │ ├── IRecurringCommand.cs │ │ │ ├── IUserAccessModule.cs │ │ │ ├── QueryBase.cs │ │ │ └── Roles.cs │ │ ├── Emails/ │ │ │ ├── EmailDto.cs │ │ │ ├── GetAllEmailsQuery.cs │ │ │ └── GetAllEmailsQueryHandler.cs │ │ └── Users/ │ │ ├── AddAdminUser/ │ │ │ ├── AddAdminUserCommand.cs │ │ │ └── AddAdminUserCommandHandler.cs │ │ ├── CreateUser/ │ │ │ ├── CreateUserCommand.cs │ │ │ └── CreateUserCommandHandler.cs │ │ ├── GetAuthenticatedUser/ │ │ │ ├── GetAuthenticatedUserQuery.cs │ │ │ └── GetAuthenticatedUserQueryHandler.cs │ │ └── GetUser/ │ │ ├── GetUserQuery.cs │ │ ├── GetUserQueryHandler.cs │ │ └── UserDto.cs │ ├── Domain/ │ │ ├── CompanyName.MyMeetings.Modules.UserAccess.Domain.csproj │ │ └── Users/ │ │ ├── Events/ │ │ │ └── UserCreatedDomainEvent.cs │ │ ├── IUserRepository.cs │ │ ├── User.cs │ │ ├── UserId.cs │ │ └── UserRole.cs │ ├── Infrastructure/ │ │ ├── CompanyName.MyMeetings.Modules.UserAccess.Infrastructure.csproj │ │ ├── Configuration/ │ │ │ ├── AllConstructorFinder.cs │ │ │ ├── Assemblies.cs │ │ │ ├── DataAccess/ │ │ │ │ └── DataAccessModule.cs │ │ │ ├── Email/ │ │ │ │ └── EmailModule.cs │ │ │ ├── EventsBus/ │ │ │ │ ├── EventsBusModule.cs │ │ │ │ ├── EventsBusStartup.cs │ │ │ │ └── IntegrationEventGenericHandler.cs │ │ │ ├── Identity/ │ │ │ │ └── IdentityConfiguration.cs │ │ │ ├── Logging/ │ │ │ │ └── LoggingModule.cs │ │ │ ├── Mediation/ │ │ │ │ └── MediatorModule.cs │ │ │ ├── Processing/ │ │ │ │ ├── CommandsExecutor.cs │ │ │ │ ├── IRecurringCommand.cs │ │ │ │ ├── Inbox/ │ │ │ │ │ ├── InboxMessageDto.cs │ │ │ │ │ ├── ProcessInboxCommand.cs │ │ │ │ │ ├── ProcessInboxCommandHandler.cs │ │ │ │ │ └── ProcessInboxJob.cs │ │ │ │ ├── InternalCommands/ │ │ │ │ │ ├── CommandsScheduler.cs │ │ │ │ │ ├── ProcessInternalCommandsCommand.cs │ │ │ │ │ ├── ProcessInternalCommandsCommandHandler.cs │ │ │ │ │ └── ProcessInternalCommandsJob.cs │ │ │ │ ├── LoggingCommandHandlerDecorator.cs │ │ │ │ ├── LoggingCommandHandlerWithResultDecorator.cs │ │ │ │ ├── Outbox/ │ │ │ │ │ ├── OutboxMessageDto.cs │ │ │ │ │ ├── OutboxModule.cs │ │ │ │ │ ├── ProcessOutboxCommand.cs │ │ │ │ │ ├── ProcessOutboxCommandHandler.cs │ │ │ │ │ └── ProcessOutboxJob.cs │ │ │ │ ├── ProcessingModule.cs │ │ │ │ ├── UnitOfWorkCommandHandlerDecorator.cs │ │ │ │ ├── UnitOfWorkCommandHandlerWithResultDecorator.cs │ │ │ │ ├── ValidationCommandHandlerDecorator.cs │ │ │ │ └── ValidationCommandHandlerWithResultDecorator.cs │ │ │ ├── Quartz/ │ │ │ │ ├── QuartzModule.cs │ │ │ │ ├── QuartzStartup.cs │ │ │ │ └── SerilogLogProvider.cs │ │ │ ├── Security/ │ │ │ │ ├── AesDataProtector.cs │ │ │ │ ├── IDataProtector.cs │ │ │ │ └── SecurityModule.cs │ │ │ ├── UserAccessCompositionRoot.cs │ │ │ └── UserAccessStartup.cs │ │ ├── Domain/ │ │ │ └── Users/ │ │ │ ├── UserEntityTypeConfiguration.cs │ │ │ └── UserRepository.cs │ │ ├── IdentityServer/ │ │ │ ├── IdentityServerConfig.cs │ │ │ ├── ProfileService.cs │ │ │ └── ResourceOwnerPasswordValidator.cs │ │ ├── InternalCommands/ │ │ │ └── InternalCommandEntityTypeConfiguration.cs │ │ ├── Outbox/ │ │ │ ├── OutboxAccessor.cs │ │ │ └── OutboxMessageEntityTypeConfiguration.cs │ │ ├── UserAccessContext.cs │ │ └── UserAccessModule.cs │ ├── IntegrationEvents/ │ │ └── CompanyName.MyMeetings.Modules.UserAccess.IntegrationEvents.csproj │ └── Tests/ │ ├── ArchTests/ │ │ ├── Application/ │ │ │ └── ApplicationTests.cs │ │ ├── CompanyName.MyMeetings.Modules.UserAccess.ArchTests.csproj │ │ ├── Domain/ │ │ │ └── DomainTests.cs │ │ ├── Module/ │ │ │ └── LayersTests.cs │ │ └── SeedWork/ │ │ └── TestBase.cs │ ├── IntegrationTests/ │ │ ├── AssemblyInfo.cs │ │ ├── CompanyNames.MyMeetings.Modules.UserAccess.IntegrationTests.csproj │ │ ├── SeedWork/ │ │ │ ├── ExecutionContextMock.cs │ │ │ ├── OutboxMessagesHelper.cs │ │ │ └── TestBase.cs │ │ └── Users/ │ │ └── CreateUserTests.cs │ └── UnitTests/ │ ├── CompanyName.MyMeetings.Modules.UserAccess.Domain.UnitTests.csproj │ └── SeedWork/ │ ├── DomainEventsTestHelper.cs │ └── TestBase.cs ├── Tests/ │ ├── ArchTests/ │ │ ├── Api/ │ │ │ └── ApiTests.cs │ │ ├── CompanyName.MyMeetings.ArchTests.csproj │ │ ├── Modules/ │ │ │ └── ModuleTests.cs │ │ └── SeedWork/ │ │ └── TestBase.cs │ ├── IntegrationTests/ │ │ ├── AssemblyInfo.cs │ │ ├── CompanyName.MyMeetings.IntegrationTests.csproj │ │ ├── CreateMeetingGroup/ │ │ │ └── CreateMeetingGroupTests.cs │ │ └── SeedWork/ │ │ ├── ExecutionContextMock.cs │ │ └── TestBase.cs │ └── SUT/ │ ├── CompanyName.MyMeetings.SUT.csproj │ ├── Helpers/ │ │ ├── MeetingGroupsFactory.cs │ │ ├── TestMeetingFactory.cs │ │ ├── TestMeetingGroupManager.cs │ │ ├── TestMeetingManager.cs │ │ ├── TestPaymentsManager.cs │ │ ├── TestPriceListManager.cs │ │ └── UsersFactory.cs │ ├── Scripts/ │ │ └── SeedPermissions.sql │ ├── SeedWork/ │ │ ├── AsyncOperationsHelper.cs │ │ ├── DatabaseCleaner.cs │ │ ├── ExecutionContextMock.cs │ │ ├── Probing/ │ │ │ ├── AssertErrorException.cs │ │ │ ├── IProbe.cs │ │ │ ├── Poller.cs │ │ │ └── Timeout.cs │ │ └── TestBase.cs │ └── TestCases/ │ ├── CleanDatabaseTestCase.cs │ ├── CreateMeeting.cs │ └── OnlyAdminTestCase.cs ├── entrypoint.sh ├── global.json └── stylecop.json