├── .github └── workflows │ └── ci.yml ├── .gitignore ├── README.md └── lessons ├── 02-First_Workflow ├── 02.1-Step_by_step │ └── .github │ │ └── workflows │ │ └── ci.yml └── 02.2-Optimize_feedback_loop │ └── .github │ └── workflows │ └── ci.yml ├── 03-continuous_Integration ├── 03.1-Executing_tests │ ├── .editorconfig │ ├── .github │ │ └── workflows │ │ │ └── ci.yml │ ├── .gitignore │ ├── .scrutinizer.yml │ ├── .semver │ ├── LICENSE │ ├── README.md │ ├── composer.json │ ├── composer.lock │ ├── phpunit.xml │ ├── src │ │ └── Codelyber.php │ └── tests │ │ └── CodelyberTest.php └── 03.3-Build_Matrix │ ├── .editorconfig │ ├── .github │ └── workflows │ │ └── ci.yml │ ├── .gitignore │ ├── .scrutinizer.yml │ ├── .semver │ ├── LICENSE │ ├── README.md │ ├── composer.json │ ├── composer.lock │ ├── phpunit.xml │ ├── src │ └── Codelyber.php │ └── tests │ └── CodelyberTest.php ├── 04-Testing_Infrastructure ├── 04.1-Installing_dependencies_by_hand │ ├── .env │ ├── .github │ │ └── workflows │ │ │ └── ci.yml │ ├── .gitignore │ ├── Dockerfile │ ├── Makefile │ ├── README.md │ ├── apps │ │ ├── backoffice │ │ │ ├── backend │ │ │ │ ├── bin │ │ │ │ │ └── console │ │ │ │ ├── config │ │ │ │ │ ├── bundles.php │ │ │ │ │ ├── routes │ │ │ │ │ │ ├── courses.yaml │ │ │ │ │ │ └── health-check.yaml │ │ │ │ │ ├── services.yaml │ │ │ │ │ ├── services │ │ │ │ │ │ └── framework.yaml │ │ │ │ │ └── services_test.yaml │ │ │ │ ├── public │ │ │ │ │ └── index.php │ │ │ │ └── src │ │ │ │ │ ├── BackofficeBackendKernel.php │ │ │ │ │ └── Controller │ │ │ │ │ ├── Courses │ │ │ │ │ └── CoursesGetController.php │ │ │ │ │ └── HealthCheck │ │ │ │ │ └── HealthCheckGetController.php │ │ │ └── frontend │ │ │ │ ├── bin │ │ │ │ └── console │ │ │ │ ├── config │ │ │ │ ├── bundles.php │ │ │ │ ├── routes │ │ │ │ │ ├── api_courses.yaml │ │ │ │ │ ├── courses.yaml │ │ │ │ │ ├── health-check.yaml │ │ │ │ │ └── home.yaml │ │ │ │ ├── services.yaml │ │ │ │ ├── services │ │ │ │ │ └── framework.yaml │ │ │ │ └── services_test.yaml │ │ │ │ ├── public │ │ │ │ ├── images │ │ │ │ │ └── logo.png │ │ │ │ └── index.php │ │ │ │ ├── src │ │ │ │ ├── BackofficeFrontendKernel.php │ │ │ │ ├── Command │ │ │ │ │ └── ImportCoursesToElasticsearchCommand.php │ │ │ │ └── Controller │ │ │ │ │ ├── Courses │ │ │ │ │ ├── CoursesGetWebController.php │ │ │ │ │ └── CoursesPostWebController.php │ │ │ │ │ ├── HealthCheck │ │ │ │ │ └── HealthCheckGetController.php │ │ │ │ │ └── Home │ │ │ │ │ └── HomeGetWebController.php │ │ │ │ └── templates │ │ │ │ ├── master.html.twig │ │ │ │ ├── pages │ │ │ │ ├── courses │ │ │ │ │ ├── courses.html.twig │ │ │ │ │ └── partials │ │ │ │ │ │ ├── list_courses.html.twig │ │ │ │ │ │ └── new_course_form.html.twig │ │ │ │ └── home.html.twig │ │ │ │ └── partials │ │ │ │ ├── footer.html.twig │ │ │ │ └── header.html.twig │ │ ├── bootstrap.php │ │ └── mooc │ │ │ ├── backend │ │ │ ├── bin │ │ │ │ └── console │ │ │ ├── config │ │ │ │ ├── bundles.php │ │ │ │ ├── routes │ │ │ │ │ ├── courses.yaml │ │ │ │ │ ├── courses_counter.yaml │ │ │ │ │ └── health-check.yaml │ │ │ │ ├── services.yaml │ │ │ │ ├── services │ │ │ │ │ └── framework.yaml │ │ │ │ └── services_test.yaml │ │ │ ├── public │ │ │ │ └── index.php │ │ │ └── src │ │ │ │ ├── Command │ │ │ │ └── DomainEvents │ │ │ │ │ ├── MySql │ │ │ │ │ └── ConsumeMySqlDomainEventsCommand.php │ │ │ │ │ └── RabbitMq │ │ │ │ │ ├── ConfigureRabbitMqCommand.php │ │ │ │ │ ├── ConsumeRabbitMqDomainEventsCommand.php │ │ │ │ │ └── GenerateSupervisorRabbitMqConsumerFilesCommand.php │ │ │ │ ├── Controller │ │ │ │ ├── Courses │ │ │ │ │ └── CoursesPutController.php │ │ │ │ ├── CoursesCounter │ │ │ │ │ └── CoursesCounterGetController.php │ │ │ │ └── HealthCheck │ │ │ │ │ └── HealthCheckGetController.php │ │ │ │ └── MoocBackendKernel.php │ │ │ └── frontend │ │ │ └── src │ │ │ └── .gitkeep │ ├── behat.yml │ ├── composer.json │ ├── composer.lock │ ├── databases │ │ ├── backoffice │ │ │ └── courses.json │ │ └── mooc.sql │ ├── doc │ │ └── endpoints │ │ │ └── backoffice_frontend.http │ ├── docker-compose.yml │ ├── etc │ │ ├── infrastructure │ │ │ ├── nginx │ │ │ │ └── default.conf │ │ │ └── php │ │ │ │ ├── conf.d │ │ │ │ ├── apcu.ini │ │ │ │ ├── opcache.ini │ │ │ │ └── xdebug.ini │ │ │ │ └── php.ini │ │ └── install.sh │ ├── phpunit.xml │ ├── src │ │ ├── Analytics │ │ │ └── DomainEvents │ │ │ │ ├── Application │ │ │ │ └── Store │ │ │ │ │ ├── DomainEventStorer.php │ │ │ │ │ └── StoreDomainEventOnOccurred.php │ │ │ │ └── Domain │ │ │ │ ├── AnalyticsDomainEvent.php │ │ │ │ ├── AnalyticsDomainEventAggregateId.php │ │ │ │ ├── AnalyticsDomainEventBody.php │ │ │ │ ├── AnalyticsDomainEventId.php │ │ │ │ ├── AnalyticsDomainEventName.php │ │ │ │ └── DomainEventsRepository.php │ │ ├── Backoffice │ │ │ ├── Auth │ │ │ │ ├── Application │ │ │ │ │ └── Authenticate │ │ │ │ │ │ ├── AuthenticateUserCommand.php │ │ │ │ │ │ ├── AuthenticateUserCommandHandler.php │ │ │ │ │ │ └── UserAuthenticator.php │ │ │ │ ├── Domain │ │ │ │ │ ├── AuthPassword.php │ │ │ │ │ ├── AuthRepository.php │ │ │ │ │ ├── AuthUser.php │ │ │ │ │ ├── AuthUsername.php │ │ │ │ │ ├── InvalidAuthCredentials.php │ │ │ │ │ └── InvalidAuthUsername.php │ │ │ │ └── Infrastructure │ │ │ │ │ └── Persistence │ │ │ │ │ └── InMemoryAuthRepository.php │ │ │ ├── Courses │ │ │ │ ├── Application │ │ │ │ │ ├── BackofficeCourseResponse.php │ │ │ │ │ ├── BackofficeCoursesResponse.php │ │ │ │ │ ├── Create │ │ │ │ │ │ ├── BackofficeCourseCreator.php │ │ │ │ │ │ └── CreateBackofficeCourseOnCourseCreated.php │ │ │ │ │ ├── SearchAll │ │ │ │ │ │ ├── AllBackofficeCoursesSearcher.php │ │ │ │ │ │ ├── SearchAllBackofficeCoursesQuery.php │ │ │ │ │ │ └── SearchAllBackofficeCoursesQueryHandler.php │ │ │ │ │ └── SearchByCriteria │ │ │ │ │ │ ├── BackofficeCoursesByCriteriaSearcher.php │ │ │ │ │ │ ├── SearchBackofficeCoursesByCriteriaQuery.php │ │ │ │ │ │ └── SearchBackofficeCoursesByCriteriaQueryHandler.php │ │ │ │ ├── Domain │ │ │ │ │ ├── BackofficeCourse.php │ │ │ │ │ └── BackofficeCourseRepository.php │ │ │ │ └── Infrastructure │ │ │ │ │ └── Persistence │ │ │ │ │ ├── Doctrine │ │ │ │ │ └── BackofficeCourse.orm.xml │ │ │ │ │ ├── ElasticsearchBackofficeCourseRepository.php │ │ │ │ │ ├── InMemoryCacheBackofficeCourseRepository.php │ │ │ │ │ └── MySqlBackofficeCourseRepository.php │ │ │ └── Shared │ │ │ │ └── Infrastructure │ │ │ │ └── Symfony │ │ │ │ └── DependencyInjection │ │ │ │ └── backoffice_services.yaml │ │ ├── Mooc │ │ │ ├── Courses │ │ │ │ ├── Application │ │ │ │ │ ├── Create │ │ │ │ │ │ ├── CourseCreator.php │ │ │ │ │ │ ├── CreateCourseCommand.php │ │ │ │ │ │ └── CreateCourseCommandHandler.php │ │ │ │ │ ├── Find │ │ │ │ │ │ └── CourseFinder.php │ │ │ │ │ └── Update │ │ │ │ │ │ └── CourseRenamer.php │ │ │ │ ├── Domain │ │ │ │ │ ├── Course.php │ │ │ │ │ ├── CourseCreatedDomainEvent.php │ │ │ │ │ ├── CourseDuration.php │ │ │ │ │ ├── CourseName.php │ │ │ │ │ ├── CourseNotExist.php │ │ │ │ │ └── CourseRepository.php │ │ │ │ └── Infrastructure │ │ │ │ │ └── Persistence │ │ │ │ │ ├── Doctrine │ │ │ │ │ ├── Course.orm.xml │ │ │ │ │ ├── CourseDuration.orm.xml │ │ │ │ │ ├── CourseIdType.php │ │ │ │ │ └── CourseName.orm.xml │ │ │ │ │ ├── DoctrineCourseRepository.php │ │ │ │ │ ├── Eloquent │ │ │ │ │ └── CourseEloquentModel.php │ │ │ │ │ ├── EloquentCourseRepository.php │ │ │ │ │ └── FileCourseRepository.php │ │ │ ├── CoursesCounter │ │ │ │ ├── Application │ │ │ │ │ ├── Find │ │ │ │ │ │ ├── CoursesCounterFinder.php │ │ │ │ │ │ ├── CoursesCounterResponse.php │ │ │ │ │ │ ├── FindCoursesCounterQuery.php │ │ │ │ │ │ └── FindCoursesCounterQueryHandler.php │ │ │ │ │ └── Increment │ │ │ │ │ │ ├── CoursesCounterIncrementer.php │ │ │ │ │ │ └── IncrementCoursesCounterOnCourseCreated.php │ │ │ │ ├── Domain │ │ │ │ │ ├── CoursesCounter.php │ │ │ │ │ ├── CoursesCounterId.php │ │ │ │ │ ├── CoursesCounterIncrementedDomainEvent.php │ │ │ │ │ ├── CoursesCounterNotExist.php │ │ │ │ │ ├── CoursesCounterRepository.php │ │ │ │ │ └── CoursesCounterTotal.php │ │ │ │ └── Infrastructure │ │ │ │ │ └── Persistence │ │ │ │ │ ├── Doctrine │ │ │ │ │ ├── CourseCounterIdType.php │ │ │ │ │ ├── CourseIdsType.php │ │ │ │ │ ├── CoursesCounter.orm.xml │ │ │ │ │ └── CoursesCounterTotal.orm.xml │ │ │ │ │ └── DoctrineCoursesCounterRepository.php │ │ │ ├── Notifications │ │ │ │ └── Application │ │ │ │ │ ├── SendNewCommentReplyEmail │ │ │ │ │ └── .gitkeep │ │ │ │ │ ├── SendNewCommentReplyPush │ │ │ │ │ └── .gitkeep │ │ │ │ │ └── SendResetPasswordEmail │ │ │ │ │ └── .gitkeep │ │ │ ├── Shared │ │ │ │ ├── Domain │ │ │ │ │ └── Course │ │ │ │ │ │ └── CourseId.php │ │ │ │ └── Infrastructure │ │ │ │ │ ├── Doctrine │ │ │ │ │ ├── DbalTypesSearcher.php │ │ │ │ │ ├── DoctrinePrefixesSearcher.php │ │ │ │ │ └── MoocEntityManagerFactory.php │ │ │ │ │ └── Symfony │ │ │ │ │ └── DependencyInjection │ │ │ │ │ └── mooc_services.yaml │ │ │ └── Videos │ │ │ │ ├── Application │ │ │ │ └── .gitkeep │ │ │ │ ├── Domain │ │ │ │ └── .gitkeep │ │ │ │ └── Infrastructure │ │ │ │ └── .gitkeep │ │ ├── Retention │ │ │ ├── Campaign │ │ │ │ ├── Application │ │ │ │ │ ├── NewCourseAvailable │ │ │ │ │ │ ├── Schedule │ │ │ │ │ │ │ └── .gitkeep │ │ │ │ │ │ └── Trigger │ │ │ │ │ │ │ └── .gitkeep │ │ │ │ │ └── WelcomeUser │ │ │ │ │ │ └── Trigger │ │ │ │ │ │ └── .gitkeep │ │ │ │ ├── Domain │ │ │ │ │ └── .gitkeep │ │ │ │ └── Infrastructure │ │ │ │ │ └── .gitkeep │ │ │ ├── Email │ │ │ │ ├── Application │ │ │ │ │ ├── SendNewCourseAvailable │ │ │ │ │ │ └── .gitkeep │ │ │ │ │ └── SendWelcomeUser │ │ │ │ │ │ └── .gitkeep │ │ │ │ ├── Domain │ │ │ │ │ └── .gitkeep │ │ │ │ └── Infrastructure │ │ │ │ │ └── .gitkeep │ │ │ ├── Push │ │ │ │ ├── Application │ │ │ │ │ └── SendNewCourseAvailable │ │ │ │ │ │ └── .gitkeep │ │ │ │ ├── Domain │ │ │ │ │ └── .gitkeep │ │ │ │ └── Infrastructure │ │ │ │ │ └── .gitkeep │ │ │ └── Sms │ │ │ │ ├── Application │ │ │ │ └── .gitkeep │ │ │ │ ├── Domain │ │ │ │ └── .gitkeep │ │ │ │ └── Infrastructure │ │ │ │ └── .gitkeep │ │ └── Shared │ │ │ ├── Domain │ │ │ ├── Aggregate │ │ │ │ └── AggregateRoot.php │ │ │ ├── Assert.php │ │ │ ├── Bus │ │ │ │ ├── Command │ │ │ │ │ ├── Command.php │ │ │ │ │ ├── CommandBus.php │ │ │ │ │ └── CommandHandler.php │ │ │ │ ├── Event │ │ │ │ │ ├── DomainEvent.php │ │ │ │ │ ├── DomainEventSubscriber.php │ │ │ │ │ └── EventBus.php │ │ │ │ └── Query │ │ │ │ │ ├── Query.php │ │ │ │ │ ├── QueryBus.php │ │ │ │ │ ├── QueryHandler.php │ │ │ │ │ └── Response.php │ │ │ ├── Collection.php │ │ │ ├── Criteria │ │ │ │ ├── Criteria.php │ │ │ │ ├── Filter.php │ │ │ │ ├── FilterField.php │ │ │ │ ├── FilterOperator.php │ │ │ │ ├── FilterValue.php │ │ │ │ ├── Filters.php │ │ │ │ ├── Order.php │ │ │ │ ├── OrderBy.php │ │ │ │ └── OrderType.php │ │ │ ├── DomainError.php │ │ │ ├── Logger.php │ │ │ ├── Monitoring.php │ │ │ ├── RandomNumberGenerator.php │ │ │ ├── Utils.php │ │ │ ├── UuidGenerator.php │ │ │ └── ValueObject │ │ │ │ ├── Enum.php │ │ │ │ ├── IntValueObject.php │ │ │ │ ├── StringValueObject.php │ │ │ │ └── Uuid.php │ │ │ └── Infrastructure │ │ │ ├── Bus │ │ │ ├── CallableFirstParameterExtractor.php │ │ │ ├── Command │ │ │ │ ├── CommandNotRegisteredError.php │ │ │ │ └── InMemorySymfonyCommandBus.php │ │ │ ├── Event │ │ │ │ ├── DomainEventJsonDeserializer.php │ │ │ │ ├── DomainEventJsonSerializer.php │ │ │ │ ├── DomainEventMapping.php │ │ │ │ ├── DomainEventSubscriberLocator.php │ │ │ │ ├── InMemory │ │ │ │ │ └── InMemorySymfonyEventBus.php │ │ │ │ ├── MySql │ │ │ │ │ ├── MySqlDoctrineDomainEventsConsumer.php │ │ │ │ │ └── MySqlDoctrineEventBus.php │ │ │ │ └── RabbitMq │ │ │ │ │ ├── RabbitMqConfigurer.php │ │ │ │ │ ├── RabbitMqConnection.php │ │ │ │ │ ├── RabbitMqDomainEventsConsumer.php │ │ │ │ │ ├── RabbitMqEventBus.php │ │ │ │ │ ├── RabbitMqExchangeNameFormatter.php │ │ │ │ │ └── RabbitMqQueueNameFormatter.php │ │ │ └── Query │ │ │ │ ├── InMemorySymfonyQueryBus.php │ │ │ │ └── QueryNotRegisteredError.php │ │ │ ├── Doctrine │ │ │ ├── DatabaseConnections.php │ │ │ ├── Dbal │ │ │ │ ├── DbalCustomTypesRegistrar.php │ │ │ │ └── DoctrineCustomType.php │ │ │ └── DoctrineEntityManagerFactory.php │ │ │ ├── Elasticsearch │ │ │ ├── ElasticsearchClient.php │ │ │ └── ElasticsearchClientFactory.php │ │ │ ├── Logger │ │ │ └── MonologLogger.php │ │ │ ├── Persistence │ │ │ ├── Doctrine │ │ │ │ ├── DoctrineCriteriaConverter.php │ │ │ │ ├── DoctrineRepository.php │ │ │ │ └── UuidType.php │ │ │ └── Elasticsearch │ │ │ │ ├── ElasticQueryGenerator.php │ │ │ │ ├── ElasticsearchCriteriaConverter.php │ │ │ │ └── ElasticsearchRepository.php │ │ │ ├── PhpRandomNumberGenerator.php │ │ │ ├── RamseyUuidGenerator.php │ │ │ └── Symfony │ │ │ ├── AddJsonBodyToRequestListener.php │ │ │ ├── ApiController.php │ │ │ ├── ApiExceptionListener.php │ │ │ ├── ApiExceptionsHttpStatusCodeMapping.php │ │ │ ├── BasicHttpAuthMiddleware.php │ │ │ ├── FlashSession.php │ │ │ └── WebController.php │ └── tests │ │ ├── apps │ │ ├── backoffice │ │ │ ├── backend │ │ │ │ └── .gitkeep │ │ │ └── frontend │ │ │ │ └── .gitkeep │ │ └── mooc │ │ │ ├── backend │ │ │ ├── features │ │ │ │ ├── courses │ │ │ │ │ └── course_put.feature │ │ │ │ ├── courses_counter │ │ │ │ │ └── courses_counter_get.feature │ │ │ │ └── health_check │ │ │ │ │ └── health_check_get.feature │ │ │ └── mooc_backend.yml │ │ │ └── frontend │ │ │ └── .gitkeep │ │ └── src │ │ ├── Backoffice │ │ ├── Auth │ │ │ ├── Application │ │ │ │ └── Authenticate │ │ │ │ │ ├── AuthenticateUserCommandHandlerTest.php │ │ │ │ │ └── AuthenticateUserCommandMother.php │ │ │ ├── AuthModuleUnitTestCase.php │ │ │ └── Domain │ │ │ │ ├── AuthPasswordMother.php │ │ │ │ ├── AuthUserMother.php │ │ │ │ └── AuthUsernameMother.php │ │ └── Courses │ │ │ ├── BackofficeCoursesModuleInfrastructureTestCase.php │ │ │ ├── Domain │ │ │ ├── BackofficeCourseCriteriaMother.php │ │ │ └── BackofficeCourseMother.php │ │ │ └── Infrastructure │ │ │ └── Persistence │ │ │ └── MySqlBackofficeCourseRepositoryTest.php │ │ ├── Mooc │ │ ├── Courses │ │ │ ├── Application │ │ │ │ ├── Create │ │ │ │ │ ├── CreateCourseCommandHandlerTest.php │ │ │ │ │ └── CreateCourseCommandMother.php │ │ │ │ └── Update │ │ │ │ │ └── CourseRenamerTest.php │ │ │ ├── CoursesModuleInfrastructureTestCase.php │ │ │ ├── CoursesModuleUnitTestCase.php │ │ │ ├── Domain │ │ │ │ ├── CourseCreatedDomainEventMother.php │ │ │ │ ├── CourseDurationMother.php │ │ │ │ ├── CourseIdMother.php │ │ │ │ ├── CourseMother.php │ │ │ │ └── CourseNameMother.php │ │ │ └── Infrastructure │ │ │ │ └── Persistence │ │ │ │ └── CourseRepositoryTest.php │ │ ├── CoursesCounter │ │ │ ├── Application │ │ │ │ ├── Find │ │ │ │ │ ├── CoursesCounterResponseMother.php │ │ │ │ │ └── FindCoursesCounterQueryHandlerTest.php │ │ │ │ └── Increment │ │ │ │ │ └── IncrementCoursesCounterOnCourseCreatedTest.php │ │ │ ├── CoursesCounterModuleUnitTestCase.php │ │ │ └── Domain │ │ │ │ ├── CoursesCounterIdMother.php │ │ │ │ ├── CoursesCounterIncrementedDomainEventMother.php │ │ │ │ ├── CoursesCounterMother.php │ │ │ │ └── CoursesCounterTotalMother.php │ │ ├── Shared │ │ │ ├── Domain │ │ │ │ └── .gitkeep │ │ │ └── Infrastructure │ │ │ │ └── PhpUnit │ │ │ │ ├── MoocContextInfrastructureTestCase.php │ │ │ │ └── MoocEnvironmentArranger.php │ │ └── Videos │ │ │ ├── Application │ │ │ └── .gitkeep │ │ │ ├── Domain │ │ │ └── .gitkeep │ │ │ └── Infrastructure │ │ │ └── .gitkeep │ │ └── Shared │ │ ├── Domain │ │ ├── Criteria │ │ │ ├── CriteriaMother.php │ │ │ ├── FilterFieldMother.php │ │ │ ├── FilterMother.php │ │ │ ├── FilterValueMother.php │ │ │ ├── FiltersMother.php │ │ │ ├── OrderByMother.php │ │ │ └── OrderMother.php │ │ ├── DuplicatorMother.php │ │ ├── IntegerMother.php │ │ ├── MotherCreator.php │ │ ├── RandomElementPicker.php │ │ ├── Repeater.php │ │ ├── TestUtils.php │ │ ├── UuidMother.php │ │ └── WordMother.php │ │ └── Infrastructure │ │ ├── Arranger │ │ └── EnvironmentArranger.php │ │ ├── Behat │ │ ├── ApiContext.php │ │ └── ApplicationFeatureContext.php │ │ ├── Bus │ │ ├── Command │ │ │ ├── FakeCommand.php │ │ │ └── InMemorySymfonyCommandBusTest.php │ │ ├── Event │ │ │ ├── MySql │ │ │ │ └── MySqlDoctrineEventBusTest.php │ │ │ └── RabbitMq │ │ │ │ ├── RabbitMqEventBusTest.php │ │ │ │ └── TestAllWorksOnRabbitMqEventsPublished.php │ │ └── Query │ │ │ ├── FakeQuery.php │ │ │ ├── FakeResponse.php │ │ │ └── InMemorySymfonyQueryBusTest.php │ │ ├── ConstantRandomNumberGenerator.php │ │ ├── Doctrine │ │ └── DatabaseCleaner.php │ │ ├── Mink │ │ ├── MinkHelper.php │ │ └── MinkSessionRequestHelper.php │ │ ├── Mockery │ │ └── CodelyTvMatcherIsSimilar.php │ │ └── PhpUnit │ │ ├── Comparator │ │ ├── AggregateRootArraySimilarComparator.php │ │ ├── AggregateRootSimilarComparator.php │ │ ├── DateTimeSimilarComparator.php │ │ ├── DateTimeStringSimilarComparator.php │ │ ├── DomainEventArraySimilarComparator.php │ │ └── DomainEventSimilarComparator.php │ │ ├── Constraint │ │ └── CodelyTvConstraintIsSimilar.php │ │ ├── InfrastructureTestCase.php │ │ └── UnitTestCase.php └── 04.2-Installing_dependencies_by_docker │ ├── .env │ ├── .github │ └── workflows │ │ └── ci.yml │ ├── .gitignore │ ├── Dockerfile │ ├── Makefile │ ├── README.md │ ├── apps │ ├── backoffice │ │ ├── backend │ │ │ ├── bin │ │ │ │ └── console │ │ │ ├── config │ │ │ │ ├── bundles.php │ │ │ │ ├── routes │ │ │ │ │ ├── courses.yaml │ │ │ │ │ └── health-check.yaml │ │ │ │ ├── services.yaml │ │ │ │ ├── services │ │ │ │ │ └── framework.yaml │ │ │ │ └── services_test.yaml │ │ │ ├── public │ │ │ │ └── index.php │ │ │ └── src │ │ │ │ ├── BackofficeBackendKernel.php │ │ │ │ └── Controller │ │ │ │ ├── Courses │ │ │ │ └── CoursesGetController.php │ │ │ │ └── HealthCheck │ │ │ │ └── HealthCheckGetController.php │ │ └── frontend │ │ │ ├── bin │ │ │ └── console │ │ │ ├── config │ │ │ ├── bundles.php │ │ │ ├── routes │ │ │ │ ├── api_courses.yaml │ │ │ │ ├── courses.yaml │ │ │ │ ├── health-check.yaml │ │ │ │ └── home.yaml │ │ │ ├── services.yaml │ │ │ ├── services │ │ │ │ └── framework.yaml │ │ │ └── services_test.yaml │ │ │ ├── public │ │ │ ├── images │ │ │ │ └── logo.png │ │ │ └── index.php │ │ │ ├── src │ │ │ ├── BackofficeFrontendKernel.php │ │ │ ├── Command │ │ │ │ └── ImportCoursesToElasticsearchCommand.php │ │ │ └── Controller │ │ │ │ ├── Courses │ │ │ │ ├── CoursesGetWebController.php │ │ │ │ └── CoursesPostWebController.php │ │ │ │ ├── HealthCheck │ │ │ │ └── HealthCheckGetController.php │ │ │ │ └── Home │ │ │ │ └── HomeGetWebController.php │ │ │ └── templates │ │ │ ├── master.html.twig │ │ │ ├── pages │ │ │ ├── courses │ │ │ │ ├── courses.html.twig │ │ │ │ └── partials │ │ │ │ │ ├── list_courses.html.twig │ │ │ │ │ └── new_course_form.html.twig │ │ │ └── home.html.twig │ │ │ └── partials │ │ │ ├── footer.html.twig │ │ │ └── header.html.twig │ ├── bootstrap.php │ └── mooc │ │ ├── backend │ │ ├── bin │ │ │ └── console │ │ ├── config │ │ │ ├── bundles.php │ │ │ ├── routes │ │ │ │ ├── courses.yaml │ │ │ │ ├── courses_counter.yaml │ │ │ │ └── health-check.yaml │ │ │ ├── services.yaml │ │ │ ├── services │ │ │ │ └── framework.yaml │ │ │ └── services_test.yaml │ │ ├── public │ │ │ └── index.php │ │ └── src │ │ │ ├── Command │ │ │ └── DomainEvents │ │ │ │ ├── MySql │ │ │ │ └── ConsumeMySqlDomainEventsCommand.php │ │ │ │ └── RabbitMq │ │ │ │ ├── ConfigureRabbitMqCommand.php │ │ │ │ ├── ConsumeRabbitMqDomainEventsCommand.php │ │ │ │ └── GenerateSupervisorRabbitMqConsumerFilesCommand.php │ │ │ ├── Controller │ │ │ ├── Courses │ │ │ │ └── CoursesPutController.php │ │ │ ├── CoursesCounter │ │ │ │ └── CoursesCounterGetController.php │ │ │ └── HealthCheck │ │ │ │ └── HealthCheckGetController.php │ │ │ └── MoocBackendKernel.php │ │ └── frontend │ │ └── src │ │ └── .gitkeep │ ├── behat.yml │ ├── composer.json │ ├── composer.lock │ ├── databases │ ├── backoffice │ │ └── courses.json │ └── mooc.sql │ ├── doc │ └── endpoints │ │ └── backoffice_frontend.http │ ├── docker-compose.yml │ ├── etc │ ├── infrastructure │ │ ├── nginx │ │ │ └── default.conf │ │ └── php │ │ │ ├── conf.d │ │ │ ├── apcu.ini │ │ │ ├── opcache.ini │ │ │ └── xdebug.ini │ │ │ └── php.ini │ └── install.sh │ ├── phpunit.xml │ ├── src │ ├── Analytics │ │ └── DomainEvents │ │ │ ├── Application │ │ │ └── Store │ │ │ │ ├── DomainEventStorer.php │ │ │ │ └── StoreDomainEventOnOccurred.php │ │ │ └── Domain │ │ │ ├── AnalyticsDomainEvent.php │ │ │ ├── AnalyticsDomainEventAggregateId.php │ │ │ ├── AnalyticsDomainEventBody.php │ │ │ ├── AnalyticsDomainEventId.php │ │ │ ├── AnalyticsDomainEventName.php │ │ │ └── DomainEventsRepository.php │ ├── Backoffice │ │ ├── Auth │ │ │ ├── Application │ │ │ │ └── Authenticate │ │ │ │ │ ├── AuthenticateUserCommand.php │ │ │ │ │ ├── AuthenticateUserCommandHandler.php │ │ │ │ │ └── UserAuthenticator.php │ │ │ ├── Domain │ │ │ │ ├── AuthPassword.php │ │ │ │ ├── AuthRepository.php │ │ │ │ ├── AuthUser.php │ │ │ │ ├── AuthUsername.php │ │ │ │ ├── InvalidAuthCredentials.php │ │ │ │ └── InvalidAuthUsername.php │ │ │ └── Infrastructure │ │ │ │ └── Persistence │ │ │ │ └── InMemoryAuthRepository.php │ │ ├── Courses │ │ │ ├── Application │ │ │ │ ├── BackofficeCourseResponse.php │ │ │ │ ├── BackofficeCoursesResponse.php │ │ │ │ ├── Create │ │ │ │ │ ├── BackofficeCourseCreator.php │ │ │ │ │ └── CreateBackofficeCourseOnCourseCreated.php │ │ │ │ ├── SearchAll │ │ │ │ │ ├── AllBackofficeCoursesSearcher.php │ │ │ │ │ ├── SearchAllBackofficeCoursesQuery.php │ │ │ │ │ └── SearchAllBackofficeCoursesQueryHandler.php │ │ │ │ └── SearchByCriteria │ │ │ │ │ ├── BackofficeCoursesByCriteriaSearcher.php │ │ │ │ │ ├── SearchBackofficeCoursesByCriteriaQuery.php │ │ │ │ │ └── SearchBackofficeCoursesByCriteriaQueryHandler.php │ │ │ ├── Domain │ │ │ │ ├── BackofficeCourse.php │ │ │ │ └── BackofficeCourseRepository.php │ │ │ └── Infrastructure │ │ │ │ └── Persistence │ │ │ │ ├── Doctrine │ │ │ │ └── BackofficeCourse.orm.xml │ │ │ │ ├── ElasticsearchBackofficeCourseRepository.php │ │ │ │ ├── InMemoryCacheBackofficeCourseRepository.php │ │ │ │ └── MySqlBackofficeCourseRepository.php │ │ └── Shared │ │ │ └── Infrastructure │ │ │ └── Symfony │ │ │ └── DependencyInjection │ │ │ └── backoffice_services.yaml │ ├── Mooc │ │ ├── Courses │ │ │ ├── Application │ │ │ │ ├── Create │ │ │ │ │ ├── CourseCreator.php │ │ │ │ │ ├── CreateCourseCommand.php │ │ │ │ │ └── CreateCourseCommandHandler.php │ │ │ │ ├── Find │ │ │ │ │ └── CourseFinder.php │ │ │ │ └── Update │ │ │ │ │ └── CourseRenamer.php │ │ │ ├── Domain │ │ │ │ ├── Course.php │ │ │ │ ├── CourseCreatedDomainEvent.php │ │ │ │ ├── CourseDuration.php │ │ │ │ ├── CourseName.php │ │ │ │ ├── CourseNotExist.php │ │ │ │ └── CourseRepository.php │ │ │ └── Infrastructure │ │ │ │ └── Persistence │ │ │ │ ├── Doctrine │ │ │ │ ├── Course.orm.xml │ │ │ │ ├── CourseDuration.orm.xml │ │ │ │ ├── CourseIdType.php │ │ │ │ └── CourseName.orm.xml │ │ │ │ ├── DoctrineCourseRepository.php │ │ │ │ ├── Eloquent │ │ │ │ └── CourseEloquentModel.php │ │ │ │ ├── EloquentCourseRepository.php │ │ │ │ └── FileCourseRepository.php │ │ ├── CoursesCounter │ │ │ ├── Application │ │ │ │ ├── Find │ │ │ │ │ ├── CoursesCounterFinder.php │ │ │ │ │ ├── CoursesCounterResponse.php │ │ │ │ │ ├── FindCoursesCounterQuery.php │ │ │ │ │ └── FindCoursesCounterQueryHandler.php │ │ │ │ └── Increment │ │ │ │ │ ├── CoursesCounterIncrementer.php │ │ │ │ │ └── IncrementCoursesCounterOnCourseCreated.php │ │ │ ├── Domain │ │ │ │ ├── CoursesCounter.php │ │ │ │ ├── CoursesCounterId.php │ │ │ │ ├── CoursesCounterIncrementedDomainEvent.php │ │ │ │ ├── CoursesCounterNotExist.php │ │ │ │ ├── CoursesCounterRepository.php │ │ │ │ └── CoursesCounterTotal.php │ │ │ └── Infrastructure │ │ │ │ └── Persistence │ │ │ │ ├── Doctrine │ │ │ │ ├── CourseCounterIdType.php │ │ │ │ ├── CourseIdsType.php │ │ │ │ ├── CoursesCounter.orm.xml │ │ │ │ └── CoursesCounterTotal.orm.xml │ │ │ │ └── DoctrineCoursesCounterRepository.php │ │ ├── Notifications │ │ │ └── Application │ │ │ │ ├── SendNewCommentReplyEmail │ │ │ │ └── .gitkeep │ │ │ │ ├── SendNewCommentReplyPush │ │ │ │ └── .gitkeep │ │ │ │ └── SendResetPasswordEmail │ │ │ │ └── .gitkeep │ │ ├── Shared │ │ │ ├── Domain │ │ │ │ └── Course │ │ │ │ │ └── CourseId.php │ │ │ └── Infrastructure │ │ │ │ ├── Doctrine │ │ │ │ ├── DbalTypesSearcher.php │ │ │ │ ├── DoctrinePrefixesSearcher.php │ │ │ │ └── MoocEntityManagerFactory.php │ │ │ │ └── Symfony │ │ │ │ └── DependencyInjection │ │ │ │ └── mooc_services.yaml │ │ └── Videos │ │ │ ├── Application │ │ │ └── .gitkeep │ │ │ ├── Domain │ │ │ └── .gitkeep │ │ │ └── Infrastructure │ │ │ └── .gitkeep │ ├── Retention │ │ ├── Campaign │ │ │ ├── Application │ │ │ │ ├── NewCourseAvailable │ │ │ │ │ ├── Schedule │ │ │ │ │ │ └── .gitkeep │ │ │ │ │ └── Trigger │ │ │ │ │ │ └── .gitkeep │ │ │ │ └── WelcomeUser │ │ │ │ │ └── Trigger │ │ │ │ │ └── .gitkeep │ │ │ ├── Domain │ │ │ │ └── .gitkeep │ │ │ └── Infrastructure │ │ │ │ └── .gitkeep │ │ ├── Email │ │ │ ├── Application │ │ │ │ ├── SendNewCourseAvailable │ │ │ │ │ └── .gitkeep │ │ │ │ └── SendWelcomeUser │ │ │ │ │ └── .gitkeep │ │ │ ├── Domain │ │ │ │ └── .gitkeep │ │ │ └── Infrastructure │ │ │ │ └── .gitkeep │ │ ├── Push │ │ │ ├── Application │ │ │ │ └── SendNewCourseAvailable │ │ │ │ │ └── .gitkeep │ │ │ ├── Domain │ │ │ │ └── .gitkeep │ │ │ └── Infrastructure │ │ │ │ └── .gitkeep │ │ └── Sms │ │ │ ├── Application │ │ │ └── .gitkeep │ │ │ ├── Domain │ │ │ └── .gitkeep │ │ │ └── Infrastructure │ │ │ └── .gitkeep │ └── Shared │ │ ├── Domain │ │ ├── Aggregate │ │ │ └── AggregateRoot.php │ │ ├── Assert.php │ │ ├── Bus │ │ │ ├── Command │ │ │ │ ├── Command.php │ │ │ │ ├── CommandBus.php │ │ │ │ └── CommandHandler.php │ │ │ ├── Event │ │ │ │ ├── DomainEvent.php │ │ │ │ ├── DomainEventSubscriber.php │ │ │ │ └── EventBus.php │ │ │ └── Query │ │ │ │ ├── Query.php │ │ │ │ ├── QueryBus.php │ │ │ │ ├── QueryHandler.php │ │ │ │ └── Response.php │ │ ├── Collection.php │ │ ├── Criteria │ │ │ ├── Criteria.php │ │ │ ├── Filter.php │ │ │ ├── FilterField.php │ │ │ ├── FilterOperator.php │ │ │ ├── FilterValue.php │ │ │ ├── Filters.php │ │ │ ├── Order.php │ │ │ ├── OrderBy.php │ │ │ └── OrderType.php │ │ ├── DomainError.php │ │ ├── Logger.php │ │ ├── Monitoring.php │ │ ├── RandomNumberGenerator.php │ │ ├── Utils.php │ │ ├── UuidGenerator.php │ │ └── ValueObject │ │ │ ├── Enum.php │ │ │ ├── IntValueObject.php │ │ │ ├── StringValueObject.php │ │ │ └── Uuid.php │ │ └── Infrastructure │ │ ├── Bus │ │ ├── CallableFirstParameterExtractor.php │ │ ├── Command │ │ │ ├── CommandNotRegisteredError.php │ │ │ └── InMemorySymfonyCommandBus.php │ │ ├── Event │ │ │ ├── DomainEventJsonDeserializer.php │ │ │ ├── DomainEventJsonSerializer.php │ │ │ ├── DomainEventMapping.php │ │ │ ├── DomainEventSubscriberLocator.php │ │ │ ├── InMemory │ │ │ │ └── InMemorySymfonyEventBus.php │ │ │ ├── MySql │ │ │ │ ├── MySqlDoctrineDomainEventsConsumer.php │ │ │ │ └── MySqlDoctrineEventBus.php │ │ │ └── RabbitMq │ │ │ │ ├── RabbitMqConfigurer.php │ │ │ │ ├── RabbitMqConnection.php │ │ │ │ ├── RabbitMqDomainEventsConsumer.php │ │ │ │ ├── RabbitMqEventBus.php │ │ │ │ ├── RabbitMqExchangeNameFormatter.php │ │ │ │ └── RabbitMqQueueNameFormatter.php │ │ └── Query │ │ │ ├── InMemorySymfonyQueryBus.php │ │ │ └── QueryNotRegisteredError.php │ │ ├── Doctrine │ │ ├── DatabaseConnections.php │ │ ├── Dbal │ │ │ ├── DbalCustomTypesRegistrar.php │ │ │ └── DoctrineCustomType.php │ │ └── DoctrineEntityManagerFactory.php │ │ ├── Elasticsearch │ │ ├── ElasticsearchClient.php │ │ └── ElasticsearchClientFactory.php │ │ ├── Logger │ │ └── MonologLogger.php │ │ ├── Persistence │ │ ├── Doctrine │ │ │ ├── DoctrineCriteriaConverter.php │ │ │ ├── DoctrineRepository.php │ │ │ └── UuidType.php │ │ └── Elasticsearch │ │ │ ├── ElasticQueryGenerator.php │ │ │ ├── ElasticsearchCriteriaConverter.php │ │ │ └── ElasticsearchRepository.php │ │ ├── PhpRandomNumberGenerator.php │ │ ├── RamseyUuidGenerator.php │ │ └── Symfony │ │ ├── AddJsonBodyToRequestListener.php │ │ ├── ApiController.php │ │ ├── ApiExceptionListener.php │ │ ├── ApiExceptionsHttpStatusCodeMapping.php │ │ ├── BasicHttpAuthMiddleware.php │ │ ├── FlashSession.php │ │ └── WebController.php │ └── tests │ ├── apps │ ├── backoffice │ │ ├── backend │ │ │ └── .gitkeep │ │ └── frontend │ │ │ └── .gitkeep │ └── mooc │ │ ├── backend │ │ ├── features │ │ │ ├── courses │ │ │ │ └── course_put.feature │ │ │ ├── courses_counter │ │ │ │ └── courses_counter_get.feature │ │ │ └── health_check │ │ │ │ └── health_check_get.feature │ │ └── mooc_backend.yml │ │ └── frontend │ │ └── .gitkeep │ └── src │ ├── Backoffice │ ├── Auth │ │ ├── Application │ │ │ └── Authenticate │ │ │ │ ├── AuthenticateUserCommandHandlerTest.php │ │ │ │ └── AuthenticateUserCommandMother.php │ │ ├── AuthModuleUnitTestCase.php │ │ └── Domain │ │ │ ├── AuthPasswordMother.php │ │ │ ├── AuthUserMother.php │ │ │ └── AuthUsernameMother.php │ └── Courses │ │ ├── BackofficeCoursesModuleInfrastructureTestCase.php │ │ ├── Domain │ │ ├── BackofficeCourseCriteriaMother.php │ │ └── BackofficeCourseMother.php │ │ └── Infrastructure │ │ └── Persistence │ │ └── MySqlBackofficeCourseRepositoryTest.php │ ├── Mooc │ ├── Courses │ │ ├── Application │ │ │ ├── Create │ │ │ │ ├── CreateCourseCommandHandlerTest.php │ │ │ │ └── CreateCourseCommandMother.php │ │ │ └── Update │ │ │ │ └── CourseRenamerTest.php │ │ ├── CoursesModuleInfrastructureTestCase.php │ │ ├── CoursesModuleUnitTestCase.php │ │ ├── Domain │ │ │ ├── CourseCreatedDomainEventMother.php │ │ │ ├── CourseDurationMother.php │ │ │ ├── CourseIdMother.php │ │ │ ├── CourseMother.php │ │ │ └── CourseNameMother.php │ │ └── Infrastructure │ │ │ └── Persistence │ │ │ └── CourseRepositoryTest.php │ ├── CoursesCounter │ │ ├── Application │ │ │ ├── Find │ │ │ │ ├── CoursesCounterResponseMother.php │ │ │ │ └── FindCoursesCounterQueryHandlerTest.php │ │ │ └── Increment │ │ │ │ └── IncrementCoursesCounterOnCourseCreatedTest.php │ │ ├── CoursesCounterModuleUnitTestCase.php │ │ └── Domain │ │ │ ├── CoursesCounterIdMother.php │ │ │ ├── CoursesCounterIncrementedDomainEventMother.php │ │ │ ├── CoursesCounterMother.php │ │ │ └── CoursesCounterTotalMother.php │ ├── Shared │ │ ├── Domain │ │ │ └── .gitkeep │ │ └── Infrastructure │ │ │ └── PhpUnit │ │ │ ├── MoocContextInfrastructureTestCase.php │ │ │ └── MoocEnvironmentArranger.php │ └── Videos │ │ ├── Application │ │ └── .gitkeep │ │ ├── Domain │ │ └── .gitkeep │ │ └── Infrastructure │ │ └── .gitkeep │ └── Shared │ ├── Domain │ ├── Criteria │ │ ├── CriteriaMother.php │ │ ├── FilterFieldMother.php │ │ ├── FilterMother.php │ │ ├── FilterValueMother.php │ │ ├── FiltersMother.php │ │ ├── OrderByMother.php │ │ └── OrderMother.php │ ├── DuplicatorMother.php │ ├── IntegerMother.php │ ├── MotherCreator.php │ ├── RandomElementPicker.php │ ├── Repeater.php │ ├── TestUtils.php │ ├── UuidMother.php │ └── WordMother.php │ └── Infrastructure │ ├── Arranger │ └── EnvironmentArranger.php │ ├── Behat │ ├── ApiContext.php │ └── ApplicationFeatureContext.php │ ├── Bus │ ├── Command │ │ ├── FakeCommand.php │ │ └── InMemorySymfonyCommandBusTest.php │ ├── Event │ │ ├── MySql │ │ │ └── MySqlDoctrineEventBusTest.php │ │ └── RabbitMq │ │ │ ├── RabbitMqEventBusTest.php │ │ │ └── TestAllWorksOnRabbitMqEventsPublished.php │ └── Query │ │ ├── FakeQuery.php │ │ ├── FakeResponse.php │ │ └── InMemorySymfonyQueryBusTest.php │ ├── ConstantRandomNumberGenerator.php │ ├── Doctrine │ └── DatabaseCleaner.php │ ├── Mink │ ├── MinkHelper.php │ └── MinkSessionRequestHelper.php │ ├── Mockery │ └── CodelyTvMatcherIsSimilar.php │ └── PhpUnit │ ├── Comparator │ ├── AggregateRootArraySimilarComparator.php │ ├── AggregateRootSimilarComparator.php │ ├── DateTimeSimilarComparator.php │ ├── DateTimeStringSimilarComparator.php │ ├── DomainEventArraySimilarComparator.php │ └── DomainEventSimilarComparator.php │ ├── Constraint │ └── CodelyTvConstraintIsSimilar.php │ ├── InfrastructureTestCase.php │ └── UnitTestCase.php └── 05-Optimizing_Speed ├── 05.1-Cache ├── java │ ├── .editorconfig │ ├── .github │ │ └── workflows │ │ │ └── ci.yml │ ├── .gitignore │ ├── Makefile │ ├── README.md │ ├── build.gradle │ ├── gradle │ │ └── wrapper │ │ │ ├── gradle-wrapper.jar │ │ │ └── gradle-wrapper.properties │ ├── gradlew │ ├── gradlew.bat │ ├── src │ │ ├── main │ │ │ ├── java │ │ │ │ └── tv │ │ │ │ │ └── codely │ │ │ │ │ └── java_basic_skeleton │ │ │ │ │ └── Greeter.java │ │ │ └── resources │ │ │ │ └── log4j2.properties │ │ └── test │ │ │ ├── java │ │ │ └── tv │ │ │ │ └── codely │ │ │ │ └── java_basic_skeleton │ │ │ │ └── GreeterShould.java │ │ │ └── resources │ │ │ └── log4j2.properties │ └── var │ │ └── log │ │ └── .gitkeep └── php │ ├── .env │ ├── .github │ ├── FUNDING.yml │ └── workflows │ │ └── ci.yml │ ├── .gitignore │ ├── Dockerfile │ ├── Makefile │ ├── README.md │ ├── apps │ ├── backoffice │ │ ├── backend │ │ │ ├── bin │ │ │ │ └── console │ │ │ ├── config │ │ │ │ ├── bundles.php │ │ │ │ ├── routes │ │ │ │ │ ├── courses.yaml │ │ │ │ │ └── health-check.yaml │ │ │ │ ├── services.yaml │ │ │ │ ├── services │ │ │ │ │ └── framework.yaml │ │ │ │ └── services_test.yaml │ │ │ ├── public │ │ │ │ └── index.php │ │ │ └── src │ │ │ │ ├── BackofficeBackendKernel.php │ │ │ │ └── Controller │ │ │ │ ├── Courses │ │ │ │ └── CoursesGetController.php │ │ │ │ └── HealthCheck │ │ │ │ └── HealthCheckGetController.php │ │ └── frontend │ │ │ ├── bin │ │ │ └── console │ │ │ ├── config │ │ │ ├── bundles.php │ │ │ ├── routes │ │ │ │ ├── api_courses.yaml │ │ │ │ ├── courses.yaml │ │ │ │ ├── health-check.yaml │ │ │ │ └── home.yaml │ │ │ ├── services.yaml │ │ │ ├── services │ │ │ │ └── framework.yaml │ │ │ └── services_test.yaml │ │ │ ├── public │ │ │ ├── images │ │ │ │ └── logo.png │ │ │ └── index.php │ │ │ ├── src │ │ │ ├── BackofficeFrontendKernel.php │ │ │ ├── Command │ │ │ │ └── ImportCoursesToElasticsearchCommand.php │ │ │ └── Controller │ │ │ │ ├── Courses │ │ │ │ ├── CoursesGetWebController.php │ │ │ │ └── CoursesPostWebController.php │ │ │ │ ├── HealthCheck │ │ │ │ └── HealthCheckGetController.php │ │ │ │ └── Home │ │ │ │ └── HomeGetWebController.php │ │ │ └── templates │ │ │ ├── master.html.twig │ │ │ ├── pages │ │ │ ├── courses │ │ │ │ ├── courses.html.twig │ │ │ │ └── partials │ │ │ │ │ ├── list_courses.html.twig │ │ │ │ │ └── new_course_form.html.twig │ │ │ └── home.html.twig │ │ │ └── partials │ │ │ ├── footer.html.twig │ │ │ └── header.html.twig │ ├── bootstrap.php │ └── mooc │ │ ├── backend │ │ ├── bin │ │ │ └── console │ │ ├── config │ │ │ ├── bundles.php │ │ │ ├── routes │ │ │ │ ├── courses.yaml │ │ │ │ ├── courses_counter.yaml │ │ │ │ └── health-check.yaml │ │ │ ├── services.yaml │ │ │ ├── services │ │ │ │ └── framework.yaml │ │ │ └── services_test.yaml │ │ ├── public │ │ │ └── index.php │ │ └── src │ │ │ ├── Command │ │ │ └── DomainEvents │ │ │ │ ├── MySql │ │ │ │ └── ConsumeMySqlDomainEventsCommand.php │ │ │ │ └── RabbitMq │ │ │ │ ├── ConfigureRabbitMqCommand.php │ │ │ │ ├── ConsumeRabbitMqDomainEventsCommand.php │ │ │ │ └── GenerateSupervisorRabbitMqConsumerFilesCommand.php │ │ │ ├── Controller │ │ │ ├── Courses │ │ │ │ └── CoursesPutController.php │ │ │ ├── CoursesCounter │ │ │ │ └── CoursesCounterGetController.php │ │ │ └── HealthCheck │ │ │ │ └── HealthCheckGetController.php │ │ │ └── MoocBackendKernel.php │ │ └── frontend │ │ └── src │ │ └── .gitkeep │ ├── behat.yml │ ├── composer.json │ ├── composer.lock │ ├── databases │ ├── backoffice │ │ └── courses.json │ └── mooc.sql │ ├── doc │ └── endpoints │ │ └── backoffice_frontend.http │ ├── docker-compose.yml │ ├── etc │ └── infrastructure │ │ ├── nginx │ │ └── default.conf │ │ └── php │ │ ├── conf.d │ │ ├── apcu.ini │ │ ├── opcache.ini │ │ └── xdebug.ini │ │ └── php.ini │ ├── phpunit.xml │ ├── src │ ├── Analytics │ │ └── DomainEvents │ │ │ ├── Application │ │ │ └── Store │ │ │ │ ├── DomainEventStorer.php │ │ │ │ └── StoreDomainEventOnOccurred.php │ │ │ └── Domain │ │ │ ├── AnalyticsDomainEvent.php │ │ │ ├── AnalyticsDomainEventAggregateId.php │ │ │ ├── AnalyticsDomainEventBody.php │ │ │ ├── AnalyticsDomainEventId.php │ │ │ ├── AnalyticsDomainEventName.php │ │ │ └── DomainEventsRepository.php │ ├── Backoffice │ │ ├── Auth │ │ │ ├── Application │ │ │ │ └── Authenticate │ │ │ │ │ ├── AuthenticateUserCommand.php │ │ │ │ │ ├── AuthenticateUserCommandHandler.php │ │ │ │ │ └── UserAuthenticator.php │ │ │ ├── Domain │ │ │ │ ├── AuthPassword.php │ │ │ │ ├── AuthRepository.php │ │ │ │ ├── AuthUser.php │ │ │ │ ├── AuthUsername.php │ │ │ │ ├── InvalidAuthCredentials.php │ │ │ │ └── InvalidAuthUsername.php │ │ │ └── Infrastructure │ │ │ │ └── Persistence │ │ │ │ └── InMemoryAuthRepository.php │ │ ├── Courses │ │ │ ├── Application │ │ │ │ ├── BackofficeCourseResponse.php │ │ │ │ ├── BackofficeCoursesResponse.php │ │ │ │ ├── Create │ │ │ │ │ ├── BackofficeCourseCreator.php │ │ │ │ │ └── CreateBackofficeCourseOnCourseCreated.php │ │ │ │ ├── SearchAll │ │ │ │ │ ├── AllBackofficeCoursesSearcher.php │ │ │ │ │ ├── SearchAllBackofficeCoursesQuery.php │ │ │ │ │ └── SearchAllBackofficeCoursesQueryHandler.php │ │ │ │ └── SearchByCriteria │ │ │ │ │ ├── BackofficeCoursesByCriteriaSearcher.php │ │ │ │ │ ├── SearchBackofficeCoursesByCriteriaQuery.php │ │ │ │ │ └── SearchBackofficeCoursesByCriteriaQueryHandler.php │ │ │ ├── Domain │ │ │ │ ├── BackofficeCourse.php │ │ │ │ └── BackofficeCourseRepository.php │ │ │ └── Infrastructure │ │ │ │ └── Persistence │ │ │ │ ├── Doctrine │ │ │ │ └── BackofficeCourse.orm.xml │ │ │ │ ├── ElasticsearchBackofficeCourseRepository.php │ │ │ │ ├── InMemoryCacheBackofficeCourseRepository.php │ │ │ │ └── MySqlBackofficeCourseRepository.php │ │ └── Shared │ │ │ └── Infrastructure │ │ │ └── Symfony │ │ │ └── DependencyInjection │ │ │ └── backoffice_services.yaml │ ├── Mooc │ │ ├── Courses │ │ │ ├── Application │ │ │ │ ├── Create │ │ │ │ │ ├── CourseCreator.php │ │ │ │ │ ├── CreateCourseCommand.php │ │ │ │ │ └── CreateCourseCommandHandler.php │ │ │ │ ├── Find │ │ │ │ │ └── CourseFinder.php │ │ │ │ └── Update │ │ │ │ │ └── CourseRenamer.php │ │ │ ├── Domain │ │ │ │ ├── Course.php │ │ │ │ ├── CourseCreatedDomainEvent.php │ │ │ │ ├── CourseDuration.php │ │ │ │ ├── CourseName.php │ │ │ │ ├── CourseNotExist.php │ │ │ │ └── CourseRepository.php │ │ │ └── Infrastructure │ │ │ │ └── Persistence │ │ │ │ ├── Doctrine │ │ │ │ ├── Course.orm.xml │ │ │ │ ├── CourseDuration.orm.xml │ │ │ │ ├── CourseIdType.php │ │ │ │ └── CourseName.orm.xml │ │ │ │ ├── DoctrineCourseRepository.php │ │ │ │ ├── Eloquent │ │ │ │ └── CourseEloquentModel.php │ │ │ │ ├── EloquentCourseRepository.php │ │ │ │ └── FileCourseRepository.php │ │ ├── CoursesCounter │ │ │ ├── Application │ │ │ │ ├── Find │ │ │ │ │ ├── CoursesCounterFinder.php │ │ │ │ │ ├── CoursesCounterResponse.php │ │ │ │ │ ├── FindCoursesCounterQuery.php │ │ │ │ │ └── FindCoursesCounterQueryHandler.php │ │ │ │ └── Increment │ │ │ │ │ ├── CoursesCounterIncrementer.php │ │ │ │ │ └── IncrementCoursesCounterOnCourseCreated.php │ │ │ ├── Domain │ │ │ │ ├── CoursesCounter.php │ │ │ │ ├── CoursesCounterId.php │ │ │ │ ├── CoursesCounterIncrementedDomainEvent.php │ │ │ │ ├── CoursesCounterNotExist.php │ │ │ │ ├── CoursesCounterRepository.php │ │ │ │ └── CoursesCounterTotal.php │ │ │ └── Infrastructure │ │ │ │ └── Persistence │ │ │ │ ├── Doctrine │ │ │ │ ├── CourseCounterIdType.php │ │ │ │ ├── CourseIdsType.php │ │ │ │ ├── CoursesCounter.orm.xml │ │ │ │ └── CoursesCounterTotal.orm.xml │ │ │ │ └── DoctrineCoursesCounterRepository.php │ │ ├── Notifications │ │ │ └── Application │ │ │ │ ├── SendNewCommentReplyEmail │ │ │ │ └── .gitkeep │ │ │ │ ├── SendNewCommentReplyPush │ │ │ │ └── .gitkeep │ │ │ │ └── SendResetPasswordEmail │ │ │ │ └── .gitkeep │ │ ├── Shared │ │ │ ├── Domain │ │ │ │ └── Course │ │ │ │ │ └── CourseId.php │ │ │ └── Infrastructure │ │ │ │ ├── Doctrine │ │ │ │ ├── DbalTypesSearcher.php │ │ │ │ ├── DoctrinePrefixesSearcher.php │ │ │ │ └── MoocEntityManagerFactory.php │ │ │ │ └── Symfony │ │ │ │ └── DependencyInjection │ │ │ │ └── mooc_services.yaml │ │ └── Videos │ │ │ ├── Application │ │ │ └── .gitkeep │ │ │ ├── Domain │ │ │ └── .gitkeep │ │ │ └── Infrastructure │ │ │ └── .gitkeep │ ├── Retention │ │ ├── Campaign │ │ │ ├── Application │ │ │ │ ├── NewCourseAvailable │ │ │ │ │ ├── Schedule │ │ │ │ │ │ └── .gitkeep │ │ │ │ │ └── Trigger │ │ │ │ │ │ └── .gitkeep │ │ │ │ └── WelcomeUser │ │ │ │ │ └── Trigger │ │ │ │ │ └── .gitkeep │ │ │ ├── Domain │ │ │ │ └── .gitkeep │ │ │ └── Infrastructure │ │ │ │ └── .gitkeep │ │ ├── Email │ │ │ ├── Application │ │ │ │ ├── SendNewCourseAvailable │ │ │ │ │ └── .gitkeep │ │ │ │ └── SendWelcomeUser │ │ │ │ │ └── .gitkeep │ │ │ ├── Domain │ │ │ │ └── .gitkeep │ │ │ └── Infrastructure │ │ │ │ └── .gitkeep │ │ ├── Push │ │ │ ├── Application │ │ │ │ └── SendNewCourseAvailable │ │ │ │ │ └── .gitkeep │ │ │ ├── Domain │ │ │ │ └── .gitkeep │ │ │ └── Infrastructure │ │ │ │ └── .gitkeep │ │ └── Sms │ │ │ ├── Application │ │ │ └── .gitkeep │ │ │ ├── Domain │ │ │ └── .gitkeep │ │ │ └── Infrastructure │ │ │ └── .gitkeep │ └── Shared │ │ ├── Domain │ │ ├── Aggregate │ │ │ └── AggregateRoot.php │ │ ├── Assert.php │ │ ├── Bus │ │ │ ├── Command │ │ │ │ ├── Command.php │ │ │ │ ├── CommandBus.php │ │ │ │ └── CommandHandler.php │ │ │ ├── Event │ │ │ │ ├── DomainEvent.php │ │ │ │ ├── DomainEventSubscriber.php │ │ │ │ └── EventBus.php │ │ │ └── Query │ │ │ │ ├── Query.php │ │ │ │ ├── QueryBus.php │ │ │ │ ├── QueryHandler.php │ │ │ │ └── Response.php │ │ ├── Collection.php │ │ ├── Criteria │ │ │ ├── Criteria.php │ │ │ ├── Filter.php │ │ │ ├── FilterField.php │ │ │ ├── FilterOperator.php │ │ │ ├── FilterValue.php │ │ │ ├── Filters.php │ │ │ ├── Order.php │ │ │ ├── OrderBy.php │ │ │ └── OrderType.php │ │ ├── DomainError.php │ │ ├── Logger.php │ │ ├── Monitoring.php │ │ ├── RandomNumberGenerator.php │ │ ├── Utils.php │ │ ├── UuidGenerator.php │ │ └── ValueObject │ │ │ ├── Enum.php │ │ │ ├── IntValueObject.php │ │ │ ├── StringValueObject.php │ │ │ └── Uuid.php │ │ └── Infrastructure │ │ ├── Bus │ │ ├── CallableFirstParameterExtractor.php │ │ ├── Command │ │ │ ├── CommandNotRegisteredError.php │ │ │ └── InMemorySymfonyCommandBus.php │ │ ├── Event │ │ │ ├── DomainEventJsonDeserializer.php │ │ │ ├── DomainEventJsonSerializer.php │ │ │ ├── DomainEventMapping.php │ │ │ ├── DomainEventSubscriberLocator.php │ │ │ ├── InMemory │ │ │ │ └── InMemorySymfonyEventBus.php │ │ │ ├── MySql │ │ │ │ ├── MySqlDoctrineDomainEventsConsumer.php │ │ │ │ └── MySqlDoctrineEventBus.php │ │ │ └── RabbitMq │ │ │ │ ├── RabbitMqConfigurer.php │ │ │ │ ├── RabbitMqConnection.php │ │ │ │ ├── RabbitMqDomainEventsConsumer.php │ │ │ │ ├── RabbitMqEventBus.php │ │ │ │ ├── RabbitMqExchangeNameFormatter.php │ │ │ │ └── RabbitMqQueueNameFormatter.php │ │ └── Query │ │ │ ├── InMemorySymfonyQueryBus.php │ │ │ └── QueryNotRegisteredError.php │ │ ├── Doctrine │ │ ├── DatabaseConnections.php │ │ ├── Dbal │ │ │ ├── DbalCustomTypesRegistrar.php │ │ │ └── DoctrineCustomType.php │ │ └── DoctrineEntityManagerFactory.php │ │ ├── Elasticsearch │ │ ├── ElasticsearchClient.php │ │ └── ElasticsearchClientFactory.php │ │ ├── Logger │ │ └── MonologLogger.php │ │ ├── Persistence │ │ ├── Doctrine │ │ │ ├── DoctrineCriteriaConverter.php │ │ │ ├── DoctrineRepository.php │ │ │ └── UuidType.php │ │ └── Elasticsearch │ │ │ ├── ElasticQueryGenerator.php │ │ │ ├── ElasticsearchCriteriaConverter.php │ │ │ └── ElasticsearchRepository.php │ │ ├── PhpRandomNumberGenerator.php │ │ ├── RamseyUuidGenerator.php │ │ └── Symfony │ │ ├── AddJsonBodyToRequestListener.php │ │ ├── ApiController.php │ │ ├── ApiExceptionListener.php │ │ ├── ApiExceptionsHttpStatusCodeMapping.php │ │ ├── BasicHttpAuthMiddleware.php │ │ ├── FlashSession.php │ │ └── WebController.php │ └── tests │ ├── apps │ ├── backoffice │ │ ├── backend │ │ │ └── .gitkeep │ │ └── frontend │ │ │ └── .gitkeep │ └── mooc │ │ ├── backend │ │ ├── features │ │ │ ├── courses │ │ │ │ └── course_put.feature │ │ │ ├── courses_counter │ │ │ │ └── courses_counter_get.feature │ │ │ └── health_check │ │ │ │ └── health_check_get.feature │ │ └── mooc_backend.yml │ │ └── frontend │ │ └── .gitkeep │ └── src │ ├── Backoffice │ ├── Auth │ │ ├── Application │ │ │ └── Authenticate │ │ │ │ ├── AuthenticateUserCommandHandlerTest.php │ │ │ │ └── AuthenticateUserCommandMother.php │ │ ├── AuthModuleUnitTestCase.php │ │ └── Domain │ │ │ ├── AuthPasswordMother.php │ │ │ ├── AuthUserMother.php │ │ │ └── AuthUsernameMother.php │ └── Courses │ │ ├── BackofficeCoursesModuleInfrastructureTestCase.php │ │ ├── Domain │ │ ├── BackofficeCourseCriteriaMother.php │ │ └── BackofficeCourseMother.php │ │ └── Infrastructure │ │ └── Persistence │ │ └── MySqlBackofficeCourseRepositoryTest.php │ ├── Mooc │ ├── Courses │ │ ├── Application │ │ │ ├── Create │ │ │ │ ├── CreateCourseCommandHandlerTest.php │ │ │ │ └── CreateCourseCommandMother.php │ │ │ └── Update │ │ │ │ └── CourseRenamerTest.php │ │ ├── CoursesModuleInfrastructureTestCase.php │ │ ├── CoursesModuleUnitTestCase.php │ │ ├── Domain │ │ │ ├── CourseCreatedDomainEventMother.php │ │ │ ├── CourseDurationMother.php │ │ │ ├── CourseIdMother.php │ │ │ ├── CourseMother.php │ │ │ └── CourseNameMother.php │ │ └── Infrastructure │ │ │ └── Persistence │ │ │ └── CourseRepositoryTest.php │ ├── CoursesCounter │ │ ├── Application │ │ │ ├── Find │ │ │ │ ├── CoursesCounterResponseMother.php │ │ │ │ └── FindCoursesCounterQueryHandlerTest.php │ │ │ └── Increment │ │ │ │ └── IncrementCoursesCounterOnCourseCreatedTest.php │ │ ├── CoursesCounterModuleUnitTestCase.php │ │ └── Domain │ │ │ ├── CoursesCounterIdMother.php │ │ │ ├── CoursesCounterIncrementedDomainEventMother.php │ │ │ ├── CoursesCounterMother.php │ │ │ └── CoursesCounterTotalMother.php │ ├── Shared │ │ ├── Domain │ │ │ └── .gitkeep │ │ └── Infrastructure │ │ │ └── PhpUnit │ │ │ ├── MoocContextInfrastructureTestCase.php │ │ │ └── MoocEnvironmentArranger.php │ └── Videos │ │ ├── Application │ │ └── .gitkeep │ │ ├── Domain │ │ └── .gitkeep │ │ └── Infrastructure │ │ └── .gitkeep │ └── Shared │ ├── Domain │ ├── Criteria │ │ ├── CriteriaMother.php │ │ ├── FilterFieldMother.php │ │ ├── FilterMother.php │ │ ├── FilterValueMother.php │ │ ├── FiltersMother.php │ │ ├── OrderByMother.php │ │ └── OrderMother.php │ ├── DuplicatorMother.php │ ├── IntegerMother.php │ ├── MotherCreator.php │ ├── RandomElementPicker.php │ ├── Repeater.php │ ├── TestUtils.php │ ├── UuidMother.php │ └── WordMother.php │ └── Infrastructure │ ├── Arranger │ └── EnvironmentArranger.php │ ├── Behat │ ├── ApiContext.php │ └── ApplicationFeatureContext.php │ ├── Bus │ ├── Command │ │ ├── FakeCommand.php │ │ └── InMemorySymfonyCommandBusTest.php │ ├── Event │ │ ├── MySql │ │ │ └── MySqlDoctrineEventBusTest.php │ │ └── RabbitMq │ │ │ ├── RabbitMqEventBusTest.php │ │ │ └── TestAllWorksOnRabbitMqEventsPublished.php │ └── Query │ │ ├── FakeQuery.php │ │ ├── FakeResponse.php │ │ └── InMemorySymfonyQueryBusTest.php │ ├── ConstantRandomNumberGenerator.php │ ├── Doctrine │ └── DatabaseCleaner.php │ ├── Mink │ ├── MinkHelper.php │ └── MinkSessionRequestHelper.php │ ├── Mockery │ └── CodelyTvMatcherIsSimilar.php │ └── PhpUnit │ ├── Comparator │ ├── AggregateRootArraySimilarComparator.php │ ├── AggregateRootSimilarComparator.php │ ├── DateTimeSimilarComparator.php │ ├── DateTimeStringSimilarComparator.php │ ├── DomainEventArraySimilarComparator.php │ └── DomainEventSimilarComparator.php │ ├── Constraint │ └── CodelyTvConstraintIsSimilar.php │ ├── InfrastructureTestCase.php │ └── UnitTestCase.php ├── 05.2-Parallel_Tests ├── .env ├── .github │ ├── FUNDING.yml │ └── workflows │ │ └── ci.yml ├── .gitignore ├── Dockerfile ├── Makefile ├── README.md ├── apps │ ├── backoffice │ │ ├── backend │ │ │ ├── bin │ │ │ │ └── console │ │ │ ├── config │ │ │ │ ├── bundles.php │ │ │ │ ├── routes │ │ │ │ │ ├── courses.yaml │ │ │ │ │ └── health-check.yaml │ │ │ │ ├── services.yaml │ │ │ │ ├── services │ │ │ │ │ └── framework.yaml │ │ │ │ └── services_test.yaml │ │ │ ├── public │ │ │ │ └── index.php │ │ │ └── src │ │ │ │ ├── BackofficeBackendKernel.php │ │ │ │ └── Controller │ │ │ │ ├── Courses │ │ │ │ └── CoursesGetController.php │ │ │ │ └── HealthCheck │ │ │ │ └── HealthCheckGetController.php │ │ └── frontend │ │ │ ├── bin │ │ │ └── console │ │ │ ├── config │ │ │ ├── bundles.php │ │ │ ├── routes │ │ │ │ ├── api_courses.yaml │ │ │ │ ├── courses.yaml │ │ │ │ ├── health-check.yaml │ │ │ │ └── home.yaml │ │ │ ├── services.yaml │ │ │ ├── services │ │ │ │ └── framework.yaml │ │ │ └── services_test.yaml │ │ │ ├── public │ │ │ ├── images │ │ │ │ └── logo.png │ │ │ └── index.php │ │ │ ├── src │ │ │ ├── BackofficeFrontendKernel.php │ │ │ ├── Command │ │ │ │ └── ImportCoursesToElasticsearchCommand.php │ │ │ └── Controller │ │ │ │ ├── Courses │ │ │ │ ├── CoursesGetWebController.php │ │ │ │ └── CoursesPostWebController.php │ │ │ │ ├── HealthCheck │ │ │ │ └── HealthCheckGetController.php │ │ │ │ └── Home │ │ │ │ └── HomeGetWebController.php │ │ │ └── templates │ │ │ ├── master.html.twig │ │ │ ├── pages │ │ │ ├── courses │ │ │ │ ├── courses.html.twig │ │ │ │ └── partials │ │ │ │ │ ├── list_courses.html.twig │ │ │ │ │ └── new_course_form.html.twig │ │ │ └── home.html.twig │ │ │ └── partials │ │ │ ├── footer.html.twig │ │ │ └── header.html.twig │ ├── bootstrap.php │ └── mooc │ │ ├── backend │ │ ├── bin │ │ │ └── console │ │ ├── config │ │ │ ├── bundles.php │ │ │ ├── routes │ │ │ │ ├── courses.yaml │ │ │ │ ├── courses_counter.yaml │ │ │ │ └── health-check.yaml │ │ │ ├── services.yaml │ │ │ ├── services │ │ │ │ └── framework.yaml │ │ │ └── services_test.yaml │ │ ├── public │ │ │ └── index.php │ │ └── src │ │ │ ├── Command │ │ │ └── DomainEvents │ │ │ │ ├── MySql │ │ │ │ └── ConsumeMySqlDomainEventsCommand.php │ │ │ │ └── RabbitMq │ │ │ │ ├── ConfigureRabbitMqCommand.php │ │ │ │ ├── ConsumeRabbitMqDomainEventsCommand.php │ │ │ │ └── GenerateSupervisorRabbitMqConsumerFilesCommand.php │ │ │ ├── Controller │ │ │ ├── Courses │ │ │ │ └── CoursesPutController.php │ │ │ ├── CoursesCounter │ │ │ │ └── CoursesCounterGetController.php │ │ │ └── HealthCheck │ │ │ │ └── HealthCheckGetController.php │ │ │ └── MoocBackendKernel.php │ │ └── frontend │ │ └── src │ │ └── .gitkeep ├── behat.yml ├── composer.json ├── composer.lock ├── databases │ ├── backoffice │ │ └── courses.json │ └── mooc.sql ├── doc │ └── endpoints │ │ └── backoffice_frontend.http ├── docker-compose.yml ├── etc │ └── infrastructure │ │ ├── nginx │ │ └── default.conf │ │ └── php │ │ ├── conf.d │ │ ├── apcu.ini │ │ ├── opcache.ini │ │ └── xdebug.ini │ │ └── php.ini ├── phpunit.xml ├── src │ ├── Analytics │ │ └── DomainEvents │ │ │ ├── Application │ │ │ └── Store │ │ │ │ ├── DomainEventStorer.php │ │ │ │ └── StoreDomainEventOnOccurred.php │ │ │ └── Domain │ │ │ ├── AnalyticsDomainEvent.php │ │ │ ├── AnalyticsDomainEventAggregateId.php │ │ │ ├── AnalyticsDomainEventBody.php │ │ │ ├── AnalyticsDomainEventId.php │ │ │ ├── AnalyticsDomainEventName.php │ │ │ └── DomainEventsRepository.php │ ├── Backoffice │ │ ├── Auth │ │ │ ├── Application │ │ │ │ └── Authenticate │ │ │ │ │ ├── AuthenticateUserCommand.php │ │ │ │ │ ├── AuthenticateUserCommandHandler.php │ │ │ │ │ └── UserAuthenticator.php │ │ │ ├── Domain │ │ │ │ ├── AuthPassword.php │ │ │ │ ├── AuthRepository.php │ │ │ │ ├── AuthUser.php │ │ │ │ ├── AuthUsername.php │ │ │ │ ├── InvalidAuthCredentials.php │ │ │ │ └── InvalidAuthUsername.php │ │ │ └── Infrastructure │ │ │ │ └── Persistence │ │ │ │ └── InMemoryAuthRepository.php │ │ ├── Courses │ │ │ ├── Application │ │ │ │ ├── BackofficeCourseResponse.php │ │ │ │ ├── BackofficeCoursesResponse.php │ │ │ │ ├── Create │ │ │ │ │ ├── BackofficeCourseCreator.php │ │ │ │ │ └── CreateBackofficeCourseOnCourseCreated.php │ │ │ │ ├── SearchAll │ │ │ │ │ ├── AllBackofficeCoursesSearcher.php │ │ │ │ │ ├── SearchAllBackofficeCoursesQuery.php │ │ │ │ │ └── SearchAllBackofficeCoursesQueryHandler.php │ │ │ │ └── SearchByCriteria │ │ │ │ │ ├── BackofficeCoursesByCriteriaSearcher.php │ │ │ │ │ ├── SearchBackofficeCoursesByCriteriaQuery.php │ │ │ │ │ └── SearchBackofficeCoursesByCriteriaQueryHandler.php │ │ │ ├── Domain │ │ │ │ ├── BackofficeCourse.php │ │ │ │ └── BackofficeCourseRepository.php │ │ │ └── Infrastructure │ │ │ │ └── Persistence │ │ │ │ ├── Doctrine │ │ │ │ └── BackofficeCourse.orm.xml │ │ │ │ ├── ElasticsearchBackofficeCourseRepository.php │ │ │ │ ├── InMemoryCacheBackofficeCourseRepository.php │ │ │ │ └── MySqlBackofficeCourseRepository.php │ │ └── Shared │ │ │ └── Infrastructure │ │ │ └── Symfony │ │ │ └── DependencyInjection │ │ │ └── backoffice_services.yaml │ ├── Mooc │ │ ├── Courses │ │ │ ├── Application │ │ │ │ ├── Create │ │ │ │ │ ├── CourseCreator.php │ │ │ │ │ ├── CreateCourseCommand.php │ │ │ │ │ └── CreateCourseCommandHandler.php │ │ │ │ ├── Find │ │ │ │ │ └── CourseFinder.php │ │ │ │ └── Update │ │ │ │ │ └── CourseRenamer.php │ │ │ ├── Domain │ │ │ │ ├── Course.php │ │ │ │ ├── CourseCreatedDomainEvent.php │ │ │ │ ├── CourseDuration.php │ │ │ │ ├── CourseName.php │ │ │ │ ├── CourseNotExist.php │ │ │ │ └── CourseRepository.php │ │ │ └── Infrastructure │ │ │ │ └── Persistence │ │ │ │ ├── Doctrine │ │ │ │ ├── Course.orm.xml │ │ │ │ ├── CourseDuration.orm.xml │ │ │ │ ├── CourseIdType.php │ │ │ │ └── CourseName.orm.xml │ │ │ │ ├── DoctrineCourseRepository.php │ │ │ │ ├── Eloquent │ │ │ │ └── CourseEloquentModel.php │ │ │ │ ├── EloquentCourseRepository.php │ │ │ │ └── FileCourseRepository.php │ │ ├── CoursesCounter │ │ │ ├── Application │ │ │ │ ├── Find │ │ │ │ │ ├── CoursesCounterFinder.php │ │ │ │ │ ├── CoursesCounterResponse.php │ │ │ │ │ ├── FindCoursesCounterQuery.php │ │ │ │ │ └── FindCoursesCounterQueryHandler.php │ │ │ │ └── Increment │ │ │ │ │ ├── CoursesCounterIncrementer.php │ │ │ │ │ └── IncrementCoursesCounterOnCourseCreated.php │ │ │ ├── Domain │ │ │ │ ├── CoursesCounter.php │ │ │ │ ├── CoursesCounterId.php │ │ │ │ ├── CoursesCounterIncrementedDomainEvent.php │ │ │ │ ├── CoursesCounterNotExist.php │ │ │ │ ├── CoursesCounterRepository.php │ │ │ │ └── CoursesCounterTotal.php │ │ │ └── Infrastructure │ │ │ │ └── Persistence │ │ │ │ ├── Doctrine │ │ │ │ ├── CourseCounterIdType.php │ │ │ │ ├── CourseIdsType.php │ │ │ │ ├── CoursesCounter.orm.xml │ │ │ │ └── CoursesCounterTotal.orm.xml │ │ │ │ └── DoctrineCoursesCounterRepository.php │ │ ├── Notifications │ │ │ └── Application │ │ │ │ ├── SendNewCommentReplyEmail │ │ │ │ └── .gitkeep │ │ │ │ ├── SendNewCommentReplyPush │ │ │ │ └── .gitkeep │ │ │ │ └── SendResetPasswordEmail │ │ │ │ └── .gitkeep │ │ ├── Shared │ │ │ ├── Domain │ │ │ │ └── Course │ │ │ │ │ └── CourseId.php │ │ │ └── Infrastructure │ │ │ │ ├── Doctrine │ │ │ │ ├── DbalTypesSearcher.php │ │ │ │ ├── DoctrinePrefixesSearcher.php │ │ │ │ └── MoocEntityManagerFactory.php │ │ │ │ └── Symfony │ │ │ │ └── DependencyInjection │ │ │ │ └── mooc_services.yaml │ │ └── Videos │ │ │ ├── Application │ │ │ └── .gitkeep │ │ │ ├── Domain │ │ │ └── .gitkeep │ │ │ └── Infrastructure │ │ │ └── .gitkeep │ ├── Retention │ │ ├── Campaign │ │ │ ├── Application │ │ │ │ ├── NewCourseAvailable │ │ │ │ │ ├── Schedule │ │ │ │ │ │ └── .gitkeep │ │ │ │ │ └── Trigger │ │ │ │ │ │ └── .gitkeep │ │ │ │ └── WelcomeUser │ │ │ │ │ └── Trigger │ │ │ │ │ └── .gitkeep │ │ │ ├── Domain │ │ │ │ └── .gitkeep │ │ │ └── Infrastructure │ │ │ │ └── .gitkeep │ │ ├── Email │ │ │ ├── Application │ │ │ │ ├── SendNewCourseAvailable │ │ │ │ │ └── .gitkeep │ │ │ │ └── SendWelcomeUser │ │ │ │ │ └── .gitkeep │ │ │ ├── Domain │ │ │ │ └── .gitkeep │ │ │ └── Infrastructure │ │ │ │ └── .gitkeep │ │ ├── Push │ │ │ ├── Application │ │ │ │ └── SendNewCourseAvailable │ │ │ │ │ └── .gitkeep │ │ │ ├── Domain │ │ │ │ └── .gitkeep │ │ │ └── Infrastructure │ │ │ │ └── .gitkeep │ │ └── Sms │ │ │ ├── Application │ │ │ └── .gitkeep │ │ │ ├── Domain │ │ │ └── .gitkeep │ │ │ └── Infrastructure │ │ │ └── .gitkeep │ └── Shared │ │ ├── Domain │ │ ├── Aggregate │ │ │ └── AggregateRoot.php │ │ ├── Assert.php │ │ ├── Bus │ │ │ ├── Command │ │ │ │ ├── Command.php │ │ │ │ ├── CommandBus.php │ │ │ │ └── CommandHandler.php │ │ │ ├── Event │ │ │ │ ├── DomainEvent.php │ │ │ │ ├── DomainEventSubscriber.php │ │ │ │ └── EventBus.php │ │ │ └── Query │ │ │ │ ├── Query.php │ │ │ │ ├── QueryBus.php │ │ │ │ ├── QueryHandler.php │ │ │ │ └── Response.php │ │ ├── Collection.php │ │ ├── Criteria │ │ │ ├── Criteria.php │ │ │ ├── Filter.php │ │ │ ├── FilterField.php │ │ │ ├── FilterOperator.php │ │ │ ├── FilterValue.php │ │ │ ├── Filters.php │ │ │ ├── Order.php │ │ │ ├── OrderBy.php │ │ │ └── OrderType.php │ │ ├── DomainError.php │ │ ├── Logger.php │ │ ├── Monitoring.php │ │ ├── RandomNumberGenerator.php │ │ ├── Utils.php │ │ ├── UuidGenerator.php │ │ └── ValueObject │ │ │ ├── Enum.php │ │ │ ├── IntValueObject.php │ │ │ ├── StringValueObject.php │ │ │ └── Uuid.php │ │ └── Infrastructure │ │ ├── Bus │ │ ├── CallableFirstParameterExtractor.php │ │ ├── Command │ │ │ ├── CommandNotRegisteredError.php │ │ │ └── InMemorySymfonyCommandBus.php │ │ ├── Event │ │ │ ├── DomainEventJsonDeserializer.php │ │ │ ├── DomainEventJsonSerializer.php │ │ │ ├── DomainEventMapping.php │ │ │ ├── DomainEventSubscriberLocator.php │ │ │ ├── InMemory │ │ │ │ └── InMemorySymfonyEventBus.php │ │ │ ├── MySql │ │ │ │ ├── MySqlDoctrineDomainEventsConsumer.php │ │ │ │ └── MySqlDoctrineEventBus.php │ │ │ └── RabbitMq │ │ │ │ ├── RabbitMqConfigurer.php │ │ │ │ ├── RabbitMqConnection.php │ │ │ │ ├── RabbitMqDomainEventsConsumer.php │ │ │ │ ├── RabbitMqEventBus.php │ │ │ │ ├── RabbitMqExchangeNameFormatter.php │ │ │ │ └── RabbitMqQueueNameFormatter.php │ │ └── Query │ │ │ ├── InMemorySymfonyQueryBus.php │ │ │ └── QueryNotRegisteredError.php │ │ ├── Doctrine │ │ ├── DatabaseConnections.php │ │ ├── Dbal │ │ │ ├── DbalCustomTypesRegistrar.php │ │ │ └── DoctrineCustomType.php │ │ └── DoctrineEntityManagerFactory.php │ │ ├── Elasticsearch │ │ ├── ElasticsearchClient.php │ │ └── ElasticsearchClientFactory.php │ │ ├── Logger │ │ └── MonologLogger.php │ │ ├── Persistence │ │ ├── Doctrine │ │ │ ├── DoctrineCriteriaConverter.php │ │ │ ├── DoctrineRepository.php │ │ │ └── UuidType.php │ │ └── Elasticsearch │ │ │ ├── ElasticQueryGenerator.php │ │ │ ├── ElasticsearchCriteriaConverter.php │ │ │ └── ElasticsearchRepository.php │ │ ├── PhpRandomNumberGenerator.php │ │ ├── RamseyUuidGenerator.php │ │ └── Symfony │ │ ├── AddJsonBodyToRequestListener.php │ │ ├── ApiController.php │ │ ├── ApiExceptionListener.php │ │ ├── ApiExceptionsHttpStatusCodeMapping.php │ │ ├── BasicHttpAuthMiddleware.php │ │ ├── FlashSession.php │ │ └── WebController.php ├── tests.parallel └── tests │ ├── apps │ ├── backoffice │ │ ├── backend │ │ │ └── .gitkeep │ │ └── frontend │ │ │ └── .gitkeep │ └── mooc │ │ ├── backend │ │ ├── features │ │ │ ├── courses │ │ │ │ └── course_put.feature │ │ │ ├── courses_counter │ │ │ │ └── courses_counter_get.feature │ │ │ └── health_check │ │ │ │ └── health_check_get.feature │ │ └── mooc_backend.yml │ │ └── frontend │ │ └── .gitkeep │ └── src │ ├── Backoffice │ ├── Auth │ │ ├── Application │ │ │ └── Authenticate │ │ │ │ ├── AuthenticateUserCommandHandlerTest.php │ │ │ │ └── AuthenticateUserCommandMother.php │ │ ├── AuthModuleUnitTestCase.php │ │ └── Domain │ │ │ ├── AuthPasswordMother.php │ │ │ ├── AuthUserMother.php │ │ │ └── AuthUsernameMother.php │ └── Courses │ │ ├── BackofficeCoursesModuleInfrastructureTestCase.php │ │ ├── Domain │ │ ├── BackofficeCourseCriteriaMother.php │ │ └── BackofficeCourseMother.php │ │ └── Infrastructure │ │ └── Persistence │ │ └── MySqlBackofficeCourseRepositoryTest.php │ ├── Mooc │ ├── Courses │ │ ├── Application │ │ │ ├── Create │ │ │ │ ├── CreateCourseCommandHandlerTest.php │ │ │ │ └── CreateCourseCommandMother.php │ │ │ └── Update │ │ │ │ └── CourseRenamerTest.php │ │ ├── CoursesModuleInfrastructureTestCase.php │ │ ├── CoursesModuleUnitTestCase.php │ │ ├── Domain │ │ │ ├── CourseCreatedDomainEventMother.php │ │ │ ├── CourseDurationMother.php │ │ │ ├── CourseIdMother.php │ │ │ ├── CourseMother.php │ │ │ └── CourseNameMother.php │ │ └── Infrastructure │ │ │ └── Persistence │ │ │ └── CourseRepositoryTest.php │ ├── CoursesCounter │ │ ├── Application │ │ │ ├── Find │ │ │ │ ├── CoursesCounterResponseMother.php │ │ │ │ └── FindCoursesCounterQueryHandlerTest.php │ │ │ └── Increment │ │ │ │ └── IncrementCoursesCounterOnCourseCreatedTest.php │ │ ├── CoursesCounterModuleUnitTestCase.php │ │ └── Domain │ │ │ ├── CoursesCounterIdMother.php │ │ │ ├── CoursesCounterIncrementedDomainEventMother.php │ │ │ ├── CoursesCounterMother.php │ │ │ └── CoursesCounterTotalMother.php │ ├── Shared │ │ ├── Domain │ │ │ └── .gitkeep │ │ └── Infrastructure │ │ │ └── PhpUnit │ │ │ ├── MoocContextInfrastructureTestCase.php │ │ │ └── MoocEnvironmentArranger.php │ └── Videos │ │ ├── Application │ │ └── .gitkeep │ │ ├── Domain │ │ └── .gitkeep │ │ └── Infrastructure │ │ └── .gitkeep │ └── Shared │ ├── Domain │ ├── Criteria │ │ ├── CriteriaMother.php │ │ ├── FilterFieldMother.php │ │ ├── FilterMother.php │ │ ├── FilterValueMother.php │ │ ├── FiltersMother.php │ │ ├── OrderByMother.php │ │ └── OrderMother.php │ ├── DuplicatorMother.php │ ├── IntegerMother.php │ ├── MotherCreator.php │ ├── RandomElementPicker.php │ ├── Repeater.php │ ├── TestUtils.php │ ├── UuidMother.php │ └── WordMother.php │ └── Infrastructure │ ├── Arranger │ └── EnvironmentArranger.php │ ├── Behat │ ├── ApiContext.php │ └── ApplicationFeatureContext.php │ ├── Bus │ ├── Command │ │ ├── FakeCommand.php │ │ └── InMemorySymfonyCommandBusTest.php │ ├── Event │ │ ├── MySql │ │ │ └── MySqlDoctrineEventBusTest.php │ │ └── RabbitMq │ │ │ ├── RabbitMqEventBusTest.php │ │ │ └── TestAllWorksOnRabbitMqEventsPublished.php │ └── Query │ │ ├── FakeQuery.php │ │ ├── FakeResponse.php │ │ └── InMemorySymfonyQueryBusTest.php │ ├── ConstantRandomNumberGenerator.php │ ├── Doctrine │ └── DatabaseCleaner.php │ ├── Mink │ ├── MinkHelper.php │ └── MinkSessionRequestHelper.php │ ├── Mockery │ └── CodelyTvMatcherIsSimilar.php │ └── PhpUnit │ ├── Comparator │ ├── AggregateRootArraySimilarComparator.php │ ├── AggregateRootSimilarComparator.php │ ├── DateTimeSimilarComparator.php │ ├── DateTimeStringSimilarComparator.php │ ├── DomainEventArraySimilarComparator.php │ └── DomainEventSimilarComparator.php │ ├── Constraint │ └── CodelyTvConstraintIsSimilar.php │ ├── InfrastructureTestCase.php │ └── UnitTestCase.php └── 05.3-Parallel_Jobs ├── .env ├── .github ├── FUNDING.yml └── workflows │ └── ci.yml ├── .gitignore ├── Dockerfile ├── Makefile ├── README.md ├── apps ├── backoffice │ ├── backend │ │ ├── bin │ │ │ └── console │ │ ├── config │ │ │ ├── bundles.php │ │ │ ├── routes │ │ │ │ ├── courses.yaml │ │ │ │ └── health-check.yaml │ │ │ ├── services.yaml │ │ │ ├── services │ │ │ │ └── framework.yaml │ │ │ └── services_test.yaml │ │ ├── public │ │ │ └── index.php │ │ └── src │ │ │ ├── BackofficeBackendKernel.php │ │ │ └── Controller │ │ │ ├── Courses │ │ │ └── CoursesGetController.php │ │ │ └── HealthCheck │ │ │ └── HealthCheckGetController.php │ └── frontend │ │ ├── bin │ │ └── console │ │ ├── config │ │ ├── bundles.php │ │ ├── routes │ │ │ ├── api_courses.yaml │ │ │ ├── courses.yaml │ │ │ ├── health-check.yaml │ │ │ └── home.yaml │ │ ├── services.yaml │ │ ├── services │ │ │ └── framework.yaml │ │ └── services_test.yaml │ │ ├── public │ │ ├── images │ │ │ └── logo.png │ │ └── index.php │ │ ├── src │ │ ├── BackofficeFrontendKernel.php │ │ ├── Command │ │ │ └── ImportCoursesToElasticsearchCommand.php │ │ └── Controller │ │ │ ├── Courses │ │ │ ├── CoursesGetWebController.php │ │ │ └── CoursesPostWebController.php │ │ │ ├── HealthCheck │ │ │ └── HealthCheckGetController.php │ │ │ └── Home │ │ │ └── HomeGetWebController.php │ │ └── templates │ │ ├── master.html.twig │ │ ├── pages │ │ ├── courses │ │ │ ├── courses.html.twig │ │ │ └── partials │ │ │ │ ├── list_courses.html.twig │ │ │ │ └── new_course_form.html.twig │ │ └── home.html.twig │ │ └── partials │ │ ├── footer.html.twig │ │ └── header.html.twig ├── bootstrap.php └── mooc │ ├── backend │ ├── bin │ │ └── console │ ├── config │ │ ├── bundles.php │ │ ├── routes │ │ │ ├── courses.yaml │ │ │ ├── courses_counter.yaml │ │ │ └── health-check.yaml │ │ ├── services.yaml │ │ ├── services │ │ │ └── framework.yaml │ │ └── services_test.yaml │ ├── public │ │ └── index.php │ └── src │ │ ├── Command │ │ └── DomainEvents │ │ │ ├── MySql │ │ │ └── ConsumeMySqlDomainEventsCommand.php │ │ │ └── RabbitMq │ │ │ ├── ConfigureRabbitMqCommand.php │ │ │ ├── ConsumeRabbitMqDomainEventsCommand.php │ │ │ └── GenerateSupervisorRabbitMqConsumerFilesCommand.php │ │ ├── Controller │ │ ├── Courses │ │ │ └── CoursesPutController.php │ │ ├── CoursesCounter │ │ │ └── CoursesCounterGetController.php │ │ └── HealthCheck │ │ │ └── HealthCheckGetController.php │ │ └── MoocBackendKernel.php │ └── frontend │ └── src │ └── .gitkeep ├── behat.yml ├── composer.json ├── composer.lock ├── databases ├── backoffice │ └── courses.json └── mooc.sql ├── doc └── endpoints │ └── backoffice_frontend.http ├── docker-compose.yml ├── etc └── infrastructure │ ├── nginx │ └── default.conf │ └── php │ ├── conf.d │ ├── apcu.ini │ ├── opcache.ini │ └── xdebug.ini │ └── php.ini ├── phpunit.xml ├── src ├── Analytics │ └── DomainEvents │ │ ├── Application │ │ └── Store │ │ │ ├── DomainEventStorer.php │ │ │ └── StoreDomainEventOnOccurred.php │ │ └── Domain │ │ ├── AnalyticsDomainEvent.php │ │ ├── AnalyticsDomainEventAggregateId.php │ │ ├── AnalyticsDomainEventBody.php │ │ ├── AnalyticsDomainEventId.php │ │ ├── AnalyticsDomainEventName.php │ │ └── DomainEventsRepository.php ├── Backoffice │ ├── Auth │ │ ├── Application │ │ │ └── Authenticate │ │ │ │ ├── AuthenticateUserCommand.php │ │ │ │ ├── AuthenticateUserCommandHandler.php │ │ │ │ └── UserAuthenticator.php │ │ ├── Domain │ │ │ ├── AuthPassword.php │ │ │ ├── AuthRepository.php │ │ │ ├── AuthUser.php │ │ │ ├── AuthUsername.php │ │ │ ├── InvalidAuthCredentials.php │ │ │ └── InvalidAuthUsername.php │ │ └── Infrastructure │ │ │ └── Persistence │ │ │ └── InMemoryAuthRepository.php │ ├── Courses │ │ ├── Application │ │ │ ├── BackofficeCourseResponse.php │ │ │ ├── BackofficeCoursesResponse.php │ │ │ ├── Create │ │ │ │ ├── BackofficeCourseCreator.php │ │ │ │ └── CreateBackofficeCourseOnCourseCreated.php │ │ │ ├── SearchAll │ │ │ │ ├── AllBackofficeCoursesSearcher.php │ │ │ │ ├── SearchAllBackofficeCoursesQuery.php │ │ │ │ └── SearchAllBackofficeCoursesQueryHandler.php │ │ │ └── SearchByCriteria │ │ │ │ ├── BackofficeCoursesByCriteriaSearcher.php │ │ │ │ ├── SearchBackofficeCoursesByCriteriaQuery.php │ │ │ │ └── SearchBackofficeCoursesByCriteriaQueryHandler.php │ │ ├── Domain │ │ │ ├── BackofficeCourse.php │ │ │ └── BackofficeCourseRepository.php │ │ └── Infrastructure │ │ │ └── Persistence │ │ │ ├── Doctrine │ │ │ └── BackofficeCourse.orm.xml │ │ │ ├── ElasticsearchBackofficeCourseRepository.php │ │ │ ├── InMemoryCacheBackofficeCourseRepository.php │ │ │ └── MySqlBackofficeCourseRepository.php │ └── Shared │ │ └── Infrastructure │ │ └── Symfony │ │ └── DependencyInjection │ │ └── backoffice_services.yaml ├── Mooc │ ├── Courses │ │ ├── Application │ │ │ ├── Create │ │ │ │ ├── CourseCreator.php │ │ │ │ ├── CreateCourseCommand.php │ │ │ │ └── CreateCourseCommandHandler.php │ │ │ ├── Find │ │ │ │ └── CourseFinder.php │ │ │ └── Update │ │ │ │ └── CourseRenamer.php │ │ ├── Domain │ │ │ ├── Course.php │ │ │ ├── CourseCreatedDomainEvent.php │ │ │ ├── CourseDuration.php │ │ │ ├── CourseName.php │ │ │ ├── CourseNotExist.php │ │ │ └── CourseRepository.php │ │ └── Infrastructure │ │ │ └── Persistence │ │ │ ├── Doctrine │ │ │ ├── Course.orm.xml │ │ │ ├── CourseDuration.orm.xml │ │ │ ├── CourseIdType.php │ │ │ └── CourseName.orm.xml │ │ │ ├── DoctrineCourseRepository.php │ │ │ ├── Eloquent │ │ │ └── CourseEloquentModel.php │ │ │ ├── EloquentCourseRepository.php │ │ │ └── FileCourseRepository.php │ ├── CoursesCounter │ │ ├── Application │ │ │ ├── Find │ │ │ │ ├── CoursesCounterFinder.php │ │ │ │ ├── CoursesCounterResponse.php │ │ │ │ ├── FindCoursesCounterQuery.php │ │ │ │ └── FindCoursesCounterQueryHandler.php │ │ │ └── Increment │ │ │ │ ├── CoursesCounterIncrementer.php │ │ │ │ └── IncrementCoursesCounterOnCourseCreated.php │ │ ├── Domain │ │ │ ├── CoursesCounter.php │ │ │ ├── CoursesCounterId.php │ │ │ ├── CoursesCounterIncrementedDomainEvent.php │ │ │ ├── CoursesCounterNotExist.php │ │ │ ├── CoursesCounterRepository.php │ │ │ └── CoursesCounterTotal.php │ │ └── Infrastructure │ │ │ └── Persistence │ │ │ ├── Doctrine │ │ │ ├── CourseCounterIdType.php │ │ │ ├── CourseIdsType.php │ │ │ ├── CoursesCounter.orm.xml │ │ │ └── CoursesCounterTotal.orm.xml │ │ │ └── DoctrineCoursesCounterRepository.php │ ├── Notifications │ │ └── Application │ │ │ ├── SendNewCommentReplyEmail │ │ │ └── .gitkeep │ │ │ ├── SendNewCommentReplyPush │ │ │ └── .gitkeep │ │ │ └── SendResetPasswordEmail │ │ │ └── .gitkeep │ ├── Shared │ │ ├── Domain │ │ │ └── Course │ │ │ │ └── CourseId.php │ │ └── Infrastructure │ │ │ ├── Doctrine │ │ │ ├── DbalTypesSearcher.php │ │ │ ├── DoctrinePrefixesSearcher.php │ │ │ └── MoocEntityManagerFactory.php │ │ │ └── Symfony │ │ │ └── DependencyInjection │ │ │ └── mooc_services.yaml │ └── Videos │ │ ├── Application │ │ └── .gitkeep │ │ ├── Domain │ │ └── .gitkeep │ │ └── Infrastructure │ │ └── .gitkeep ├── Retention │ ├── Campaign │ │ ├── Application │ │ │ ├── NewCourseAvailable │ │ │ │ ├── Schedule │ │ │ │ │ └── .gitkeep │ │ │ │ └── Trigger │ │ │ │ │ └── .gitkeep │ │ │ └── WelcomeUser │ │ │ │ └── Trigger │ │ │ │ └── .gitkeep │ │ ├── Domain │ │ │ └── .gitkeep │ │ └── Infrastructure │ │ │ └── .gitkeep │ ├── Email │ │ ├── Application │ │ │ ├── SendNewCourseAvailable │ │ │ │ └── .gitkeep │ │ │ └── SendWelcomeUser │ │ │ │ └── .gitkeep │ │ ├── Domain │ │ │ └── .gitkeep │ │ └── Infrastructure │ │ │ └── .gitkeep │ ├── Push │ │ ├── Application │ │ │ └── SendNewCourseAvailable │ │ │ │ └── .gitkeep │ │ ├── Domain │ │ │ └── .gitkeep │ │ └── Infrastructure │ │ │ └── .gitkeep │ └── Sms │ │ ├── Application │ │ └── .gitkeep │ │ ├── Domain │ │ └── .gitkeep │ │ └── Infrastructure │ │ └── .gitkeep └── Shared │ ├── Domain │ ├── Aggregate │ │ └── AggregateRoot.php │ ├── Assert.php │ ├── Bus │ │ ├── Command │ │ │ ├── Command.php │ │ │ ├── CommandBus.php │ │ │ └── CommandHandler.php │ │ ├── Event │ │ │ ├── DomainEvent.php │ │ │ ├── DomainEventSubscriber.php │ │ │ └── EventBus.php │ │ └── Query │ │ │ ├── Query.php │ │ │ ├── QueryBus.php │ │ │ ├── QueryHandler.php │ │ │ └── Response.php │ ├── Collection.php │ ├── Criteria │ │ ├── Criteria.php │ │ ├── Filter.php │ │ ├── FilterField.php │ │ ├── FilterOperator.php │ │ ├── FilterValue.php │ │ ├── Filters.php │ │ ├── Order.php │ │ ├── OrderBy.php │ │ └── OrderType.php │ ├── DomainError.php │ ├── Logger.php │ ├── Monitoring.php │ ├── RandomNumberGenerator.php │ ├── Utils.php │ ├── UuidGenerator.php │ └── ValueObject │ │ ├── Enum.php │ │ ├── IntValueObject.php │ │ ├── StringValueObject.php │ │ └── Uuid.php │ └── Infrastructure │ ├── Bus │ ├── CallableFirstParameterExtractor.php │ ├── Command │ │ ├── CommandNotRegisteredError.php │ │ └── InMemorySymfonyCommandBus.php │ ├── Event │ │ ├── DomainEventJsonDeserializer.php │ │ ├── DomainEventJsonSerializer.php │ │ ├── DomainEventMapping.php │ │ ├── DomainEventSubscriberLocator.php │ │ ├── InMemory │ │ │ └── InMemorySymfonyEventBus.php │ │ ├── MySql │ │ │ ├── MySqlDoctrineDomainEventsConsumer.php │ │ │ └── MySqlDoctrineEventBus.php │ │ └── RabbitMq │ │ │ ├── RabbitMqConfigurer.php │ │ │ ├── RabbitMqConnection.php │ │ │ ├── RabbitMqDomainEventsConsumer.php │ │ │ ├── RabbitMqEventBus.php │ │ │ ├── RabbitMqExchangeNameFormatter.php │ │ │ └── RabbitMqQueueNameFormatter.php │ └── Query │ │ ├── InMemorySymfonyQueryBus.php │ │ └── QueryNotRegisteredError.php │ ├── Doctrine │ ├── DatabaseConnections.php │ ├── Dbal │ │ ├── DbalCustomTypesRegistrar.php │ │ └── DoctrineCustomType.php │ └── DoctrineEntityManagerFactory.php │ ├── Elasticsearch │ ├── ElasticsearchClient.php │ └── ElasticsearchClientFactory.php │ ├── Logger │ └── MonologLogger.php │ ├── Persistence │ ├── Doctrine │ │ ├── DoctrineCriteriaConverter.php │ │ ├── DoctrineRepository.php │ │ └── UuidType.php │ └── Elasticsearch │ │ ├── ElasticQueryGenerator.php │ │ ├── ElasticsearchCriteriaConverter.php │ │ └── ElasticsearchRepository.php │ ├── PhpRandomNumberGenerator.php │ ├── RamseyUuidGenerator.php │ └── Symfony │ ├── AddJsonBodyToRequestListener.php │ ├── ApiController.php │ ├── ApiExceptionListener.php │ ├── ApiExceptionsHttpStatusCodeMapping.php │ ├── BasicHttpAuthMiddleware.php │ ├── FlashSession.php │ └── WebController.php └── tests ├── apps ├── backoffice │ ├── backend │ │ └── .gitkeep │ └── frontend │ │ └── .gitkeep └── mooc │ ├── backend │ ├── features │ │ ├── courses │ │ │ └── course_put.feature │ │ ├── courses_counter │ │ │ └── courses_counter_get.feature │ │ └── health_check │ │ │ └── health_check_get.feature │ └── mooc_backend.yml │ └── frontend │ └── .gitkeep └── src ├── Backoffice ├── Auth │ ├── Application │ │ └── Authenticate │ │ │ ├── AuthenticateUserCommandHandlerTest.php │ │ │ └── AuthenticateUserCommandMother.php │ ├── AuthModuleUnitTestCase.php │ └── Domain │ │ ├── AuthPasswordMother.php │ │ ├── AuthUserMother.php │ │ └── AuthUsernameMother.php └── Courses │ ├── BackofficeCoursesModuleInfrastructureTestCase.php │ ├── Domain │ ├── BackofficeCourseCriteriaMother.php │ └── BackofficeCourseMother.php │ └── Infrastructure │ └── Persistence │ └── MySqlBackofficeCourseRepositoryTest.php ├── Mooc ├── Courses │ ├── Application │ │ ├── Create │ │ │ ├── CreateCourseCommandHandlerTest.php │ │ │ └── CreateCourseCommandMother.php │ │ └── Update │ │ │ └── CourseRenamerTest.php │ ├── CoursesModuleInfrastructureTestCase.php │ ├── CoursesModuleUnitTestCase.php │ ├── Domain │ │ ├── CourseCreatedDomainEventMother.php │ │ ├── CourseDurationMother.php │ │ ├── CourseIdMother.php │ │ ├── CourseMother.php │ │ └── CourseNameMother.php │ └── Infrastructure │ │ └── Persistence │ │ └── CourseRepositoryTest.php ├── CoursesCounter │ ├── Application │ │ ├── Find │ │ │ ├── CoursesCounterResponseMother.php │ │ │ └── FindCoursesCounterQueryHandlerTest.php │ │ └── Increment │ │ │ └── IncrementCoursesCounterOnCourseCreatedTest.php │ ├── CoursesCounterModuleUnitTestCase.php │ └── Domain │ │ ├── CoursesCounterIdMother.php │ │ ├── CoursesCounterIncrementedDomainEventMother.php │ │ ├── CoursesCounterMother.php │ │ └── CoursesCounterTotalMother.php ├── Shared │ ├── Domain │ │ └── .gitkeep │ └── Infrastructure │ │ └── PhpUnit │ │ ├── MoocContextInfrastructureTestCase.php │ │ └── MoocEnvironmentArranger.php └── Videos │ ├── Application │ └── .gitkeep │ ├── Domain │ └── .gitkeep │ └── Infrastructure │ └── .gitkeep └── Shared ├── Domain ├── Criteria │ ├── CriteriaMother.php │ ├── FilterFieldMother.php │ ├── FilterMother.php │ ├── FilterValueMother.php │ ├── FiltersMother.php │ ├── OrderByMother.php │ └── OrderMother.php ├── DuplicatorMother.php ├── IntegerMother.php ├── MotherCreator.php ├── RandomElementPicker.php ├── Repeater.php ├── TestUtils.php ├── UuidMother.php └── WordMother.php └── Infrastructure ├── Arranger └── EnvironmentArranger.php ├── Behat ├── ApiContext.php └── ApplicationFeatureContext.php ├── Bus ├── Command │ ├── FakeCommand.php │ └── InMemorySymfonyCommandBusTest.php ├── Event │ ├── MySql │ │ └── MySqlDoctrineEventBusTest.php │ └── RabbitMq │ │ ├── RabbitMqEventBusTest.php │ │ └── TestAllWorksOnRabbitMqEventsPublished.php └── Query │ ├── FakeQuery.php │ ├── FakeResponse.php │ └── InMemorySymfonyQueryBusTest.php ├── ConstantRandomNumberGenerator.php ├── Doctrine └── DatabaseCleaner.php ├── Mink ├── MinkHelper.php └── MinkSessionRequestHelper.php ├── Mockery └── CodelyTvMatcherIsSimilar.php └── PhpUnit ├── Comparator ├── AggregateRootArraySimilarComparator.php ├── AggregateRootSimilarComparator.php ├── DateTimeSimilarComparator.php ├── DateTimeStringSimilarComparator.php ├── DomainEventArraySimilarComparator.php └── DomainEventSimilarComparator.php ├── Constraint └── CodelyTvConstraintIsSimilar.php ├── InfrastructureTestCase.php └── UnitTestCase.php /.gitignore: -------------------------------------------------------------------------------- 1 | /**/**/vendor 2 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # GitHub Actions Course 2 | -------------------------------------------------------------------------------- /lessons/02-First_Workflow/02.1-Step_by_step/.github/workflows/ci.yml: -------------------------------------------------------------------------------- 1 | name: First workflow 2 | 3 | on: [push] 4 | 5 | jobs: 6 | build: 7 | runs-on: ubuntu-latest 8 | 9 | steps: 10 | - uses: actions/checkout@v1 11 | 12 | - name: Hello Codelies! 13 | run: echo "Hello!!!! from ${{ github.workflow }} triggered by the ${{ github.event_name }} done by ${{ github.actor }}" 14 | -------------------------------------------------------------------------------- /lessons/03-continuous_Integration/03.1-Executing_tests/.editorconfig: -------------------------------------------------------------------------------- 1 | ; This file is for unifying the coding style for different editors and IDEs. 2 | ; More information at http://editorconfig.org 3 | 4 | root = true 5 | 6 | [*] 7 | charset = utf-8 8 | end_of_line = lf 9 | insert_final_newline = true 10 | trim_trailing_whitespace = true 11 | 12 | [*.php] 13 | indent_size = 4 14 | indent_style = space 15 | 16 | [*.md] 17 | trim_trailing_whitespace = false 18 | -------------------------------------------------------------------------------- /lessons/03-continuous_Integration/03.1-Executing_tests/.gitignore: -------------------------------------------------------------------------------- 1 | vendor/ 2 | -------------------------------------------------------------------------------- /lessons/03-continuous_Integration/03.1-Executing_tests/.scrutinizer.yml: -------------------------------------------------------------------------------- 1 | build: 2 | environment: 3 | php: 4 | version: '7.2' 5 | -------------------------------------------------------------------------------- /lessons/03-continuous_Integration/03.1-Executing_tests/.semver: -------------------------------------------------------------------------------- 1 | --- 2 | :major: 1 3 | :minor: 2 4 | :patch: 1 5 | :special: '' 6 | -------------------------------------------------------------------------------- /lessons/03-continuous_Integration/03.3-Build_Matrix/.editorconfig: -------------------------------------------------------------------------------- 1 | ; This file is for unifying the coding style for different editors and IDEs. 2 | ; More information at http://editorconfig.org 3 | 4 | root = true 5 | 6 | [*] 7 | charset = utf-8 8 | end_of_line = lf 9 | insert_final_newline = true 10 | trim_trailing_whitespace = true 11 | 12 | [*.php] 13 | indent_size = 4 14 | indent_style = space 15 | 16 | [*.md] 17 | trim_trailing_whitespace = false 18 | -------------------------------------------------------------------------------- /lessons/03-continuous_Integration/03.3-Build_Matrix/.gitignore: -------------------------------------------------------------------------------- 1 | vendor/ 2 | -------------------------------------------------------------------------------- /lessons/03-continuous_Integration/03.3-Build_Matrix/.scrutinizer.yml: -------------------------------------------------------------------------------- 1 | build: 2 | environment: 3 | php: 4 | version: '7.2' 5 | -------------------------------------------------------------------------------- /lessons/03-continuous_Integration/03.3-Build_Matrix/.semver: -------------------------------------------------------------------------------- 1 | --- 2 | :major: 1 3 | :minor: 2 4 | :patch: 1 5 | :special: '' 6 | -------------------------------------------------------------------------------- /lessons/04-Testing_Infrastructure/04.1-Installing_dependencies_by_hand/.gitignore: -------------------------------------------------------------------------------- 1 | /.env.local 2 | /.env.*.local 3 | 4 | /apps/*/*/var/ 5 | 6 | /apps/*/*/build/ 7 | !/apps/*/*/build/supervisor/.gitkeep 8 | 9 | /vendor/ 10 | .phpunit.result.cache 11 | 12 | /build 13 | -------------------------------------------------------------------------------- /lessons/04-Testing_Infrastructure/04.1-Installing_dependencies_by_hand/apps/backoffice/backend/config/bundles.php: -------------------------------------------------------------------------------- 1 | ['all' => true], 5 | FriendsOfBehat\SymfonyExtension\Bundle\FriendsOfBehatSymfonyExtensionBundle::class => ['test' => true], 6 | // WouterJ\EloquentBundle\WouterJEloquentBundle::class => ['test' => true] 7 | ]; 8 | -------------------------------------------------------------------------------- /lessons/04-Testing_Infrastructure/04.1-Installing_dependencies_by_hand/apps/backoffice/backend/config/routes/courses.yaml: -------------------------------------------------------------------------------- 1 | courses_get: 2 | path: /courses 3 | controller: CodelyTv\Apps\Backoffice\Backend\Controller\Courses\CoursesGetController 4 | defaults: { auth: true } 5 | methods: [GET] 6 | -------------------------------------------------------------------------------- /lessons/04-Testing_Infrastructure/04.1-Installing_dependencies_by_hand/apps/backoffice/backend/config/routes/health-check.yaml: -------------------------------------------------------------------------------- 1 | health-check_get: 2 | path: /health-check 3 | controller: CodelyTv\Apps\Backoffice\Backend\Controller\HealthCheck\HealthCheckGetController 4 | methods: [GET] 5 | -------------------------------------------------------------------------------- /lessons/04-Testing_Infrastructure/04.1-Installing_dependencies_by_hand/apps/backoffice/backend/config/services_test.yaml: -------------------------------------------------------------------------------- 1 | framework: 2 | test: true 3 | 4 | services: 5 | _defaults: 6 | autoconfigure: true 7 | autowire: true 8 | 9 | CodelyTv\Tests\: 10 | resource: '../../../../tests/src' 11 | 12 | # -- IMPLEMENTATIONS SELECTOR -- 13 | CodelyTv\Shared\Domain\Bus\Event\EventBus: '@CodelyTv\Shared\Infrastructure\Bus\Event\InMemory\InMemorySymfonyEventBus' 14 | -------------------------------------------------------------------------------- /lessons/04-Testing_Infrastructure/04.1-Installing_dependencies_by_hand/apps/backoffice/frontend/config/routes/api_courses.yaml: -------------------------------------------------------------------------------- 1 | api_courses_get: 2 | path: /api/courses 3 | controller: CodelyTv\Apps\Backoffice\Frontend\Controller\Courses\ApiCoursesGetController 4 | methods: [GET] 5 | -------------------------------------------------------------------------------- /lessons/04-Testing_Infrastructure/04.1-Installing_dependencies_by_hand/apps/backoffice/frontend/config/routes/courses.yaml: -------------------------------------------------------------------------------- 1 | courses_get: 2 | path: /courses 3 | controller: CodelyTv\Apps\Backoffice\Frontend\Controller\Courses\CoursesGetController 4 | methods: [GET] 5 | 6 | courses_post: 7 | path: /courses 8 | controller: CodelyTv\Apps\Backoffice\Frontend\Controller\Courses\CoursesPostController 9 | methods: [POST] 10 | -------------------------------------------------------------------------------- /lessons/04-Testing_Infrastructure/04.1-Installing_dependencies_by_hand/apps/backoffice/frontend/config/routes/health-check.yaml: -------------------------------------------------------------------------------- 1 | health-check_get: 2 | path: /health-check 3 | controller: CodelyTv\Apps\Backoffice\Frontend\Controller\HealthCheck\HealthCheckGetController 4 | methods: [GET] 5 | -------------------------------------------------------------------------------- /lessons/04-Testing_Infrastructure/04.1-Installing_dependencies_by_hand/apps/backoffice/frontend/config/routes/home.yaml: -------------------------------------------------------------------------------- 1 | home_get: 2 | path: / 3 | controller: CodelyTv\Apps\Backoffice\Frontend\Controller\Home\HomeGetController 4 | methods: [GET] 5 | -------------------------------------------------------------------------------- /lessons/04-Testing_Infrastructure/04.1-Installing_dependencies_by_hand/apps/backoffice/frontend/config/services_test.yaml: -------------------------------------------------------------------------------- 1 | framework: 2 | test: true 3 | 4 | services: 5 | _defaults: 6 | autoconfigure: true 7 | autowire: true 8 | 9 | CodelyTv\Tests\: 10 | resource: '../../../../tests/src' 11 | 12 | # -- IMPLEMENTATIONS SELECTOR -- 13 | CodelyTv\Shared\Domain\Bus\Event\EventBus: '@CodelyTv\Shared\Infrastructure\Bus\Event\InMemory\InMemorySymfonyEventBus' 14 | -------------------------------------------------------------------------------- /lessons/04-Testing_Infrastructure/04.1-Installing_dependencies_by_hand/apps/backoffice/frontend/public/images/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/ci_with_github_actions-course/6fb82cb404b28c22ecaaf3eec7e3692c70d0de82/lessons/04-Testing_Infrastructure/04.1-Installing_dependencies_by_hand/apps/backoffice/frontend/public/images/logo.png -------------------------------------------------------------------------------- /lessons/04-Testing_Infrastructure/04.1-Installing_dependencies_by_hand/apps/backoffice/frontend/templates/pages/home.html.twig: -------------------------------------------------------------------------------- 1 | {% extends 'master.html.twig' %} 2 | 3 | {% block page_title %}HOME{% endblock %} 4 | 5 | {% block main %} 6 | HOLIII HOME 7 | {% endblock %} 8 | -------------------------------------------------------------------------------- /lessons/04-Testing_Infrastructure/04.1-Installing_dependencies_by_hand/apps/backoffice/frontend/templates/partials/footer.html.twig: -------------------------------------------------------------------------------- 1 | 8 | -------------------------------------------------------------------------------- /lessons/04-Testing_Infrastructure/04.1-Installing_dependencies_by_hand/apps/mooc/backend/config/bundles.php: -------------------------------------------------------------------------------- 1 | ['all' => true], 5 | FriendsOfBehat\SymfonyExtension\Bundle\FriendsOfBehatSymfonyExtensionBundle::class => ['test' => true], 6 | // WouterJ\EloquentBundle\WouterJEloquentBundle::class => ['test' => true] 7 | ]; 8 | -------------------------------------------------------------------------------- /lessons/04-Testing_Infrastructure/04.1-Installing_dependencies_by_hand/apps/mooc/backend/config/routes/courses.yaml: -------------------------------------------------------------------------------- 1 | courses_put: 2 | path: /courses/{id} 3 | controller: CodelyTv\Apps\Mooc\Backend\Controller\Courses\CoursesPutController 4 | methods: [PUT] 5 | -------------------------------------------------------------------------------- /lessons/04-Testing_Infrastructure/04.1-Installing_dependencies_by_hand/apps/mooc/backend/config/routes/courses_counter.yaml: -------------------------------------------------------------------------------- 1 | courses_counter_get: 2 | path: /courses-counter 3 | controller: CodelyTv\Apps\Mooc\Backend\Controller\CoursesCounter\CoursesCounterGetController 4 | methods: [GET] 5 | -------------------------------------------------------------------------------- /lessons/04-Testing_Infrastructure/04.1-Installing_dependencies_by_hand/apps/mooc/backend/config/routes/health-check.yaml: -------------------------------------------------------------------------------- 1 | health-check_get: 2 | path: /health-check 3 | controller: CodelyTv\Apps\Mooc\Backend\Controller\HealthCheck\HealthCheckGetController 4 | methods: [GET] 5 | -------------------------------------------------------------------------------- /lessons/04-Testing_Infrastructure/04.1-Installing_dependencies_by_hand/apps/mooc/frontend/src/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/ci_with_github_actions-course/6fb82cb404b28c22ecaaf3eec7e3692c70d0de82/lessons/04-Testing_Infrastructure/04.1-Installing_dependencies_by_hand/apps/mooc/frontend/src/.gitkeep -------------------------------------------------------------------------------- /lessons/04-Testing_Infrastructure/04.1-Installing_dependencies_by_hand/behat.yml: -------------------------------------------------------------------------------- 1 | imports: 2 | - tests/apps/mooc/backend/mooc_backend.yml 3 | -------------------------------------------------------------------------------- /lessons/04-Testing_Infrastructure/04.1-Installing_dependencies_by_hand/doc/endpoints/backoffice_frontend.http: -------------------------------------------------------------------------------- 1 | # ELASTIC - Search 2 | POST localhost:9200/backoffice_courses/_search 3 | Content-Type: application/json 4 | 5 | { 6 | "query": { 7 | "term": { 8 | "name": "Pepe" 9 | } 10 | } 11 | } 12 | 13 | ### 14 | # ELASTIC - Search 15 | POST localhost:9200/backoffice_courses/_search 16 | Content-Type: application/json 17 | 18 | ### 19 | -------------------------------------------------------------------------------- /lessons/04-Testing_Infrastructure/04.1-Installing_dependencies_by_hand/etc/infrastructure/php/conf.d/apcu.ini: -------------------------------------------------------------------------------- 1 | apc.shm_segments=1 2 | apc.shm_size=256M 3 | apc.num_files_hint=7000 4 | apc.user_entries_hint=4096 5 | apc.ttl=7200 6 | apc.user_ttl=7200 7 | apc.gc_ttl=3600 8 | apc.max_file_size=1M 9 | apc.stat=1 10 | -------------------------------------------------------------------------------- /lessons/04-Testing_Infrastructure/04.1-Installing_dependencies_by_hand/etc/infrastructure/php/conf.d/opcache.ini: -------------------------------------------------------------------------------- 1 | opcache.memory_consumption=128 2 | opcache.interned_strings_buffer=8 3 | opcache.max_accelerated_files=4000 4 | opcache.revalidate_freq=60 5 | opcache.fast_shutdown=1 6 | opcache.enable_cli=1 7 | -------------------------------------------------------------------------------- /lessons/04-Testing_Infrastructure/04.1-Installing_dependencies_by_hand/etc/infrastructure/php/php.ini: -------------------------------------------------------------------------------- 1 | date.timezone = "UTC" 2 | html_errors = "On" 3 | display_errors = "On" 4 | error_reporting = E_ALL 5 | -------------------------------------------------------------------------------- /lessons/04-Testing_Infrastructure/04.1-Installing_dependencies_by_hand/etc/install.sh: -------------------------------------------------------------------------------- 1 | apt-get install mysql 2 | apt-get install php74 3 | apt-get install rabbitmq 4 | pecl install xdebug 5 | -------------------------------------------------------------------------------- /lessons/04-Testing_Infrastructure/04.1-Installing_dependencies_by_hand/src/Analytics/DomainEvents/Domain/AnalyticsDomainEventAggregateId.php: -------------------------------------------------------------------------------- 1 | does not exists', $username->value())); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /lessons/04-Testing_Infrastructure/04.1-Installing_dependencies_by_hand/src/Backoffice/Courses/Application/SearchAll/SearchAllBackofficeCoursesQuery.php: -------------------------------------------------------------------------------- 1 | randomElement($elements); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /lessons/04-Testing_Infrastructure/04.1-Installing_dependencies_by_hand/tests/src/Shared/Domain/UuidMother.php: -------------------------------------------------------------------------------- 1 | unique()->uuid; 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /lessons/04-Testing_Infrastructure/04.1-Installing_dependencies_by_hand/tests/src/Shared/Domain/WordMother.php: -------------------------------------------------------------------------------- 1 | word; 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /lessons/04-Testing_Infrastructure/04.1-Installing_dependencies_by_hand/tests/src/Shared/Infrastructure/Arranger/EnvironmentArranger.php: -------------------------------------------------------------------------------- 1 | ['all' => true], 5 | FriendsOfBehat\SymfonyExtension\Bundle\FriendsOfBehatSymfonyExtensionBundle::class => ['test' => true], 6 | // WouterJ\EloquentBundle\WouterJEloquentBundle::class => ['test' => true] 7 | ]; 8 | -------------------------------------------------------------------------------- /lessons/04-Testing_Infrastructure/04.2-Installing_dependencies_by_docker/apps/backoffice/backend/config/routes/courses.yaml: -------------------------------------------------------------------------------- 1 | courses_get: 2 | path: /courses 3 | controller: CodelyTv\Apps\Backoffice\Backend\Controller\Courses\CoursesGetController 4 | defaults: { auth: true } 5 | methods: [GET] 6 | -------------------------------------------------------------------------------- /lessons/04-Testing_Infrastructure/04.2-Installing_dependencies_by_docker/apps/backoffice/backend/config/routes/health-check.yaml: -------------------------------------------------------------------------------- 1 | health-check_get: 2 | path: /health-check 3 | controller: CodelyTv\Apps\Backoffice\Backend\Controller\HealthCheck\HealthCheckGetController 4 | methods: [GET] 5 | -------------------------------------------------------------------------------- /lessons/04-Testing_Infrastructure/04.2-Installing_dependencies_by_docker/apps/backoffice/frontend/config/routes/api_courses.yaml: -------------------------------------------------------------------------------- 1 | api_courses_get: 2 | path: /api/courses 3 | controller: CodelyTv\Apps\Backoffice\Frontend\Controller\Courses\ApiCoursesGetController 4 | methods: [GET] 5 | -------------------------------------------------------------------------------- /lessons/04-Testing_Infrastructure/04.2-Installing_dependencies_by_docker/apps/backoffice/frontend/config/routes/courses.yaml: -------------------------------------------------------------------------------- 1 | courses_get: 2 | path: /courses 3 | controller: CodelyTv\Apps\Backoffice\Frontend\Controller\Courses\CoursesGetController 4 | methods: [GET] 5 | 6 | courses_post: 7 | path: /courses 8 | controller: CodelyTv\Apps\Backoffice\Frontend\Controller\Courses\CoursesPostController 9 | methods: [POST] 10 | -------------------------------------------------------------------------------- /lessons/04-Testing_Infrastructure/04.2-Installing_dependencies_by_docker/apps/backoffice/frontend/config/routes/health-check.yaml: -------------------------------------------------------------------------------- 1 | health-check_get: 2 | path: /health-check 3 | controller: CodelyTv\Apps\Backoffice\Frontend\Controller\HealthCheck\HealthCheckGetController 4 | methods: [GET] 5 | -------------------------------------------------------------------------------- /lessons/04-Testing_Infrastructure/04.2-Installing_dependencies_by_docker/apps/backoffice/frontend/config/routes/home.yaml: -------------------------------------------------------------------------------- 1 | home_get: 2 | path: / 3 | controller: CodelyTv\Apps\Backoffice\Frontend\Controller\Home\HomeGetController 4 | methods: [GET] 5 | -------------------------------------------------------------------------------- /lessons/04-Testing_Infrastructure/04.2-Installing_dependencies_by_docker/apps/backoffice/frontend/public/images/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/ci_with_github_actions-course/6fb82cb404b28c22ecaaf3eec7e3692c70d0de82/lessons/04-Testing_Infrastructure/04.2-Installing_dependencies_by_docker/apps/backoffice/frontend/public/images/logo.png -------------------------------------------------------------------------------- /lessons/04-Testing_Infrastructure/04.2-Installing_dependencies_by_docker/apps/backoffice/frontend/templates/pages/home.html.twig: -------------------------------------------------------------------------------- 1 | {% extends 'master.html.twig' %} 2 | 3 | {% block page_title %}HOME{% endblock %} 4 | 5 | {% block main %} 6 | HOLIII HOME 7 | {% endblock %} 8 | -------------------------------------------------------------------------------- /lessons/04-Testing_Infrastructure/04.2-Installing_dependencies_by_docker/apps/backoffice/frontend/templates/partials/footer.html.twig: -------------------------------------------------------------------------------- 1 | 8 | -------------------------------------------------------------------------------- /lessons/04-Testing_Infrastructure/04.2-Installing_dependencies_by_docker/apps/mooc/backend/config/bundles.php: -------------------------------------------------------------------------------- 1 | ['all' => true], 5 | FriendsOfBehat\SymfonyExtension\Bundle\FriendsOfBehatSymfonyExtensionBundle::class => ['test' => true], 6 | // WouterJ\EloquentBundle\WouterJEloquentBundle::class => ['test' => true] 7 | ]; 8 | -------------------------------------------------------------------------------- /lessons/04-Testing_Infrastructure/04.2-Installing_dependencies_by_docker/apps/mooc/backend/config/routes/courses.yaml: -------------------------------------------------------------------------------- 1 | courses_put: 2 | path: /courses/{id} 3 | controller: CodelyTv\Apps\Mooc\Backend\Controller\Courses\CoursesPutController 4 | methods: [PUT] 5 | -------------------------------------------------------------------------------- /lessons/04-Testing_Infrastructure/04.2-Installing_dependencies_by_docker/apps/mooc/backend/config/routes/courses_counter.yaml: -------------------------------------------------------------------------------- 1 | courses_counter_get: 2 | path: /courses-counter 3 | controller: CodelyTv\Apps\Mooc\Backend\Controller\CoursesCounter\CoursesCounterGetController 4 | methods: [GET] 5 | -------------------------------------------------------------------------------- /lessons/04-Testing_Infrastructure/04.2-Installing_dependencies_by_docker/apps/mooc/backend/config/routes/health-check.yaml: -------------------------------------------------------------------------------- 1 | health-check_get: 2 | path: /health-check 3 | controller: CodelyTv\Apps\Mooc\Backend\Controller\HealthCheck\HealthCheckGetController 4 | methods: [GET] 5 | -------------------------------------------------------------------------------- /lessons/04-Testing_Infrastructure/04.2-Installing_dependencies_by_docker/apps/mooc/frontend/src/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/ci_with_github_actions-course/6fb82cb404b28c22ecaaf3eec7e3692c70d0de82/lessons/04-Testing_Infrastructure/04.2-Installing_dependencies_by_docker/apps/mooc/frontend/src/.gitkeep -------------------------------------------------------------------------------- /lessons/04-Testing_Infrastructure/04.2-Installing_dependencies_by_docker/behat.yml: -------------------------------------------------------------------------------- 1 | imports: 2 | - tests/apps/mooc/backend/mooc_backend.yml 3 | -------------------------------------------------------------------------------- /lessons/04-Testing_Infrastructure/04.2-Installing_dependencies_by_docker/doc/endpoints/backoffice_frontend.http: -------------------------------------------------------------------------------- 1 | # ELASTIC - Search 2 | POST localhost:9200/backoffice_courses/_search 3 | Content-Type: application/json 4 | 5 | { 6 | "query": { 7 | "term": { 8 | "name": "Pepe" 9 | } 10 | } 11 | } 12 | 13 | ### 14 | # ELASTIC - Search 15 | POST localhost:9200/backoffice_courses/_search 16 | Content-Type: application/json 17 | 18 | ### 19 | -------------------------------------------------------------------------------- /lessons/04-Testing_Infrastructure/04.2-Installing_dependencies_by_docker/etc/infrastructure/php/conf.d/apcu.ini: -------------------------------------------------------------------------------- 1 | apc.shm_segments=1 2 | apc.shm_size=256M 3 | apc.num_files_hint=7000 4 | apc.user_entries_hint=4096 5 | apc.ttl=7200 6 | apc.user_ttl=7200 7 | apc.gc_ttl=3600 8 | apc.max_file_size=1M 9 | apc.stat=1 10 | -------------------------------------------------------------------------------- /lessons/04-Testing_Infrastructure/04.2-Installing_dependencies_by_docker/etc/infrastructure/php/conf.d/opcache.ini: -------------------------------------------------------------------------------- 1 | opcache.memory_consumption=128 2 | opcache.interned_strings_buffer=8 3 | opcache.max_accelerated_files=4000 4 | opcache.revalidate_freq=60 5 | opcache.fast_shutdown=1 6 | opcache.enable_cli=1 7 | -------------------------------------------------------------------------------- /lessons/04-Testing_Infrastructure/04.2-Installing_dependencies_by_docker/etc/infrastructure/php/php.ini: -------------------------------------------------------------------------------- 1 | date.timezone = "UTC" 2 | html_errors = "On" 3 | display_errors = "On" 4 | error_reporting = E_ALL 5 | -------------------------------------------------------------------------------- /lessons/04-Testing_Infrastructure/04.2-Installing_dependencies_by_docker/etc/install.sh: -------------------------------------------------------------------------------- 1 | apt-get install mysql 2 | apt-get install php74 3 | apt-get install rabbitmq 4 | pecl install xdebug 5 | -------------------------------------------------------------------------------- /lessons/04-Testing_Infrastructure/04.2-Installing_dependencies_by_docker/src/Analytics/DomainEvents/Domain/AnalyticsDomainEventAggregateId.php: -------------------------------------------------------------------------------- 1 | does not exists', $username->value())); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /lessons/04-Testing_Infrastructure/04.2-Installing_dependencies_by_docker/src/Backoffice/Courses/Application/SearchAll/SearchAllBackofficeCoursesQuery.php: -------------------------------------------------------------------------------- 1 | randomElement($elements); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /lessons/04-Testing_Infrastructure/04.2-Installing_dependencies_by_docker/tests/src/Shared/Domain/UuidMother.php: -------------------------------------------------------------------------------- 1 | unique()->uuid; 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /lessons/04-Testing_Infrastructure/04.2-Installing_dependencies_by_docker/tests/src/Shared/Domain/WordMother.php: -------------------------------------------------------------------------------- 1 | word; 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /lessons/04-Testing_Infrastructure/04.2-Installing_dependencies_by_docker/tests/src/Shared/Infrastructure/Arranger/EnvironmentArranger.php: -------------------------------------------------------------------------------- 1 | ['all' => true], 5 | FriendsOfBehat\SymfonyExtension\Bundle\FriendsOfBehatSymfonyExtensionBundle::class => ['test' => true], 6 | // WouterJ\EloquentBundle\WouterJEloquentBundle::class => ['test' => true] 7 | ]; 8 | -------------------------------------------------------------------------------- /lessons/05-Optimizing_Speed/05.1-Cache/php/apps/backoffice/backend/config/routes/courses.yaml: -------------------------------------------------------------------------------- 1 | courses_get: 2 | path: /courses 3 | controller: CodelyTv\Apps\Backoffice\Backend\Controller\Courses\CoursesGetController 4 | defaults: { auth: true } 5 | methods: [GET] 6 | -------------------------------------------------------------------------------- /lessons/05-Optimizing_Speed/05.1-Cache/php/apps/backoffice/backend/config/routes/health-check.yaml: -------------------------------------------------------------------------------- 1 | health-check_get: 2 | path: /health-check 3 | controller: CodelyTv\Apps\Backoffice\Backend\Controller\HealthCheck\HealthCheckGetController 4 | methods: [GET] 5 | -------------------------------------------------------------------------------- /lessons/05-Optimizing_Speed/05.1-Cache/php/apps/backoffice/backend/config/services_test.yaml: -------------------------------------------------------------------------------- 1 | framework: 2 | test: true 3 | 4 | services: 5 | _defaults: 6 | autoconfigure: true 7 | autowire: true 8 | 9 | CodelyTv\Tests\: 10 | resource: '../../../../tests/src' 11 | 12 | # -- IMPLEMENTATIONS SELECTOR -- 13 | CodelyTv\Shared\Domain\Bus\Event\EventBus: '@CodelyTv\Shared\Infrastructure\Bus\Event\InMemory\InMemorySymfonyEventBus' 14 | -------------------------------------------------------------------------------- /lessons/05-Optimizing_Speed/05.1-Cache/php/apps/backoffice/frontend/config/routes/api_courses.yaml: -------------------------------------------------------------------------------- 1 | api_courses_get: 2 | path: /api/courses 3 | controller: CodelyTv\Apps\Backoffice\Frontend\Controller\Courses\ApiCoursesGetController 4 | methods: [GET] 5 | -------------------------------------------------------------------------------- /lessons/05-Optimizing_Speed/05.1-Cache/php/apps/backoffice/frontend/config/routes/courses.yaml: -------------------------------------------------------------------------------- 1 | courses_get: 2 | path: /courses 3 | controller: CodelyTv\Apps\Backoffice\Frontend\Controller\Courses\CoursesGetController 4 | methods: [GET] 5 | 6 | courses_post: 7 | path: /courses 8 | controller: CodelyTv\Apps\Backoffice\Frontend\Controller\Courses\CoursesPostController 9 | methods: [POST] 10 | -------------------------------------------------------------------------------- /lessons/05-Optimizing_Speed/05.1-Cache/php/apps/backoffice/frontend/config/routes/health-check.yaml: -------------------------------------------------------------------------------- 1 | health-check_get: 2 | path: /health-check 3 | controller: CodelyTv\Apps\Backoffice\Frontend\Controller\HealthCheck\HealthCheckGetController 4 | methods: [GET] 5 | -------------------------------------------------------------------------------- /lessons/05-Optimizing_Speed/05.1-Cache/php/apps/backoffice/frontend/config/routes/home.yaml: -------------------------------------------------------------------------------- 1 | home_get: 2 | path: / 3 | controller: CodelyTv\Apps\Backoffice\Frontend\Controller\Home\HomeGetController 4 | methods: [GET] 5 | -------------------------------------------------------------------------------- /lessons/05-Optimizing_Speed/05.1-Cache/php/apps/backoffice/frontend/config/services_test.yaml: -------------------------------------------------------------------------------- 1 | framework: 2 | test: true 3 | 4 | services: 5 | _defaults: 6 | autoconfigure: true 7 | autowire: true 8 | 9 | CodelyTv\Tests\: 10 | resource: '../../../../tests/src' 11 | 12 | # -- IMPLEMENTATIONS SELECTOR -- 13 | CodelyTv\Shared\Domain\Bus\Event\EventBus: '@CodelyTv\Shared\Infrastructure\Bus\Event\InMemory\InMemorySymfonyEventBus' 14 | -------------------------------------------------------------------------------- /lessons/05-Optimizing_Speed/05.1-Cache/php/apps/backoffice/frontend/public/images/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/ci_with_github_actions-course/6fb82cb404b28c22ecaaf3eec7e3692c70d0de82/lessons/05-Optimizing_Speed/05.1-Cache/php/apps/backoffice/frontend/public/images/logo.png -------------------------------------------------------------------------------- /lessons/05-Optimizing_Speed/05.1-Cache/php/apps/backoffice/frontend/templates/pages/home.html.twig: -------------------------------------------------------------------------------- 1 | {% extends 'master.html.twig' %} 2 | 3 | {% block page_title %}HOME{% endblock %} 4 | 5 | {% block main %} 6 | HOLIII HOME 7 | {% endblock %} 8 | -------------------------------------------------------------------------------- /lessons/05-Optimizing_Speed/05.1-Cache/php/apps/backoffice/frontend/templates/partials/footer.html.twig: -------------------------------------------------------------------------------- 1 | 8 | -------------------------------------------------------------------------------- /lessons/05-Optimizing_Speed/05.1-Cache/php/apps/mooc/backend/config/bundles.php: -------------------------------------------------------------------------------- 1 | ['all' => true], 5 | FriendsOfBehat\SymfonyExtension\Bundle\FriendsOfBehatSymfonyExtensionBundle::class => ['test' => true], 6 | // WouterJ\EloquentBundle\WouterJEloquentBundle::class => ['test' => true] 7 | ]; 8 | -------------------------------------------------------------------------------- /lessons/05-Optimizing_Speed/05.1-Cache/php/apps/mooc/backend/config/routes/courses.yaml: -------------------------------------------------------------------------------- 1 | courses_put: 2 | path: /courses/{id} 3 | controller: CodelyTv\Apps\Mooc\Backend\Controller\Courses\CoursesPutController 4 | methods: [PUT] 5 | -------------------------------------------------------------------------------- /lessons/05-Optimizing_Speed/05.1-Cache/php/apps/mooc/backend/config/routes/courses_counter.yaml: -------------------------------------------------------------------------------- 1 | courses_counter_get: 2 | path: /courses-counter 3 | controller: CodelyTv\Apps\Mooc\Backend\Controller\CoursesCounter\CoursesCounterGetController 4 | methods: [GET] 5 | -------------------------------------------------------------------------------- /lessons/05-Optimizing_Speed/05.1-Cache/php/apps/mooc/backend/config/routes/health-check.yaml: -------------------------------------------------------------------------------- 1 | health-check_get: 2 | path: /health-check 3 | controller: CodelyTv\Apps\Mooc\Backend\Controller\HealthCheck\HealthCheckGetController 4 | methods: [GET] 5 | -------------------------------------------------------------------------------- /lessons/05-Optimizing_Speed/05.1-Cache/php/apps/mooc/frontend/src/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/ci_with_github_actions-course/6fb82cb404b28c22ecaaf3eec7e3692c70d0de82/lessons/05-Optimizing_Speed/05.1-Cache/php/apps/mooc/frontend/src/.gitkeep -------------------------------------------------------------------------------- /lessons/05-Optimizing_Speed/05.1-Cache/php/behat.yml: -------------------------------------------------------------------------------- 1 | imports: 2 | - tests/apps/mooc/backend/mooc_backend.yml 3 | -------------------------------------------------------------------------------- /lessons/05-Optimizing_Speed/05.1-Cache/php/doc/endpoints/backoffice_frontend.http: -------------------------------------------------------------------------------- 1 | # ELASTIC - Search 2 | POST localhost:9200/backoffice_courses/_search 3 | Content-Type: application/json 4 | 5 | { 6 | "query": { 7 | "term": { 8 | "name": "Pepe" 9 | } 10 | } 11 | } 12 | 13 | ### 14 | # ELASTIC - Search 15 | POST localhost:9200/backoffice_courses/_search 16 | Content-Type: application/json 17 | 18 | ### 19 | 20 | -------------------------------------------------------------------------------- /lessons/05-Optimizing_Speed/05.1-Cache/php/etc/infrastructure/php/conf.d/apcu.ini: -------------------------------------------------------------------------------- 1 | apc.shm_segments=1 2 | apc.shm_size=256M 3 | apc.num_files_hint=7000 4 | apc.user_entries_hint=4096 5 | apc.ttl=7200 6 | apc.user_ttl=7200 7 | apc.gc_ttl=3600 8 | apc.max_file_size=1M 9 | apc.stat=1 10 | -------------------------------------------------------------------------------- /lessons/05-Optimizing_Speed/05.1-Cache/php/etc/infrastructure/php/conf.d/opcache.ini: -------------------------------------------------------------------------------- 1 | opcache.memory_consumption=128 2 | opcache.interned_strings_buffer=8 3 | opcache.max_accelerated_files=4000 4 | opcache.revalidate_freq=60 5 | opcache.fast_shutdown=1 6 | opcache.enable_cli=1 7 | -------------------------------------------------------------------------------- /lessons/05-Optimizing_Speed/05.1-Cache/php/etc/infrastructure/php/php.ini: -------------------------------------------------------------------------------- 1 | date.timezone = "UTC" 2 | html_errors = "On" 3 | display_errors = "On" 4 | error_reporting = E_ALL 5 | -------------------------------------------------------------------------------- /lessons/05-Optimizing_Speed/05.1-Cache/php/src/Analytics/DomainEvents/Domain/AnalyticsDomainEventAggregateId.php: -------------------------------------------------------------------------------- 1 | value() === $other->value(); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /lessons/05-Optimizing_Speed/05.1-Cache/php/src/Backoffice/Auth/Domain/AuthRepository.php: -------------------------------------------------------------------------------- 1 | are invalid', $username->value())); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /lessons/05-Optimizing_Speed/05.1-Cache/php/src/Backoffice/Auth/Domain/InvalidAuthUsername.php: -------------------------------------------------------------------------------- 1 | does not exists', $username->value())); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /lessons/05-Optimizing_Speed/05.1-Cache/php/src/Backoffice/Courses/Application/SearchAll/SearchAllBackofficeCoursesQuery.php: -------------------------------------------------------------------------------- 1 | toString(); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /lessons/05-Optimizing_Speed/05.1-Cache/php/tests/apps/backoffice/backend/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/ci_with_github_actions-course/6fb82cb404b28c22ecaaf3eec7e3692c70d0de82/lessons/05-Optimizing_Speed/05.1-Cache/php/tests/apps/backoffice/backend/.gitkeep -------------------------------------------------------------------------------- /lessons/05-Optimizing_Speed/05.1-Cache/php/tests/apps/backoffice/frontend/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/ci_with_github_actions-course/6fb82cb404b28c22ecaaf3eec7e3692c70d0de82/lessons/05-Optimizing_Speed/05.1-Cache/php/tests/apps/backoffice/frontend/.gitkeep -------------------------------------------------------------------------------- /lessons/05-Optimizing_Speed/05.1-Cache/php/tests/apps/mooc/frontend/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/ci_with_github_actions-course/6fb82cb404b28c22ecaaf3eec7e3692c70d0de82/lessons/05-Optimizing_Speed/05.1-Cache/php/tests/apps/mooc/frontend/.gitkeep -------------------------------------------------------------------------------- /lessons/05-Optimizing_Speed/05.1-Cache/php/tests/src/Mooc/Shared/Domain/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/ci_with_github_actions-course/6fb82cb404b28c22ecaaf3eec7e3692c70d0de82/lessons/05-Optimizing_Speed/05.1-Cache/php/tests/src/Mooc/Shared/Domain/.gitkeep -------------------------------------------------------------------------------- /lessons/05-Optimizing_Speed/05.1-Cache/php/tests/src/Mooc/Videos/Application/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/ci_with_github_actions-course/6fb82cb404b28c22ecaaf3eec7e3692c70d0de82/lessons/05-Optimizing_Speed/05.1-Cache/php/tests/src/Mooc/Videos/Application/.gitkeep -------------------------------------------------------------------------------- /lessons/05-Optimizing_Speed/05.1-Cache/php/tests/src/Mooc/Videos/Domain/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/ci_with_github_actions-course/6fb82cb404b28c22ecaaf3eec7e3692c70d0de82/lessons/05-Optimizing_Speed/05.1-Cache/php/tests/src/Mooc/Videos/Domain/.gitkeep -------------------------------------------------------------------------------- /lessons/05-Optimizing_Speed/05.1-Cache/php/tests/src/Mooc/Videos/Infrastructure/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/ci_with_github_actions-course/6fb82cb404b28c22ecaaf3eec7e3692c70d0de82/lessons/05-Optimizing_Speed/05.1-Cache/php/tests/src/Mooc/Videos/Infrastructure/.gitkeep -------------------------------------------------------------------------------- /lessons/05-Optimizing_Speed/05.1-Cache/php/tests/src/Shared/Domain/MotherCreator.php: -------------------------------------------------------------------------------- 1 | randomElement($elements); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /lessons/05-Optimizing_Speed/05.1-Cache/php/tests/src/Shared/Domain/UuidMother.php: -------------------------------------------------------------------------------- 1 | unique()->uuid; 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /lessons/05-Optimizing_Speed/05.1-Cache/php/tests/src/Shared/Domain/WordMother.php: -------------------------------------------------------------------------------- 1 | word; 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /lessons/05-Optimizing_Speed/05.1-Cache/php/tests/src/Shared/Infrastructure/Arranger/EnvironmentArranger.php: -------------------------------------------------------------------------------- 1 | ['all' => true], 5 | FriendsOfBehat\SymfonyExtension\Bundle\FriendsOfBehatSymfonyExtensionBundle::class => ['test' => true], 6 | // WouterJ\EloquentBundle\WouterJEloquentBundle::class => ['test' => true] 7 | ]; 8 | -------------------------------------------------------------------------------- /lessons/05-Optimizing_Speed/05.2-Parallel_Tests/apps/backoffice/backend/config/routes/courses.yaml: -------------------------------------------------------------------------------- 1 | courses_get: 2 | path: /courses 3 | controller: CodelyTv\Apps\Backoffice\Backend\Controller\Courses\CoursesGetController 4 | defaults: { auth: true } 5 | methods: [GET] 6 | -------------------------------------------------------------------------------- /lessons/05-Optimizing_Speed/05.2-Parallel_Tests/apps/backoffice/backend/config/routes/health-check.yaml: -------------------------------------------------------------------------------- 1 | health-check_get: 2 | path: /health-check 3 | controller: CodelyTv\Apps\Backoffice\Backend\Controller\HealthCheck\HealthCheckGetController 4 | methods: [GET] 5 | -------------------------------------------------------------------------------- /lessons/05-Optimizing_Speed/05.2-Parallel_Tests/apps/backoffice/backend/config/services_test.yaml: -------------------------------------------------------------------------------- 1 | framework: 2 | test: true 3 | 4 | services: 5 | _defaults: 6 | autoconfigure: true 7 | autowire: true 8 | 9 | CodelyTv\Tests\: 10 | resource: '../../../../tests/src' 11 | 12 | # -- IMPLEMENTATIONS SELECTOR -- 13 | CodelyTv\Shared\Domain\Bus\Event\EventBus: '@CodelyTv\Shared\Infrastructure\Bus\Event\InMemory\InMemorySymfonyEventBus' 14 | -------------------------------------------------------------------------------- /lessons/05-Optimizing_Speed/05.2-Parallel_Tests/apps/backoffice/frontend/config/routes/api_courses.yaml: -------------------------------------------------------------------------------- 1 | api_courses_get: 2 | path: /api/courses 3 | controller: CodelyTv\Apps\Backoffice\Frontend\Controller\Courses\ApiCoursesGetController 4 | methods: [GET] 5 | -------------------------------------------------------------------------------- /lessons/05-Optimizing_Speed/05.2-Parallel_Tests/apps/backoffice/frontend/config/routes/courses.yaml: -------------------------------------------------------------------------------- 1 | courses_get: 2 | path: /courses 3 | controller: CodelyTv\Apps\Backoffice\Frontend\Controller\Courses\CoursesGetController 4 | methods: [GET] 5 | 6 | courses_post: 7 | path: /courses 8 | controller: CodelyTv\Apps\Backoffice\Frontend\Controller\Courses\CoursesPostController 9 | methods: [POST] 10 | -------------------------------------------------------------------------------- /lessons/05-Optimizing_Speed/05.2-Parallel_Tests/apps/backoffice/frontend/config/routes/health-check.yaml: -------------------------------------------------------------------------------- 1 | health-check_get: 2 | path: /health-check 3 | controller: CodelyTv\Apps\Backoffice\Frontend\Controller\HealthCheck\HealthCheckGetController 4 | methods: [GET] 5 | -------------------------------------------------------------------------------- /lessons/05-Optimizing_Speed/05.2-Parallel_Tests/apps/backoffice/frontend/config/routes/home.yaml: -------------------------------------------------------------------------------- 1 | home_get: 2 | path: / 3 | controller: CodelyTv\Apps\Backoffice\Frontend\Controller\Home\HomeGetController 4 | methods: [GET] 5 | -------------------------------------------------------------------------------- /lessons/05-Optimizing_Speed/05.2-Parallel_Tests/apps/backoffice/frontend/config/services_test.yaml: -------------------------------------------------------------------------------- 1 | framework: 2 | test: true 3 | 4 | services: 5 | _defaults: 6 | autoconfigure: true 7 | autowire: true 8 | 9 | CodelyTv\Tests\: 10 | resource: '../../../../tests/src' 11 | 12 | # -- IMPLEMENTATIONS SELECTOR -- 13 | CodelyTv\Shared\Domain\Bus\Event\EventBus: '@CodelyTv\Shared\Infrastructure\Bus\Event\InMemory\InMemorySymfonyEventBus' 14 | -------------------------------------------------------------------------------- /lessons/05-Optimizing_Speed/05.2-Parallel_Tests/apps/backoffice/frontend/public/images/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/ci_with_github_actions-course/6fb82cb404b28c22ecaaf3eec7e3692c70d0de82/lessons/05-Optimizing_Speed/05.2-Parallel_Tests/apps/backoffice/frontend/public/images/logo.png -------------------------------------------------------------------------------- /lessons/05-Optimizing_Speed/05.2-Parallel_Tests/apps/backoffice/frontend/templates/pages/home.html.twig: -------------------------------------------------------------------------------- 1 | {% extends 'master.html.twig' %} 2 | 3 | {% block page_title %}HOME{% endblock %} 4 | 5 | {% block main %} 6 | HOLIII HOME 7 | {% endblock %} 8 | -------------------------------------------------------------------------------- /lessons/05-Optimizing_Speed/05.2-Parallel_Tests/apps/backoffice/frontend/templates/partials/footer.html.twig: -------------------------------------------------------------------------------- 1 | 8 | -------------------------------------------------------------------------------- /lessons/05-Optimizing_Speed/05.2-Parallel_Tests/apps/mooc/backend/config/bundles.php: -------------------------------------------------------------------------------- 1 | ['all' => true], 5 | FriendsOfBehat\SymfonyExtension\Bundle\FriendsOfBehatSymfonyExtensionBundle::class => ['test' => true], 6 | // WouterJ\EloquentBundle\WouterJEloquentBundle::class => ['test' => true] 7 | ]; 8 | -------------------------------------------------------------------------------- /lessons/05-Optimizing_Speed/05.2-Parallel_Tests/apps/mooc/backend/config/routes/courses.yaml: -------------------------------------------------------------------------------- 1 | courses_put: 2 | path: /courses/{id} 3 | controller: CodelyTv\Apps\Mooc\Backend\Controller\Courses\CoursesPutController 4 | methods: [PUT] 5 | -------------------------------------------------------------------------------- /lessons/05-Optimizing_Speed/05.2-Parallel_Tests/apps/mooc/backend/config/routes/courses_counter.yaml: -------------------------------------------------------------------------------- 1 | courses_counter_get: 2 | path: /courses-counter 3 | controller: CodelyTv\Apps\Mooc\Backend\Controller\CoursesCounter\CoursesCounterGetController 4 | methods: [GET] 5 | -------------------------------------------------------------------------------- /lessons/05-Optimizing_Speed/05.2-Parallel_Tests/apps/mooc/backend/config/routes/health-check.yaml: -------------------------------------------------------------------------------- 1 | health-check_get: 2 | path: /health-check 3 | controller: CodelyTv\Apps\Mooc\Backend\Controller\HealthCheck\HealthCheckGetController 4 | methods: [GET] 5 | -------------------------------------------------------------------------------- /lessons/05-Optimizing_Speed/05.2-Parallel_Tests/apps/mooc/frontend/src/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/ci_with_github_actions-course/6fb82cb404b28c22ecaaf3eec7e3692c70d0de82/lessons/05-Optimizing_Speed/05.2-Parallel_Tests/apps/mooc/frontend/src/.gitkeep -------------------------------------------------------------------------------- /lessons/05-Optimizing_Speed/05.2-Parallel_Tests/behat.yml: -------------------------------------------------------------------------------- 1 | imports: 2 | - tests/apps/mooc/backend/mooc_backend.yml 3 | -------------------------------------------------------------------------------- /lessons/05-Optimizing_Speed/05.2-Parallel_Tests/doc/endpoints/backoffice_frontend.http: -------------------------------------------------------------------------------- 1 | # ELASTIC - Search 2 | POST localhost:9200/backoffice_courses/_search 3 | Content-Type: application/json 4 | 5 | { 6 | "query": { 7 | "term": { 8 | "name": "Pepe" 9 | } 10 | } 11 | } 12 | 13 | ### 14 | # ELASTIC - Search 15 | POST localhost:9200/backoffice_courses/_search 16 | Content-Type: application/json 17 | 18 | ### 19 | 20 | -------------------------------------------------------------------------------- /lessons/05-Optimizing_Speed/05.2-Parallel_Tests/etc/infrastructure/php/conf.d/apcu.ini: -------------------------------------------------------------------------------- 1 | apc.shm_segments=1 2 | apc.shm_size=256M 3 | apc.num_files_hint=7000 4 | apc.user_entries_hint=4096 5 | apc.ttl=7200 6 | apc.user_ttl=7200 7 | apc.gc_ttl=3600 8 | apc.max_file_size=1M 9 | apc.stat=1 10 | -------------------------------------------------------------------------------- /lessons/05-Optimizing_Speed/05.2-Parallel_Tests/etc/infrastructure/php/conf.d/opcache.ini: -------------------------------------------------------------------------------- 1 | opcache.memory_consumption=128 2 | opcache.interned_strings_buffer=8 3 | opcache.max_accelerated_files=4000 4 | opcache.revalidate_freq=60 5 | opcache.fast_shutdown=1 6 | opcache.enable_cli=1 7 | -------------------------------------------------------------------------------- /lessons/05-Optimizing_Speed/05.2-Parallel_Tests/etc/infrastructure/php/php.ini: -------------------------------------------------------------------------------- 1 | date.timezone = "UTC" 2 | html_errors = "On" 3 | display_errors = "On" 4 | error_reporting = E_ALL 5 | -------------------------------------------------------------------------------- /lessons/05-Optimizing_Speed/05.2-Parallel_Tests/src/Analytics/DomainEvents/Domain/AnalyticsDomainEventAggregateId.php: -------------------------------------------------------------------------------- 1 | value() === $other->value(); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /lessons/05-Optimizing_Speed/05.2-Parallel_Tests/src/Backoffice/Auth/Domain/AuthRepository.php: -------------------------------------------------------------------------------- 1 | are invalid', $username->value())); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /lessons/05-Optimizing_Speed/05.2-Parallel_Tests/src/Backoffice/Auth/Domain/InvalidAuthUsername.php: -------------------------------------------------------------------------------- 1 | does not exists', $username->value())); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /lessons/05-Optimizing_Speed/05.2-Parallel_Tests/src/Backoffice/Courses/Application/SearchAll/SearchAllBackofficeCoursesQuery.php: -------------------------------------------------------------------------------- 1 | toString(); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /lessons/05-Optimizing_Speed/05.2-Parallel_Tests/tests.parallel: -------------------------------------------------------------------------------- 1 | echo -e "\n\n\e[40;38;5;82mPHPUNIT\e[0m\n"; ./vendor/bin/phpunit --exclude-group='disabled' --log-junit build/test_results/phpunit/junit.xml tests 2 | echo -e "\n\n\e[40;38;5;82mBEHAT\e[0m\n"; ./vendor/bin/behat -p mooc_backend --format=progress -v 3 | -------------------------------------------------------------------------------- /lessons/05-Optimizing_Speed/05.2-Parallel_Tests/tests/apps/backoffice/backend/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/ci_with_github_actions-course/6fb82cb404b28c22ecaaf3eec7e3692c70d0de82/lessons/05-Optimizing_Speed/05.2-Parallel_Tests/tests/apps/backoffice/backend/.gitkeep -------------------------------------------------------------------------------- /lessons/05-Optimizing_Speed/05.2-Parallel_Tests/tests/apps/backoffice/frontend/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/ci_with_github_actions-course/6fb82cb404b28c22ecaaf3eec7e3692c70d0de82/lessons/05-Optimizing_Speed/05.2-Parallel_Tests/tests/apps/backoffice/frontend/.gitkeep -------------------------------------------------------------------------------- /lessons/05-Optimizing_Speed/05.2-Parallel_Tests/tests/apps/mooc/frontend/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/ci_with_github_actions-course/6fb82cb404b28c22ecaaf3eec7e3692c70d0de82/lessons/05-Optimizing_Speed/05.2-Parallel_Tests/tests/apps/mooc/frontend/.gitkeep -------------------------------------------------------------------------------- /lessons/05-Optimizing_Speed/05.2-Parallel_Tests/tests/src/Mooc/Shared/Domain/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/ci_with_github_actions-course/6fb82cb404b28c22ecaaf3eec7e3692c70d0de82/lessons/05-Optimizing_Speed/05.2-Parallel_Tests/tests/src/Mooc/Shared/Domain/.gitkeep -------------------------------------------------------------------------------- /lessons/05-Optimizing_Speed/05.2-Parallel_Tests/tests/src/Mooc/Videos/Application/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/ci_with_github_actions-course/6fb82cb404b28c22ecaaf3eec7e3692c70d0de82/lessons/05-Optimizing_Speed/05.2-Parallel_Tests/tests/src/Mooc/Videos/Application/.gitkeep -------------------------------------------------------------------------------- /lessons/05-Optimizing_Speed/05.2-Parallel_Tests/tests/src/Mooc/Videos/Domain/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/ci_with_github_actions-course/6fb82cb404b28c22ecaaf3eec7e3692c70d0de82/lessons/05-Optimizing_Speed/05.2-Parallel_Tests/tests/src/Mooc/Videos/Domain/.gitkeep -------------------------------------------------------------------------------- /lessons/05-Optimizing_Speed/05.2-Parallel_Tests/tests/src/Mooc/Videos/Infrastructure/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/ci_with_github_actions-course/6fb82cb404b28c22ecaaf3eec7e3692c70d0de82/lessons/05-Optimizing_Speed/05.2-Parallel_Tests/tests/src/Mooc/Videos/Infrastructure/.gitkeep -------------------------------------------------------------------------------- /lessons/05-Optimizing_Speed/05.2-Parallel_Tests/tests/src/Shared/Domain/MotherCreator.php: -------------------------------------------------------------------------------- 1 | randomElement($elements); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /lessons/05-Optimizing_Speed/05.2-Parallel_Tests/tests/src/Shared/Domain/UuidMother.php: -------------------------------------------------------------------------------- 1 | unique()->uuid; 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /lessons/05-Optimizing_Speed/05.2-Parallel_Tests/tests/src/Shared/Domain/WordMother.php: -------------------------------------------------------------------------------- 1 | word; 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /lessons/05-Optimizing_Speed/05.2-Parallel_Tests/tests/src/Shared/Infrastructure/Arranger/EnvironmentArranger.php: -------------------------------------------------------------------------------- 1 | ['all' => true], 5 | FriendsOfBehat\SymfonyExtension\Bundle\FriendsOfBehatSymfonyExtensionBundle::class => ['test' => true], 6 | // WouterJ\EloquentBundle\WouterJEloquentBundle::class => ['test' => true] 7 | ]; 8 | -------------------------------------------------------------------------------- /lessons/05-Optimizing_Speed/05.3-Parallel_Jobs/apps/backoffice/backend/config/routes/courses.yaml: -------------------------------------------------------------------------------- 1 | courses_get: 2 | path: /courses 3 | controller: CodelyTv\Apps\Backoffice\Backend\Controller\Courses\CoursesGetController 4 | defaults: { auth: true } 5 | methods: [GET] 6 | -------------------------------------------------------------------------------- /lessons/05-Optimizing_Speed/05.3-Parallel_Jobs/apps/backoffice/backend/config/routes/health-check.yaml: -------------------------------------------------------------------------------- 1 | health-check_get: 2 | path: /health-check 3 | controller: CodelyTv\Apps\Backoffice\Backend\Controller\HealthCheck\HealthCheckGetController 4 | methods: [GET] 5 | -------------------------------------------------------------------------------- /lessons/05-Optimizing_Speed/05.3-Parallel_Jobs/apps/backoffice/backend/config/services_test.yaml: -------------------------------------------------------------------------------- 1 | framework: 2 | test: true 3 | 4 | services: 5 | _defaults: 6 | autoconfigure: true 7 | autowire: true 8 | 9 | CodelyTv\Tests\: 10 | resource: '../../../../tests/src' 11 | 12 | # -- IMPLEMENTATIONS SELECTOR -- 13 | CodelyTv\Shared\Domain\Bus\Event\EventBus: '@CodelyTv\Shared\Infrastructure\Bus\Event\InMemory\InMemorySymfonyEventBus' 14 | -------------------------------------------------------------------------------- /lessons/05-Optimizing_Speed/05.3-Parallel_Jobs/apps/backoffice/frontend/config/routes/api_courses.yaml: -------------------------------------------------------------------------------- 1 | api_courses_get: 2 | path: /api/courses 3 | controller: CodelyTv\Apps\Backoffice\Frontend\Controller\Courses\ApiCoursesGetController 4 | methods: [GET] 5 | -------------------------------------------------------------------------------- /lessons/05-Optimizing_Speed/05.3-Parallel_Jobs/apps/backoffice/frontend/config/routes/courses.yaml: -------------------------------------------------------------------------------- 1 | courses_get: 2 | path: /courses 3 | controller: CodelyTv\Apps\Backoffice\Frontend\Controller\Courses\CoursesGetController 4 | methods: [GET] 5 | 6 | courses_post: 7 | path: /courses 8 | controller: CodelyTv\Apps\Backoffice\Frontend\Controller\Courses\CoursesPostController 9 | methods: [POST] 10 | -------------------------------------------------------------------------------- /lessons/05-Optimizing_Speed/05.3-Parallel_Jobs/apps/backoffice/frontend/config/routes/health-check.yaml: -------------------------------------------------------------------------------- 1 | health-check_get: 2 | path: /health-check 3 | controller: CodelyTv\Apps\Backoffice\Frontend\Controller\HealthCheck\HealthCheckGetController 4 | methods: [GET] 5 | -------------------------------------------------------------------------------- /lessons/05-Optimizing_Speed/05.3-Parallel_Jobs/apps/backoffice/frontend/config/routes/home.yaml: -------------------------------------------------------------------------------- 1 | home_get: 2 | path: / 3 | controller: CodelyTv\Apps\Backoffice\Frontend\Controller\Home\HomeGetController 4 | methods: [GET] 5 | -------------------------------------------------------------------------------- /lessons/05-Optimizing_Speed/05.3-Parallel_Jobs/apps/backoffice/frontend/config/services_test.yaml: -------------------------------------------------------------------------------- 1 | framework: 2 | test: true 3 | 4 | services: 5 | _defaults: 6 | autoconfigure: true 7 | autowire: true 8 | 9 | CodelyTv\Tests\: 10 | resource: '../../../../tests/src' 11 | 12 | # -- IMPLEMENTATIONS SELECTOR -- 13 | CodelyTv\Shared\Domain\Bus\Event\EventBus: '@CodelyTv\Shared\Infrastructure\Bus\Event\InMemory\InMemorySymfonyEventBus' 14 | -------------------------------------------------------------------------------- /lessons/05-Optimizing_Speed/05.3-Parallel_Jobs/apps/backoffice/frontend/public/images/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/ci_with_github_actions-course/6fb82cb404b28c22ecaaf3eec7e3692c70d0de82/lessons/05-Optimizing_Speed/05.3-Parallel_Jobs/apps/backoffice/frontend/public/images/logo.png -------------------------------------------------------------------------------- /lessons/05-Optimizing_Speed/05.3-Parallel_Jobs/apps/backoffice/frontend/templates/pages/home.html.twig: -------------------------------------------------------------------------------- 1 | {% extends 'master.html.twig' %} 2 | 3 | {% block page_title %}HOME{% endblock %} 4 | 5 | {% block main %} 6 | HOLIII HOME 7 | {% endblock %} 8 | -------------------------------------------------------------------------------- /lessons/05-Optimizing_Speed/05.3-Parallel_Jobs/apps/backoffice/frontend/templates/partials/footer.html.twig: -------------------------------------------------------------------------------- 1 | 8 | -------------------------------------------------------------------------------- /lessons/05-Optimizing_Speed/05.3-Parallel_Jobs/apps/mooc/backend/config/bundles.php: -------------------------------------------------------------------------------- 1 | ['all' => true], 5 | FriendsOfBehat\SymfonyExtension\Bundle\FriendsOfBehatSymfonyExtensionBundle::class => ['test' => true], 6 | // WouterJ\EloquentBundle\WouterJEloquentBundle::class => ['test' => true] 7 | ]; 8 | -------------------------------------------------------------------------------- /lessons/05-Optimizing_Speed/05.3-Parallel_Jobs/apps/mooc/backend/config/routes/courses.yaml: -------------------------------------------------------------------------------- 1 | courses_put: 2 | path: /courses/{id} 3 | controller: CodelyTv\Apps\Mooc\Backend\Controller\Courses\CoursesPutController 4 | methods: [PUT] 5 | -------------------------------------------------------------------------------- /lessons/05-Optimizing_Speed/05.3-Parallel_Jobs/apps/mooc/backend/config/routes/courses_counter.yaml: -------------------------------------------------------------------------------- 1 | courses_counter_get: 2 | path: /courses-counter 3 | controller: CodelyTv\Apps\Mooc\Backend\Controller\CoursesCounter\CoursesCounterGetController 4 | methods: [GET] 5 | -------------------------------------------------------------------------------- /lessons/05-Optimizing_Speed/05.3-Parallel_Jobs/apps/mooc/backend/config/routes/health-check.yaml: -------------------------------------------------------------------------------- 1 | health-check_get: 2 | path: /health-check 3 | controller: CodelyTv\Apps\Mooc\Backend\Controller\HealthCheck\HealthCheckGetController 4 | methods: [GET] 5 | -------------------------------------------------------------------------------- /lessons/05-Optimizing_Speed/05.3-Parallel_Jobs/apps/mooc/frontend/src/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/ci_with_github_actions-course/6fb82cb404b28c22ecaaf3eec7e3692c70d0de82/lessons/05-Optimizing_Speed/05.3-Parallel_Jobs/apps/mooc/frontend/src/.gitkeep -------------------------------------------------------------------------------- /lessons/05-Optimizing_Speed/05.3-Parallel_Jobs/behat.yml: -------------------------------------------------------------------------------- 1 | imports: 2 | - tests/apps/mooc/backend/mooc_backend.yml 3 | -------------------------------------------------------------------------------- /lessons/05-Optimizing_Speed/05.3-Parallel_Jobs/doc/endpoints/backoffice_frontend.http: -------------------------------------------------------------------------------- 1 | # ELASTIC - Search 2 | POST localhost:9200/backoffice_courses/_search 3 | Content-Type: application/json 4 | 5 | { 6 | "query": { 7 | "term": { 8 | "name": "Pepe" 9 | } 10 | } 11 | } 12 | 13 | ### 14 | # ELASTIC - Search 15 | POST localhost:9200/backoffice_courses/_search 16 | Content-Type: application/json 17 | 18 | ### 19 | 20 | -------------------------------------------------------------------------------- /lessons/05-Optimizing_Speed/05.3-Parallel_Jobs/etc/infrastructure/php/conf.d/apcu.ini: -------------------------------------------------------------------------------- 1 | apc.shm_segments=1 2 | apc.shm_size=256M 3 | apc.num_files_hint=7000 4 | apc.user_entries_hint=4096 5 | apc.ttl=7200 6 | apc.user_ttl=7200 7 | apc.gc_ttl=3600 8 | apc.max_file_size=1M 9 | apc.stat=1 10 | -------------------------------------------------------------------------------- /lessons/05-Optimizing_Speed/05.3-Parallel_Jobs/etc/infrastructure/php/conf.d/opcache.ini: -------------------------------------------------------------------------------- 1 | opcache.memory_consumption=128 2 | opcache.interned_strings_buffer=8 3 | opcache.max_accelerated_files=4000 4 | opcache.revalidate_freq=60 5 | opcache.fast_shutdown=1 6 | opcache.enable_cli=1 7 | -------------------------------------------------------------------------------- /lessons/05-Optimizing_Speed/05.3-Parallel_Jobs/etc/infrastructure/php/php.ini: -------------------------------------------------------------------------------- 1 | date.timezone = "UTC" 2 | html_errors = "On" 3 | display_errors = "On" 4 | error_reporting = E_ALL 5 | -------------------------------------------------------------------------------- /lessons/05-Optimizing_Speed/05.3-Parallel_Jobs/src/Analytics/DomainEvents/Domain/AnalyticsDomainEventAggregateId.php: -------------------------------------------------------------------------------- 1 | value() === $other->value(); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /lessons/05-Optimizing_Speed/05.3-Parallel_Jobs/src/Backoffice/Auth/Domain/AuthRepository.php: -------------------------------------------------------------------------------- 1 | are invalid', $username->value())); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /lessons/05-Optimizing_Speed/05.3-Parallel_Jobs/src/Backoffice/Auth/Domain/InvalidAuthUsername.php: -------------------------------------------------------------------------------- 1 | does not exists', $username->value())); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /lessons/05-Optimizing_Speed/05.3-Parallel_Jobs/src/Backoffice/Courses/Application/SearchAll/SearchAllBackofficeCoursesQuery.php: -------------------------------------------------------------------------------- 1 | toString(); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /lessons/05-Optimizing_Speed/05.3-Parallel_Jobs/tests/apps/backoffice/backend/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/ci_with_github_actions-course/6fb82cb404b28c22ecaaf3eec7e3692c70d0de82/lessons/05-Optimizing_Speed/05.3-Parallel_Jobs/tests/apps/backoffice/backend/.gitkeep -------------------------------------------------------------------------------- /lessons/05-Optimizing_Speed/05.3-Parallel_Jobs/tests/apps/backoffice/frontend/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/ci_with_github_actions-course/6fb82cb404b28c22ecaaf3eec7e3692c70d0de82/lessons/05-Optimizing_Speed/05.3-Parallel_Jobs/tests/apps/backoffice/frontend/.gitkeep -------------------------------------------------------------------------------- /lessons/05-Optimizing_Speed/05.3-Parallel_Jobs/tests/apps/mooc/frontend/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/ci_with_github_actions-course/6fb82cb404b28c22ecaaf3eec7e3692c70d0de82/lessons/05-Optimizing_Speed/05.3-Parallel_Jobs/tests/apps/mooc/frontend/.gitkeep -------------------------------------------------------------------------------- /lessons/05-Optimizing_Speed/05.3-Parallel_Jobs/tests/src/Mooc/Shared/Domain/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/ci_with_github_actions-course/6fb82cb404b28c22ecaaf3eec7e3692c70d0de82/lessons/05-Optimizing_Speed/05.3-Parallel_Jobs/tests/src/Mooc/Shared/Domain/.gitkeep -------------------------------------------------------------------------------- /lessons/05-Optimizing_Speed/05.3-Parallel_Jobs/tests/src/Mooc/Videos/Application/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/ci_with_github_actions-course/6fb82cb404b28c22ecaaf3eec7e3692c70d0de82/lessons/05-Optimizing_Speed/05.3-Parallel_Jobs/tests/src/Mooc/Videos/Application/.gitkeep -------------------------------------------------------------------------------- /lessons/05-Optimizing_Speed/05.3-Parallel_Jobs/tests/src/Mooc/Videos/Domain/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/ci_with_github_actions-course/6fb82cb404b28c22ecaaf3eec7e3692c70d0de82/lessons/05-Optimizing_Speed/05.3-Parallel_Jobs/tests/src/Mooc/Videos/Domain/.gitkeep -------------------------------------------------------------------------------- /lessons/05-Optimizing_Speed/05.3-Parallel_Jobs/tests/src/Mooc/Videos/Infrastructure/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/ci_with_github_actions-course/6fb82cb404b28c22ecaaf3eec7e3692c70d0de82/lessons/05-Optimizing_Speed/05.3-Parallel_Jobs/tests/src/Mooc/Videos/Infrastructure/.gitkeep -------------------------------------------------------------------------------- /lessons/05-Optimizing_Speed/05.3-Parallel_Jobs/tests/src/Shared/Domain/MotherCreator.php: -------------------------------------------------------------------------------- 1 | randomElement($elements); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /lessons/05-Optimizing_Speed/05.3-Parallel_Jobs/tests/src/Shared/Domain/UuidMother.php: -------------------------------------------------------------------------------- 1 | unique()->uuid; 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /lessons/05-Optimizing_Speed/05.3-Parallel_Jobs/tests/src/Shared/Domain/WordMother.php: -------------------------------------------------------------------------------- 1 | word; 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /lessons/05-Optimizing_Speed/05.3-Parallel_Jobs/tests/src/Shared/Infrastructure/Arranger/EnvironmentArranger.php: -------------------------------------------------------------------------------- 1 |