├── 02-from_where_publish_domain_events ├── 1-from_use_case │ ├── .editorconfig │ ├── .eslintrc.json │ ├── .gitignore │ ├── Makefile │ ├── README.md │ ├── databases │ │ └── ecommerce.sql │ ├── docker-compose.yml │ ├── etc │ │ └── http │ │ │ ├── seller_backoffice │ │ │ ├── product-GET.http │ │ │ ├── product-PUT.http │ │ │ └── products-GET.http │ │ │ └── shop │ │ │ ├── product-GET.http │ │ │ ├── product_review-PUT.http │ │ │ ├── product_reviews-GET.http │ │ │ ├── products-GET.http │ │ │ ├── user-GET.http │ │ │ └── user-PUT.http │ ├── jest.config.js │ ├── next.config.js │ ├── package-lock.json │ ├── package.json │ ├── postcss.config.js │ ├── public │ │ └── codely.svg │ ├── src │ │ ├── app │ │ │ └── api │ │ │ │ ├── seller_backoffice │ │ │ │ └── products │ │ │ │ │ ├── [id] │ │ │ │ │ └── route.ts │ │ │ │ │ └── route.ts │ │ │ │ └── shop │ │ │ │ ├── product_reviews │ │ │ │ ├── [id] │ │ │ │ │ └── route.ts │ │ │ │ └── route.ts │ │ │ │ ├── products │ │ │ │ ├── [id] │ │ │ │ │ └── route.ts │ │ │ │ └── route.ts │ │ │ │ └── users │ │ │ │ └── [id] │ │ │ │ └── route.ts │ │ └── contexts │ │ │ ├── seller_backoffice │ │ │ └── products │ │ │ │ ├── application │ │ │ │ ├── create │ │ │ │ │ └── ProductCreator.ts │ │ │ │ ├── search │ │ │ │ │ └── ProductSearcher.ts │ │ │ │ └── search_all │ │ │ │ │ └── AllProductsSearcher.ts │ │ │ │ ├── domain │ │ │ │ ├── Product.ts │ │ │ │ ├── ProductId.ts │ │ │ │ ├── ProductImageUrl.ts │ │ │ │ ├── ProductImageUrls.ts │ │ │ │ ├── ProductName.ts │ │ │ │ ├── ProductRepository.ts │ │ │ │ └── ProductViews.ts │ │ │ │ └── infrastructure │ │ │ │ └── MySqlProductRepository.ts │ │ │ ├── shared │ │ │ ├── domain │ │ │ │ ├── Collection.ts │ │ │ │ ├── DomainEvent.ts │ │ │ │ ├── EventBus.ts │ │ │ │ ├── Identifier.ts │ │ │ │ ├── Money.ts │ │ │ │ └── StringValueObject.ts │ │ │ └── infrastructure │ │ │ │ └── MariaDBConnection.ts │ │ │ └── shop │ │ │ ├── product_reviews │ │ │ ├── application │ │ │ │ ├── create │ │ │ │ │ └── ProductReviewCreator.ts │ │ │ │ └── search_by_product_id │ │ │ │ │ └── ProductReviewsByProductSearcher.ts │ │ │ ├── domain │ │ │ │ ├── ProductReview.ts │ │ │ │ ├── ProductReviewComment.ts │ │ │ │ ├── ProductReviewId.ts │ │ │ │ ├── ProductReviewRating.ts │ │ │ │ └── ProductReviewRepository.ts │ │ │ └── infrastructure │ │ │ │ └── MySqlProductReviewRepository.ts │ │ │ ├── products │ │ │ ├── application │ │ │ │ ├── search │ │ │ │ │ └── ProductSearcher.ts │ │ │ │ └── search_all │ │ │ │ │ └── AllProductsSearcher.ts │ │ │ ├── domain │ │ │ │ ├── Product.ts │ │ │ │ ├── ProductFeaturedReview.ts │ │ │ │ ├── ProductId.ts │ │ │ │ ├── ProductImageUrl.ts │ │ │ │ ├── ProductImageUrls.ts │ │ │ │ ├── ProductName.ts │ │ │ │ ├── ProductRating.ts │ │ │ │ └── ProductRepository.ts │ │ │ └── infrastructure │ │ │ │ └── MySqlProductRepository.ts │ │ │ └── users │ │ │ ├── application │ │ │ ├── find │ │ │ │ └── UserFinder.ts │ │ │ ├── registrar │ │ │ │ └── UserRegistrar.ts │ │ │ └── search │ │ │ │ └── UserSearcher.ts │ │ │ ├── domain │ │ │ ├── User.ts │ │ │ ├── UserEmail.ts │ │ │ ├── UserId.ts │ │ │ ├── UserName.ts │ │ │ ├── UserProfilePicture.ts │ │ │ ├── UserRegisteredDomainEvent.ts │ │ │ └── UserRepository.ts │ │ │ └── infrastructure │ │ │ └── MySqlUserRepository.ts │ ├── tailwind.config.ts │ ├── tests │ │ └── contexts │ │ │ ├── shared │ │ │ └── infrastructure │ │ │ │ └── MockEventBus.ts │ │ │ └── shop │ │ │ └── users │ │ │ ├── application │ │ │ └── registrar │ │ │ │ └── UserRegistrar.test.ts │ │ │ ├── domain │ │ │ ├── UserEmailMother.ts │ │ │ ├── UserIdMother.ts │ │ │ ├── UserMother.ts │ │ │ ├── UserNameMother.ts │ │ │ ├── UserProfilePictureMother.ts │ │ │ └── UserRegisteredDomainEventMother.ts │ │ │ └── infrastructure │ │ │ └── MockUserRepository.ts │ └── tsconfig.json ├── 2-from_constructor │ ├── .editorconfig │ ├── .eslintrc.json │ ├── .gitignore │ ├── Makefile │ ├── README.md │ ├── databases │ │ └── ecommerce.sql │ ├── docker-compose.yml │ ├── etc │ │ └── http │ │ │ ├── seller_backoffice │ │ │ ├── product-GET.http │ │ │ ├── product-PUT.http │ │ │ └── products-GET.http │ │ │ └── shop │ │ │ ├── product-GET.http │ │ │ ├── product_review-PUT.http │ │ │ ├── product_reviews-GET.http │ │ │ ├── products-GET.http │ │ │ ├── user-GET.http │ │ │ └── user-PUT.http │ ├── jest.config.js │ ├── next.config.js │ ├── package-lock.json │ ├── package.json │ ├── postcss.config.js │ ├── public │ │ └── codely.svg │ ├── src │ │ ├── app │ │ │ └── api │ │ │ │ ├── seller_backoffice │ │ │ │ └── products │ │ │ │ │ ├── [id] │ │ │ │ │ └── route.ts │ │ │ │ │ └── route.ts │ │ │ │ └── shop │ │ │ │ ├── product_reviews │ │ │ │ ├── [id] │ │ │ │ │ └── route.ts │ │ │ │ └── route.ts │ │ │ │ ├── products │ │ │ │ ├── [id] │ │ │ │ │ └── route.ts │ │ │ │ └── route.ts │ │ │ │ └── users │ │ │ │ └── [id] │ │ │ │ └── route.ts │ │ └── contexts │ │ │ ├── seller_backoffice │ │ │ └── products │ │ │ │ ├── application │ │ │ │ ├── create │ │ │ │ │ └── ProductCreator.ts │ │ │ │ ├── search │ │ │ │ │ └── ProductSearcher.ts │ │ │ │ └── search_all │ │ │ │ │ └── AllProductsSearcher.ts │ │ │ │ ├── domain │ │ │ │ ├── Product.ts │ │ │ │ ├── ProductId.ts │ │ │ │ ├── ProductImageUrl.ts │ │ │ │ ├── ProductImageUrls.ts │ │ │ │ ├── ProductName.ts │ │ │ │ ├── ProductRepository.ts │ │ │ │ └── ProductViews.ts │ │ │ │ └── infrastructure │ │ │ │ └── MySqlProductRepository.ts │ │ │ ├── shared │ │ │ ├── domain │ │ │ │ ├── Collection.ts │ │ │ │ ├── DomainEvent.ts │ │ │ │ ├── EventBus.ts │ │ │ │ ├── Identifier.ts │ │ │ │ ├── Money.ts │ │ │ │ └── StringValueObject.ts │ │ │ └── infrastructure │ │ │ │ └── MariaDBConnection.ts │ │ │ └── shop │ │ │ ├── product_reviews │ │ │ ├── application │ │ │ │ ├── create │ │ │ │ │ └── ProductReviewCreator.ts │ │ │ │ └── search_by_product_id │ │ │ │ │ └── ProductReviewsByProductSearcher.ts │ │ │ ├── domain │ │ │ │ ├── ProductReview.ts │ │ │ │ ├── ProductReviewComment.ts │ │ │ │ ├── ProductReviewId.ts │ │ │ │ ├── ProductReviewRating.ts │ │ │ │ └── ProductReviewRepository.ts │ │ │ └── infrastructure │ │ │ │ └── MySqlProductReviewRepository.ts │ │ │ ├── products │ │ │ ├── application │ │ │ │ ├── search │ │ │ │ │ └── ProductSearcher.ts │ │ │ │ └── search_all │ │ │ │ │ └── AllProductsSearcher.ts │ │ │ ├── domain │ │ │ │ ├── Product.ts │ │ │ │ ├── ProductFeaturedReview.ts │ │ │ │ ├── ProductId.ts │ │ │ │ ├── ProductImageUrl.ts │ │ │ │ ├── ProductImageUrls.ts │ │ │ │ ├── ProductName.ts │ │ │ │ ├── ProductRating.ts │ │ │ │ └── ProductRepository.ts │ │ │ └── infrastructure │ │ │ │ └── MySqlProductRepository.ts │ │ │ └── users │ │ │ ├── application │ │ │ ├── find │ │ │ │ └── UserFinder.ts │ │ │ ├── registrar │ │ │ │ └── UserRegistrar.ts │ │ │ └── search │ │ │ │ └── UserSearcher.ts │ │ │ ├── domain │ │ │ ├── User.ts │ │ │ ├── UserEmail.ts │ │ │ ├── UserId.ts │ │ │ ├── UserName.ts │ │ │ ├── UserProfilePicture.ts │ │ │ ├── UserRegisteredDomainEvent.ts │ │ │ └── UserRepository.ts │ │ │ └── infrastructure │ │ │ └── MySqlUserRepository.ts │ ├── tailwind.config.ts │ ├── tests │ │ └── contexts │ │ │ └── shop │ │ │ └── users │ │ │ ├── application │ │ │ └── registrar │ │ │ │ └── UserRegistrar.test.ts │ │ │ ├── domain │ │ │ ├── UserEmailMother.ts │ │ │ ├── UserIdMother.ts │ │ │ ├── UserMother.ts │ │ │ ├── UserNameMother.ts │ │ │ ├── UserProfilePictureMother.ts │ │ │ └── UserRegisteredDomainEventMother.ts │ │ │ └── infrastructure │ │ │ └── MockUserRepository.ts │ └── tsconfig.json ├── 3-registering_in_named_constructor │ ├── .editorconfig │ ├── .eslintrc.json │ ├── .gitignore │ ├── Makefile │ ├── README.md │ ├── databases │ │ └── ecommerce.sql │ ├── docker-compose.yml │ ├── etc │ │ └── http │ │ │ ├── seller_backoffice │ │ │ ├── product-GET.http │ │ │ ├── product-PUT.http │ │ │ └── products-GET.http │ │ │ └── shop │ │ │ ├── product-GET.http │ │ │ ├── product_review-PUT.http │ │ │ ├── product_reviews-GET.http │ │ │ ├── products-GET.http │ │ │ ├── user-GET.http │ │ │ └── user-PUT.http │ ├── jest.config.js │ ├── next.config.js │ ├── package-lock.json │ ├── package.json │ ├── postcss.config.js │ ├── public │ │ └── codely.svg │ ├── src │ │ ├── app │ │ │ └── api │ │ │ │ ├── seller_backoffice │ │ │ │ └── products │ │ │ │ │ ├── [id] │ │ │ │ │ └── route.ts │ │ │ │ │ └── route.ts │ │ │ │ └── shop │ │ │ │ ├── product_reviews │ │ │ │ ├── [id] │ │ │ │ │ └── route.ts │ │ │ │ └── route.ts │ │ │ │ ├── products │ │ │ │ ├── [id] │ │ │ │ │ └── route.ts │ │ │ │ └── route.ts │ │ │ │ └── users │ │ │ │ └── [id] │ │ │ │ └── route.ts │ │ └── contexts │ │ │ ├── seller_backoffice │ │ │ └── products │ │ │ │ ├── application │ │ │ │ ├── create │ │ │ │ │ └── ProductCreator.ts │ │ │ │ ├── search │ │ │ │ │ └── ProductSearcher.ts │ │ │ │ └── search_all │ │ │ │ │ └── AllProductsSearcher.ts │ │ │ │ ├── domain │ │ │ │ ├── Product.ts │ │ │ │ ├── ProductId.ts │ │ │ │ ├── ProductImageUrl.ts │ │ │ │ ├── ProductImageUrls.ts │ │ │ │ ├── ProductName.ts │ │ │ │ ├── ProductRepository.ts │ │ │ │ └── ProductViews.ts │ │ │ │ └── infrastructure │ │ │ │ └── MySqlProductRepository.ts │ │ │ ├── shared │ │ │ ├── domain │ │ │ │ ├── AggregateRoot.ts │ │ │ │ ├── Collection.ts │ │ │ │ ├── DomainEvent.ts │ │ │ │ ├── EventBus.ts │ │ │ │ ├── Identifier.ts │ │ │ │ ├── Money.ts │ │ │ │ └── StringValueObject.ts │ │ │ └── infrastructure │ │ │ │ └── MariaDBConnection.ts │ │ │ └── shop │ │ │ ├── product_reviews │ │ │ ├── application │ │ │ │ ├── create │ │ │ │ │ └── ProductReviewCreator.ts │ │ │ │ └── search_by_product_id │ │ │ │ │ └── ProductReviewsByProductSearcher.ts │ │ │ ├── domain │ │ │ │ ├── ProductReview.ts │ │ │ │ ├── ProductReviewComment.ts │ │ │ │ ├── ProductReviewId.ts │ │ │ │ ├── ProductReviewRating.ts │ │ │ │ └── ProductReviewRepository.ts │ │ │ └── infrastructure │ │ │ │ └── MySqlProductReviewRepository.ts │ │ │ ├── products │ │ │ ├── application │ │ │ │ ├── search │ │ │ │ │ └── ProductSearcher.ts │ │ │ │ └── search_all │ │ │ │ │ └── AllProductsSearcher.ts │ │ │ ├── domain │ │ │ │ ├── Product.ts │ │ │ │ ├── ProductFeaturedReview.ts │ │ │ │ ├── ProductId.ts │ │ │ │ ├── ProductImageUrl.ts │ │ │ │ ├── ProductImageUrls.ts │ │ │ │ ├── ProductName.ts │ │ │ │ ├── ProductRating.ts │ │ │ │ └── ProductRepository.ts │ │ │ └── infrastructure │ │ │ │ └── MySqlProductRepository.ts │ │ │ └── users │ │ │ ├── application │ │ │ ├── find │ │ │ │ └── UserFinder.ts │ │ │ ├── registrar │ │ │ │ └── UserRegistrar.ts │ │ │ └── search │ │ │ │ └── UserSearcher.ts │ │ │ ├── domain │ │ │ ├── User.ts │ │ │ ├── UserEmail.ts │ │ │ ├── UserId.ts │ │ │ ├── UserName.ts │ │ │ ├── UserProfilePicture.ts │ │ │ ├── UserRegisteredDomainEvent.ts │ │ │ └── UserRepository.ts │ │ │ └── infrastructure │ │ │ └── MySqlUserRepository.ts │ ├── tailwind.config.ts │ ├── tests │ │ └── contexts │ │ │ ├── shared │ │ │ └── infrastructure │ │ │ │ └── MockEventBus.ts │ │ │ └── shop │ │ │ └── users │ │ │ ├── application │ │ │ └── registrar │ │ │ │ └── UserRegistrar.test.ts │ │ │ ├── domain │ │ │ ├── UserEmailMother.ts │ │ │ ├── UserIdMother.ts │ │ │ ├── UserMother.ts │ │ │ ├── UserNameMother.ts │ │ │ ├── UserProfilePictureMother.ts │ │ │ └── UserRegisteredDomainEventMother.ts │ │ │ └── infrastructure │ │ │ └── MockUserRepository.ts │ └── tsconfig.json └── 4-event_bus_as_an_argument │ ├── .editorconfig │ ├── .eslintrc.json │ ├── .gitignore │ ├── Makefile │ ├── README.md │ ├── databases │ └── ecommerce.sql │ ├── docker-compose.yml │ ├── etc │ └── http │ │ ├── seller_backoffice │ │ ├── product-GET.http │ │ ├── product-PUT.http │ │ └── products-GET.http │ │ └── shop │ │ ├── product-GET.http │ │ ├── product_review-PUT.http │ │ ├── product_reviews-GET.http │ │ ├── products-GET.http │ │ ├── user-GET.http │ │ └── user-PUT.http │ ├── jest.config.js │ ├── next.config.js │ ├── package-lock.json │ ├── package.json │ ├── postcss.config.js │ ├── public │ └── codely.svg │ ├── src │ ├── app │ │ └── api │ │ │ ├── seller_backoffice │ │ │ └── products │ │ │ │ ├── [id] │ │ │ │ └── route.ts │ │ │ │ └── route.ts │ │ │ └── shop │ │ │ ├── product_reviews │ │ │ ├── [id] │ │ │ │ └── route.ts │ │ │ └── route.ts │ │ │ ├── products │ │ │ ├── [id] │ │ │ │ └── route.ts │ │ │ └── route.ts │ │ │ └── users │ │ │ └── [id] │ │ │ └── route.ts │ └── contexts │ │ ├── seller_backoffice │ │ └── products │ │ │ ├── application │ │ │ ├── create │ │ │ │ └── ProductCreator.ts │ │ │ ├── search │ │ │ │ └── ProductSearcher.ts │ │ │ └── search_all │ │ │ │ └── AllProductsSearcher.ts │ │ │ ├── domain │ │ │ ├── Product.ts │ │ │ ├── ProductId.ts │ │ │ ├── ProductImageUrl.ts │ │ │ ├── ProductImageUrls.ts │ │ │ ├── ProductName.ts │ │ │ ├── ProductRepository.ts │ │ │ └── ProductViews.ts │ │ │ └── infrastructure │ │ │ └── MySqlProductRepository.ts │ │ ├── shared │ │ ├── domain │ │ │ ├── AggregateRoot.ts │ │ │ ├── Collection.ts │ │ │ ├── DomainEvent.ts │ │ │ ├── EventBus.ts │ │ │ ├── Identifier.ts │ │ │ ├── Money.ts │ │ │ └── StringValueObject.ts │ │ └── infrastructure │ │ │ └── MariaDBConnection.ts │ │ └── shop │ │ ├── product_reviews │ │ ├── application │ │ │ ├── create │ │ │ │ └── ProductReviewCreator.ts │ │ │ └── search_by_product_id │ │ │ │ └── ProductReviewsByProductSearcher.ts │ │ ├── domain │ │ │ ├── ProductReview.ts │ │ │ ├── ProductReviewComment.ts │ │ │ ├── ProductReviewId.ts │ │ │ ├── ProductReviewRating.ts │ │ │ └── ProductReviewRepository.ts │ │ └── infrastructure │ │ │ └── MySqlProductReviewRepository.ts │ │ ├── products │ │ ├── application │ │ │ ├── search │ │ │ │ └── ProductSearcher.ts │ │ │ └── search_all │ │ │ │ └── AllProductsSearcher.ts │ │ ├── domain │ │ │ ├── Product.ts │ │ │ ├── ProductFeaturedReview.ts │ │ │ ├── ProductId.ts │ │ │ ├── ProductImageUrl.ts │ │ │ ├── ProductImageUrls.ts │ │ │ ├── ProductName.ts │ │ │ ├── ProductRating.ts │ │ │ └── ProductRepository.ts │ │ └── infrastructure │ │ │ └── MySqlProductRepository.ts │ │ └── users │ │ ├── application │ │ ├── find │ │ │ └── UserFinder.ts │ │ ├── registrar │ │ │ └── UserRegistrar.ts │ │ └── search │ │ │ └── UserSearcher.ts │ │ ├── domain │ │ ├── User.ts │ │ ├── UserEmail.ts │ │ ├── UserId.ts │ │ ├── UserName.ts │ │ ├── UserProfilePicture.ts │ │ ├── UserRegisteredDomainEvent.ts │ │ └── UserRepository.ts │ │ └── infrastructure │ │ └── MySqlUserRepository.ts │ ├── tailwind.config.ts │ ├── tests │ └── contexts │ │ ├── shared │ │ └── infrastructure │ │ │ └── MockEventBus.ts │ │ └── shop │ │ └── users │ │ ├── application │ │ └── registrar │ │ │ └── UserRegistrar.test.ts │ │ ├── domain │ │ ├── UserEmailMother.ts │ │ ├── UserIdMother.ts │ │ ├── UserMother.ts │ │ ├── UserNameMother.ts │ │ ├── UserProfilePictureMother.ts │ │ └── UserRegisteredDomainEventMother.ts │ │ └── infrastructure │ │ └── MockUserRepository.ts │ └── tsconfig.json ├── 03-domain_events_design ├── 1-granularity_in_domain_events │ ├── 1-user_updated_domain_event │ │ ├── .editorconfig │ │ ├── .eslintrc.json │ │ ├── .gitignore │ │ ├── Makefile │ │ ├── README.md │ │ ├── databases │ │ │ └── ecommerce.sql │ │ ├── docker-compose.yml │ │ ├── etc │ │ │ └── http │ │ │ │ ├── seller_backoffice │ │ │ │ ├── product-GET.http │ │ │ │ ├── product-PUT.http │ │ │ │ └── products-GET.http │ │ │ │ └── shop │ │ │ │ ├── product-GET.http │ │ │ │ ├── product_review-PUT.http │ │ │ │ ├── product_reviews-GET.http │ │ │ │ ├── products-GET.http │ │ │ │ ├── user-GET.http │ │ │ │ └── user-PUT.http │ │ ├── jest.config.js │ │ ├── next.config.js │ │ ├── package-lock.json │ │ ├── package.json │ │ ├── postcss.config.js │ │ ├── public │ │ │ └── codely.svg │ │ ├── src │ │ │ ├── app │ │ │ │ └── api │ │ │ │ │ ├── seller_backoffice │ │ │ │ │ └── products │ │ │ │ │ │ ├── [id] │ │ │ │ │ │ └── route.ts │ │ │ │ │ │ └── route.ts │ │ │ │ │ └── shop │ │ │ │ │ ├── product_reviews │ │ │ │ │ ├── [id] │ │ │ │ │ │ └── route.ts │ │ │ │ │ └── route.ts │ │ │ │ │ ├── products │ │ │ │ │ ├── [id] │ │ │ │ │ │ └── route.ts │ │ │ │ │ └── route.ts │ │ │ │ │ └── users │ │ │ │ │ └── [id] │ │ │ │ │ └── route.ts │ │ │ └── contexts │ │ │ │ ├── seller_backoffice │ │ │ │ └── products │ │ │ │ │ ├── application │ │ │ │ │ ├── create │ │ │ │ │ │ └── ProductCreator.ts │ │ │ │ │ ├── search │ │ │ │ │ │ └── ProductSearcher.ts │ │ │ │ │ └── search_all │ │ │ │ │ │ └── AllProductsSearcher.ts │ │ │ │ │ ├── domain │ │ │ │ │ ├── Product.ts │ │ │ │ │ ├── ProductId.ts │ │ │ │ │ ├── ProductImageUrl.ts │ │ │ │ │ ├── ProductImageUrls.ts │ │ │ │ │ ├── ProductName.ts │ │ │ │ │ ├── ProductRepository.ts │ │ │ │ │ └── ProductViews.ts │ │ │ │ │ └── infrastructure │ │ │ │ │ └── MySqlProductRepository.ts │ │ │ │ ├── shared │ │ │ │ ├── domain │ │ │ │ │ ├── AggregateRoot.ts │ │ │ │ │ ├── Collection.ts │ │ │ │ │ ├── DomainEvent.ts │ │ │ │ │ ├── EventBus.ts │ │ │ │ │ ├── Identifier.ts │ │ │ │ │ ├── Money.ts │ │ │ │ │ └── StringValueObject.ts │ │ │ │ └── infrastructure │ │ │ │ │ └── MariaDBConnection.ts │ │ │ │ └── shop │ │ │ │ ├── product_reviews │ │ │ │ ├── application │ │ │ │ │ ├── create │ │ │ │ │ │ └── ProductReviewCreator.ts │ │ │ │ │ └── search_by_product_id │ │ │ │ │ │ └── ProductReviewsByProductSearcher.ts │ │ │ │ ├── domain │ │ │ │ │ ├── ProductReview.ts │ │ │ │ │ ├── ProductReviewComment.ts │ │ │ │ │ ├── ProductReviewId.ts │ │ │ │ │ ├── ProductReviewRating.ts │ │ │ │ │ └── ProductReviewRepository.ts │ │ │ │ └── infrastructure │ │ │ │ │ └── MySqlProductReviewRepository.ts │ │ │ │ ├── products │ │ │ │ ├── application │ │ │ │ │ ├── search │ │ │ │ │ │ └── ProductSearcher.ts │ │ │ │ │ └── search_all │ │ │ │ │ │ └── AllProductsSearcher.ts │ │ │ │ ├── domain │ │ │ │ │ ├── Product.ts │ │ │ │ │ ├── ProductFeaturedReview.ts │ │ │ │ │ ├── ProductId.ts │ │ │ │ │ ├── ProductImageUrl.ts │ │ │ │ │ ├── ProductImageUrls.ts │ │ │ │ │ ├── ProductName.ts │ │ │ │ │ ├── ProductRating.ts │ │ │ │ │ └── ProductRepository.ts │ │ │ │ └── infrastructure │ │ │ │ │ └── MySqlProductRepository.ts │ │ │ │ └── users │ │ │ │ ├── application │ │ │ │ ├── find │ │ │ │ │ └── UserFinder.ts │ │ │ │ ├── registrar │ │ │ │ │ └── UserRegistrar.ts │ │ │ │ ├── search │ │ │ │ │ └── UserSearcher.ts │ │ │ │ └── update_email │ │ │ │ │ └── UserEmailUpdater.ts │ │ │ │ ├── domain │ │ │ │ ├── User.ts │ │ │ │ ├── UserDoesNotExist.ts │ │ │ │ ├── UserEmail.ts │ │ │ │ ├── UserId.ts │ │ │ │ ├── UserName.ts │ │ │ │ ├── UserProfilePicture.ts │ │ │ │ ├── UserRegisteredDomainEvent.ts │ │ │ │ ├── UserRepository.ts │ │ │ │ └── UserUpdatedDomainEvent.ts │ │ │ │ └── infrastructure │ │ │ │ └── MySqlUserRepository.ts │ │ ├── tailwind.config.ts │ │ ├── tests │ │ │ └── contexts │ │ │ │ ├── shared │ │ │ │ └── infrastructure │ │ │ │ │ └── MockEventBus.ts │ │ │ │ └── shop │ │ │ │ └── users │ │ │ │ ├── application │ │ │ │ ├── registrar │ │ │ │ │ └── UserRegistrar.test.ts │ │ │ │ └── update_email │ │ │ │ │ └── UserEmailUpdater.test.ts │ │ │ │ ├── domain │ │ │ │ ├── UserEmailMother.ts │ │ │ │ ├── UserIdMother.ts │ │ │ │ ├── UserMother.ts │ │ │ │ ├── UserNameMother.ts │ │ │ │ ├── UserProfilePictureMother.ts │ │ │ │ ├── UserRegisteredDomainEventMother.ts │ │ │ │ └── UserUpdatedDomainEventMother.ts │ │ │ │ └── infrastructure │ │ │ │ └── MockUserRepository.ts │ │ └── tsconfig.json │ └── 2-user_email_updated_domain_event │ │ ├── .editorconfig │ │ ├── .eslintrc.json │ │ ├── .gitignore │ │ ├── Makefile │ │ ├── README.md │ │ ├── databases │ │ └── ecommerce.sql │ │ ├── docker-compose.yml │ │ ├── etc │ │ └── http │ │ │ ├── seller_backoffice │ │ │ ├── product-GET.http │ │ │ ├── product-PUT.http │ │ │ └── products-GET.http │ │ │ └── shop │ │ │ ├── product-GET.http │ │ │ ├── product_review-PUT.http │ │ │ ├── product_reviews-GET.http │ │ │ ├── products-GET.http │ │ │ ├── user-GET.http │ │ │ └── user-PUT.http │ │ ├── jest.config.js │ │ ├── next.config.js │ │ ├── package-lock.json │ │ ├── package.json │ │ ├── postcss.config.js │ │ ├── public │ │ └── codely.svg │ │ ├── src │ │ ├── app │ │ │ └── api │ │ │ │ ├── seller_backoffice │ │ │ │ └── products │ │ │ │ │ ├── [id] │ │ │ │ │ └── route.ts │ │ │ │ │ └── route.ts │ │ │ │ └── shop │ │ │ │ ├── product_reviews │ │ │ │ ├── [id] │ │ │ │ │ └── route.ts │ │ │ │ └── route.ts │ │ │ │ ├── products │ │ │ │ ├── [id] │ │ │ │ │ └── route.ts │ │ │ │ └── route.ts │ │ │ │ └── users │ │ │ │ └── [id] │ │ │ │ └── route.ts │ │ └── contexts │ │ │ ├── seller_backoffice │ │ │ └── products │ │ │ │ ├── application │ │ │ │ ├── create │ │ │ │ │ └── ProductCreator.ts │ │ │ │ ├── search │ │ │ │ │ └── ProductSearcher.ts │ │ │ │ └── search_all │ │ │ │ │ └── AllProductsSearcher.ts │ │ │ │ ├── domain │ │ │ │ ├── Product.ts │ │ │ │ ├── ProductId.ts │ │ │ │ ├── ProductImageUrl.ts │ │ │ │ ├── ProductImageUrls.ts │ │ │ │ ├── ProductName.ts │ │ │ │ ├── ProductRepository.ts │ │ │ │ └── ProductViews.ts │ │ │ │ └── infrastructure │ │ │ │ └── MySqlProductRepository.ts │ │ │ ├── shared │ │ │ ├── domain │ │ │ │ ├── AggregateRoot.ts │ │ │ │ ├── Collection.ts │ │ │ │ ├── DomainEvent.ts │ │ │ │ ├── EventBus.ts │ │ │ │ ├── Identifier.ts │ │ │ │ ├── Money.ts │ │ │ │ └── StringValueObject.ts │ │ │ └── infrastructure │ │ │ │ └── MariaDBConnection.ts │ │ │ └── shop │ │ │ ├── product_reviews │ │ │ ├── application │ │ │ │ ├── create │ │ │ │ │ └── ProductReviewCreator.ts │ │ │ │ └── search_by_product_id │ │ │ │ │ └── ProductReviewsByProductSearcher.ts │ │ │ ├── domain │ │ │ │ ├── ProductReview.ts │ │ │ │ ├── ProductReviewComment.ts │ │ │ │ ├── ProductReviewId.ts │ │ │ │ ├── ProductReviewRating.ts │ │ │ │ └── ProductReviewRepository.ts │ │ │ └── infrastructure │ │ │ │ └── MySqlProductReviewRepository.ts │ │ │ ├── products │ │ │ ├── application │ │ │ │ ├── search │ │ │ │ │ └── ProductSearcher.ts │ │ │ │ └── search_all │ │ │ │ │ └── AllProductsSearcher.ts │ │ │ ├── domain │ │ │ │ ├── Product.ts │ │ │ │ ├── ProductFeaturedReview.ts │ │ │ │ ├── ProductId.ts │ │ │ │ ├── ProductImageUrl.ts │ │ │ │ ├── ProductImageUrls.ts │ │ │ │ ├── ProductName.ts │ │ │ │ ├── ProductRating.ts │ │ │ │ └── ProductRepository.ts │ │ │ └── infrastructure │ │ │ │ └── MySqlProductRepository.ts │ │ │ └── users │ │ │ ├── application │ │ │ ├── find │ │ │ │ └── UserFinder.ts │ │ │ ├── registrar │ │ │ │ └── UserRegistrar.ts │ │ │ ├── search │ │ │ │ └── UserSearcher.ts │ │ │ └── update_email │ │ │ │ └── UserEmailUpdater.ts │ │ │ ├── domain │ │ │ ├── User.ts │ │ │ ├── UserDoesNotExist.ts │ │ │ ├── UserEmail.ts │ │ │ ├── UserEmailUpdatedDomainEvent.ts │ │ │ ├── UserId.ts │ │ │ ├── UserName.ts │ │ │ ├── UserProfilePicture.ts │ │ │ ├── UserRegisteredDomainEvent.ts │ │ │ └── UserRepository.ts │ │ │ └── infrastructure │ │ │ └── MySqlUserRepository.ts │ │ ├── tailwind.config.ts │ │ ├── tests │ │ └── contexts │ │ │ ├── shared │ │ │ └── infrastructure │ │ │ │ └── MockEventBus.ts │ │ │ └── shop │ │ │ └── users │ │ │ ├── application │ │ │ ├── registrar │ │ │ │ └── UserRegistrar.test.ts │ │ │ └── update_email │ │ │ │ └── UserEmailUpdater.test.ts │ │ │ ├── domain │ │ │ ├── UserEmailMother.ts │ │ │ ├── UserEmailUpdatedDomainEventMother.ts │ │ │ ├── UserIdMother.ts │ │ │ ├── UserMother.ts │ │ │ ├── UserNameMother.ts │ │ │ ├── UserProfilePictureMother.ts │ │ │ └── UserRegisteredDomainEventMother.ts │ │ │ └── infrastructure │ │ │ └── MockUserRepository.ts │ │ └── tsconfig.json └── 2-semantics_in_domain_events │ ├── 1-user_status_updated_domain_event │ ├── .editorconfig │ ├── .eslintrc.json │ ├── .gitignore │ ├── Makefile │ ├── README.md │ ├── databases │ │ └── ecommerce.sql │ ├── docker-compose.yml │ ├── etc │ │ └── http │ │ │ ├── seller_backoffice │ │ │ ├── product-GET.http │ │ │ ├── product-PUT.http │ │ │ └── products-GET.http │ │ │ └── shop │ │ │ ├── product-GET.http │ │ │ ├── product_review-PUT.http │ │ │ ├── product_reviews-GET.http │ │ │ ├── products-GET.http │ │ │ ├── user-GET.http │ │ │ └── user-PUT.http │ ├── jest.config.js │ ├── next.config.js │ ├── package-lock.json │ ├── package.json │ ├── postcss.config.js │ ├── public │ │ └── codely.svg │ ├── src │ │ ├── app │ │ │ └── api │ │ │ │ ├── seller_backoffice │ │ │ │ └── products │ │ │ │ │ ├── [id] │ │ │ │ │ └── route.ts │ │ │ │ │ └── route.ts │ │ │ │ └── shop │ │ │ │ ├── product_reviews │ │ │ │ ├── [id] │ │ │ │ │ └── route.ts │ │ │ │ └── route.ts │ │ │ │ ├── products │ │ │ │ ├── [id] │ │ │ │ │ └── route.ts │ │ │ │ └── route.ts │ │ │ │ └── users │ │ │ │ └── [id] │ │ │ │ └── route.ts │ │ └── contexts │ │ │ ├── seller_backoffice │ │ │ └── products │ │ │ │ ├── application │ │ │ │ ├── create │ │ │ │ │ └── ProductCreator.ts │ │ │ │ ├── search │ │ │ │ │ └── ProductSearcher.ts │ │ │ │ └── search_all │ │ │ │ │ └── AllProductsSearcher.ts │ │ │ │ ├── domain │ │ │ │ ├── Product.ts │ │ │ │ ├── ProductId.ts │ │ │ │ ├── ProductImageUrl.ts │ │ │ │ ├── ProductImageUrls.ts │ │ │ │ ├── ProductName.ts │ │ │ │ ├── ProductRepository.ts │ │ │ │ └── ProductViews.ts │ │ │ │ └── infrastructure │ │ │ │ └── MySqlProductRepository.ts │ │ │ ├── shared │ │ │ ├── domain │ │ │ │ ├── AggregateRoot.ts │ │ │ │ ├── Collection.ts │ │ │ │ ├── DomainEvent.ts │ │ │ │ ├── EventBus.ts │ │ │ │ ├── Identifier.ts │ │ │ │ ├── Money.ts │ │ │ │ └── StringValueObject.ts │ │ │ └── infrastructure │ │ │ │ └── MariaDBConnection.ts │ │ │ └── shop │ │ │ ├── product_reviews │ │ │ ├── application │ │ │ │ ├── create │ │ │ │ │ └── ProductReviewCreator.ts │ │ │ │ └── search_by_product_id │ │ │ │ │ └── ProductReviewsByProductSearcher.ts │ │ │ ├── domain │ │ │ │ ├── ProductReview.ts │ │ │ │ ├── ProductReviewComment.ts │ │ │ │ ├── ProductReviewId.ts │ │ │ │ ├── ProductReviewRating.ts │ │ │ │ └── ProductReviewRepository.ts │ │ │ └── infrastructure │ │ │ │ └── MySqlProductReviewRepository.ts │ │ │ ├── products │ │ │ ├── application │ │ │ │ ├── search │ │ │ │ │ └── ProductSearcher.ts │ │ │ │ └── search_all │ │ │ │ │ └── AllProductsSearcher.ts │ │ │ ├── domain │ │ │ │ ├── Product.ts │ │ │ │ ├── ProductFeaturedReview.ts │ │ │ │ ├── ProductId.ts │ │ │ │ ├── ProductImageUrl.ts │ │ │ │ ├── ProductImageUrls.ts │ │ │ │ ├── ProductName.ts │ │ │ │ ├── ProductRating.ts │ │ │ │ └── ProductRepository.ts │ │ │ └── infrastructure │ │ │ │ └── MySqlProductRepository.ts │ │ │ └── users │ │ │ ├── application │ │ │ ├── archive │ │ │ │ └── UserArchiver.ts │ │ │ ├── find │ │ │ │ └── UserFinder.ts │ │ │ ├── registrar │ │ │ │ └── UserRegistrar.ts │ │ │ ├── search │ │ │ │ └── UserSearcher.ts │ │ │ └── update_email │ │ │ │ └── UserEmailUpdater.ts │ │ │ ├── domain │ │ │ ├── User.ts │ │ │ ├── UserDoesNotExist.ts │ │ │ ├── UserEmail.ts │ │ │ ├── UserEmailUpdatedDomainEvent.ts │ │ │ ├── UserFinder.ts │ │ │ ├── UserId.ts │ │ │ ├── UserName.ts │ │ │ ├── UserProfilePicture.ts │ │ │ ├── UserRegisteredDomainEvent.ts │ │ │ ├── UserRepository.ts │ │ │ ├── UserStatus.ts │ │ │ └── UserStatusUpdatedDomainEvent.ts │ │ │ └── infrastructure │ │ │ └── MySqlUserRepository.ts │ ├── tailwind.config.ts │ ├── tests │ │ └── contexts │ │ │ ├── shared │ │ │ ├── domain │ │ │ │ └── EnumMother.ts │ │ │ └── infrastructure │ │ │ │ └── MockEventBus.ts │ │ │ └── shop │ │ │ └── users │ │ │ ├── application │ │ │ ├── archive │ │ │ │ └── UserArchiver.test.ts │ │ │ ├── registrar │ │ │ │ └── UserRegistrar.test.ts │ │ │ └── update_email │ │ │ │ └── UserEmailUpdater.test.ts │ │ │ ├── domain │ │ │ ├── UserEmailMother.ts │ │ │ ├── UserEmailUpdatedDomainEventMother.ts │ │ │ ├── UserIdMother.ts │ │ │ ├── UserMother.ts │ │ │ ├── UserNameMother.ts │ │ │ ├── UserProfilePictureMother.ts │ │ │ ├── UserRegisteredDomainEventMother.ts │ │ │ └── UserStatusUpdatedDomainEventMother.ts │ │ │ └── infrastructure │ │ │ └── MockUserRepository.ts │ └── tsconfig.json │ └── 2-user_archived_domain_event │ ├── .editorconfig │ ├── .eslintrc.json │ ├── .gitignore │ ├── Makefile │ ├── README.md │ ├── databases │ └── ecommerce.sql │ ├── docker-compose.yml │ ├── etc │ └── http │ │ ├── seller_backoffice │ │ ├── product-GET.http │ │ ├── product-PUT.http │ │ └── products-GET.http │ │ └── shop │ │ ├── product-GET.http │ │ ├── product_review-PUT.http │ │ ├── product_reviews-GET.http │ │ ├── products-GET.http │ │ ├── user-GET.http │ │ └── user-PUT.http │ ├── jest.config.js │ ├── next.config.js │ ├── package-lock.json │ ├── package.json │ ├── postcss.config.js │ ├── public │ └── codely.svg │ ├── src │ ├── app │ │ └── api │ │ │ ├── seller_backoffice │ │ │ └── products │ │ │ │ ├── [id] │ │ │ │ └── route.ts │ │ │ │ └── route.ts │ │ │ └── shop │ │ │ ├── product_reviews │ │ │ ├── [id] │ │ │ │ └── route.ts │ │ │ └── route.ts │ │ │ ├── products │ │ │ ├── [id] │ │ │ │ └── route.ts │ │ │ └── route.ts │ │ │ └── users │ │ │ └── [id] │ │ │ └── route.ts │ └── contexts │ │ ├── seller_backoffice │ │ └── products │ │ │ ├── application │ │ │ ├── create │ │ │ │ └── ProductCreator.ts │ │ │ ├── search │ │ │ │ └── ProductSearcher.ts │ │ │ └── search_all │ │ │ │ └── AllProductsSearcher.ts │ │ │ ├── domain │ │ │ ├── Product.ts │ │ │ ├── ProductId.ts │ │ │ ├── ProductImageUrl.ts │ │ │ ├── ProductImageUrls.ts │ │ │ ├── ProductName.ts │ │ │ ├── ProductRepository.ts │ │ │ └── ProductViews.ts │ │ │ └── infrastructure │ │ │ └── MySqlProductRepository.ts │ │ ├── shared │ │ ├── domain │ │ │ ├── AggregateRoot.ts │ │ │ ├── Collection.ts │ │ │ ├── DomainEvent.ts │ │ │ ├── EventBus.ts │ │ │ ├── Identifier.ts │ │ │ ├── Money.ts │ │ │ └── StringValueObject.ts │ │ └── infrastructure │ │ │ └── MariaDBConnection.ts │ │ └── shop │ │ ├── product_reviews │ │ ├── application │ │ │ ├── create │ │ │ │ └── ProductReviewCreator.ts │ │ │ └── search_by_product_id │ │ │ │ └── ProductReviewsByProductSearcher.ts │ │ ├── domain │ │ │ ├── ProductReview.ts │ │ │ ├── ProductReviewComment.ts │ │ │ ├── ProductReviewId.ts │ │ │ ├── ProductReviewRating.ts │ │ │ └── ProductReviewRepository.ts │ │ └── infrastructure │ │ │ └── MySqlProductReviewRepository.ts │ │ ├── products │ │ ├── application │ │ │ ├── search │ │ │ │ └── ProductSearcher.ts │ │ │ └── search_all │ │ │ │ └── AllProductsSearcher.ts │ │ ├── domain │ │ │ ├── Product.ts │ │ │ ├── ProductFeaturedReview.ts │ │ │ ├── ProductId.ts │ │ │ ├── ProductImageUrl.ts │ │ │ ├── ProductImageUrls.ts │ │ │ ├── ProductName.ts │ │ │ ├── ProductRating.ts │ │ │ └── ProductRepository.ts │ │ └── infrastructure │ │ │ └── MySqlProductRepository.ts │ │ └── users │ │ ├── application │ │ ├── archive │ │ │ └── UserArchiver.ts │ │ ├── find │ │ │ └── UserFinder.ts │ │ ├── registrar │ │ │ └── UserRegistrar.ts │ │ ├── search │ │ │ └── UserSearcher.ts │ │ └── update_email │ │ │ └── UserEmailUpdater.ts │ │ ├── domain │ │ ├── User.ts │ │ ├── UserArchivedDomainEvent.ts │ │ ├── UserDoesNotExist.ts │ │ ├── UserEmail.ts │ │ ├── UserEmailUpdatedDomainEvent.ts │ │ ├── UserFinder.ts │ │ ├── UserId.ts │ │ ├── UserName.ts │ │ ├── UserProfilePicture.ts │ │ ├── UserRegisteredDomainEvent.ts │ │ ├── UserRepository.ts │ │ └── UserStatus.ts │ │ └── infrastructure │ │ └── MySqlUserRepository.ts │ ├── tailwind.config.ts │ ├── tests │ └── contexts │ │ ├── shared │ │ ├── domain │ │ │ └── EnumMother.ts │ │ └── infrastructure │ │ │ └── MockEventBus.ts │ │ └── shop │ │ └── users │ │ ├── application │ │ ├── archive │ │ │ └── UserArchiver.test.ts │ │ ├── registrar │ │ │ └── UserRegistrar.test.ts │ │ └── update_email │ │ │ └── UserEmailUpdater.test.ts │ │ ├── domain │ │ ├── UserArchivedDomainEventMother.ts │ │ ├── UserEmailMother.ts │ │ ├── UserEmailUpdatedDomainEventMother.ts │ │ ├── UserIdMother.ts │ │ ├── UserMother.ts │ │ ├── UserNameMother.ts │ │ ├── UserProfilePictureMother.ts │ │ └── UserRegisteredDomainEventMother.ts │ │ └── infrastructure │ │ └── MockUserRepository.ts │ └── tsconfig.json ├── 04-react_to_domain_events ├── 1-subscriber_listen_one_event │ ├── .editorconfig │ ├── .eslintrc.json │ ├── .gitignore │ ├── Makefile │ ├── README.md │ ├── databases │ │ └── ecommerce.sql │ ├── docker-compose.yml │ ├── etc │ │ └── http │ │ │ ├── seller_backoffice │ │ │ ├── product-GET.http │ │ │ ├── product-PUT.http │ │ │ └── products-GET.http │ │ │ └── shop │ │ │ ├── product-GET.http │ │ │ ├── product_review-PUT.http │ │ │ ├── product_reviews-GET.http │ │ │ ├── products-GET.http │ │ │ ├── user-GET.http │ │ │ └── user-PUT.http │ ├── jest.config.js │ ├── next.config.js │ ├── package-lock.json │ ├── package.json │ ├── postcss.config.js │ ├── public │ │ └── codely.svg │ ├── src │ │ ├── app │ │ │ └── api │ │ │ │ ├── seller_backoffice │ │ │ │ └── products │ │ │ │ │ ├── [id] │ │ │ │ │ └── route.ts │ │ │ │ │ └── route.ts │ │ │ │ └── shop │ │ │ │ ├── product_reviews │ │ │ │ ├── [id] │ │ │ │ │ └── route.ts │ │ │ │ └── route.ts │ │ │ │ ├── products │ │ │ │ ├── [id] │ │ │ │ │ └── route.ts │ │ │ │ └── route.ts │ │ │ │ └── users │ │ │ │ └── [id] │ │ │ │ └── route.ts │ │ └── contexts │ │ │ ├── retention │ │ │ └── email │ │ │ │ ├── application │ │ │ │ └── send_welcome_email │ │ │ │ │ ├── SendWelcomeEmailOnUserRegistered.ts │ │ │ │ │ └── WelcomeEmailSender.ts │ │ │ │ └── domain │ │ │ │ ├── Email.ts │ │ │ │ ├── EmailBody.ts │ │ │ │ ├── EmailId.ts │ │ │ │ ├── EmailSender.ts │ │ │ │ ├── WelcomeEmail.ts │ │ │ │ └── WelcomeEmailSentDomainEvent.ts │ │ │ ├── seller_backoffice │ │ │ └── products │ │ │ │ ├── application │ │ │ │ ├── create │ │ │ │ │ └── ProductCreator.ts │ │ │ │ ├── search │ │ │ │ │ └── ProductSearcher.ts │ │ │ │ └── search_all │ │ │ │ │ └── AllProductsSearcher.ts │ │ │ │ ├── domain │ │ │ │ ├── Product.ts │ │ │ │ ├── ProductId.ts │ │ │ │ ├── ProductImageUrl.ts │ │ │ │ ├── ProductImageUrls.ts │ │ │ │ ├── ProductName.ts │ │ │ │ ├── ProductRepository.ts │ │ │ │ └── ProductViews.ts │ │ │ │ └── infrastructure │ │ │ │ └── MySqlProductRepository.ts │ │ │ ├── shared │ │ │ ├── domain │ │ │ │ ├── AggregateRoot.ts │ │ │ │ ├── Collection.ts │ │ │ │ ├── DomainEvent.ts │ │ │ │ ├── DomainEventName.ts │ │ │ │ ├── DomainEventSubscriber.ts │ │ │ │ ├── EmailAddress.ts │ │ │ │ ├── EventBus.ts │ │ │ │ ├── Identifier.ts │ │ │ │ ├── Money.ts │ │ │ │ ├── StringValueObject.ts │ │ │ │ └── UuidGenerator.ts │ │ │ └── infrastructure │ │ │ │ └── MariaDBConnection.ts │ │ │ └── shop │ │ │ ├── product_reviews │ │ │ ├── application │ │ │ │ ├── create │ │ │ │ │ └── ProductReviewCreator.ts │ │ │ │ └── search_by_product_id │ │ │ │ │ └── ProductReviewsByProductSearcher.ts │ │ │ ├── domain │ │ │ │ ├── ProductReview.ts │ │ │ │ ├── ProductReviewComment.ts │ │ │ │ ├── ProductReviewId.ts │ │ │ │ ├── ProductReviewRating.ts │ │ │ │ └── ProductReviewRepository.ts │ │ │ └── infrastructure │ │ │ │ └── MySqlProductReviewRepository.ts │ │ │ ├── products │ │ │ ├── application │ │ │ │ ├── search │ │ │ │ │ └── ProductSearcher.ts │ │ │ │ └── search_all │ │ │ │ │ └── AllProductsSearcher.ts │ │ │ ├── domain │ │ │ │ ├── Product.ts │ │ │ │ ├── ProductFeaturedReview.ts │ │ │ │ ├── ProductId.ts │ │ │ │ ├── ProductImageUrl.ts │ │ │ │ ├── ProductImageUrls.ts │ │ │ │ ├── ProductName.ts │ │ │ │ ├── ProductRating.ts │ │ │ │ └── ProductRepository.ts │ │ │ └── infrastructure │ │ │ │ └── MySqlProductRepository.ts │ │ │ └── users │ │ │ ├── application │ │ │ ├── archive │ │ │ │ └── UserArchiver.ts │ │ │ ├── find │ │ │ │ └── UserFinder.ts │ │ │ ├── registrar │ │ │ │ └── UserRegistrar.ts │ │ │ ├── search │ │ │ │ └── UserSearcher.ts │ │ │ └── update_email │ │ │ │ └── UserEmailUpdater.ts │ │ │ ├── domain │ │ │ ├── User.ts │ │ │ ├── UserArchivedDomainEvent.ts │ │ │ ├── UserDoesNotExist.ts │ │ │ ├── UserEmail.ts │ │ │ ├── UserEmailUpdatedDomainEvent.ts │ │ │ ├── UserFinder.ts │ │ │ ├── UserId.ts │ │ │ ├── UserName.ts │ │ │ ├── UserProfilePicture.ts │ │ │ ├── UserRegisteredDomainEvent.ts │ │ │ ├── UserRepository.ts │ │ │ └── UserStatus.ts │ │ │ └── infrastructure │ │ │ └── MySqlUserRepository.ts │ ├── tailwind.config.ts │ ├── tests │ │ └── contexts │ │ │ ├── retention │ │ │ └── email │ │ │ │ ├── application │ │ │ │ └── SendWelcomeEmailOnUserRegistered.test.ts │ │ │ │ ├── domain │ │ │ │ ├── EmailBodyMother.ts │ │ │ │ ├── EmailIdMother.ts │ │ │ │ ├── WelcomeEmailMother.ts │ │ │ │ └── WelcomeEmailSentDomainEventMother.ts │ │ │ │ └── infrastructure │ │ │ │ └── MockEmailSender.ts │ │ │ ├── shared │ │ │ ├── domain │ │ │ │ ├── EmailAddressMother.ts │ │ │ │ └── EnumMother.ts │ │ │ └── infrastructure │ │ │ │ ├── MockEventBus.ts │ │ │ │ └── MockUuidGenerator.ts │ │ │ └── shop │ │ │ └── users │ │ │ ├── application │ │ │ ├── archive │ │ │ │ └── UserArchiver.test.ts │ │ │ ├── registrar │ │ │ │ └── UserRegistrar.test.ts │ │ │ └── update_email │ │ │ │ └── UserEmailUpdater.test.ts │ │ │ ├── domain │ │ │ ├── UserArchivedDomainEventMother.ts │ │ │ ├── UserEmailMother.ts │ │ │ ├── UserEmailUpdatedDomainEventMother.ts │ │ │ ├── UserIdMother.ts │ │ │ ├── UserMother.ts │ │ │ ├── UserNameMother.ts │ │ │ ├── UserProfilePictureMother.ts │ │ │ └── UserRegisteredDomainEventMother.ts │ │ │ └── infrastructure │ │ │ └── MockUserRepository.ts │ └── tsconfig.json ├── 2-test_subscriber │ ├── .editorconfig │ ├── .eslintrc.json │ ├── .gitignore │ ├── Makefile │ ├── README.md │ ├── databases │ │ └── ecommerce.sql │ ├── docker-compose.yml │ ├── etc │ │ └── http │ │ │ ├── seller_backoffice │ │ │ ├── product-GET.http │ │ │ ├── product-PUT.http │ │ │ └── products-GET.http │ │ │ └── shop │ │ │ ├── product-GET.http │ │ │ ├── product_review-PUT.http │ │ │ ├── product_reviews-GET.http │ │ │ ├── products-GET.http │ │ │ ├── user-GET.http │ │ │ └── user-PUT.http │ ├── jest.config.js │ ├── next.config.js │ ├── package-lock.json │ ├── package.json │ ├── postcss.config.js │ ├── public │ │ └── codely.svg │ ├── src │ │ ├── app │ │ │ └── api │ │ │ │ ├── seller_backoffice │ │ │ │ └── products │ │ │ │ │ ├── [id] │ │ │ │ │ └── route.ts │ │ │ │ │ └── route.ts │ │ │ │ └── shop │ │ │ │ ├── product_reviews │ │ │ │ ├── [id] │ │ │ │ │ └── route.ts │ │ │ │ └── route.ts │ │ │ │ ├── products │ │ │ │ ├── [id] │ │ │ │ │ └── route.ts │ │ │ │ └── route.ts │ │ │ │ └── users │ │ │ │ └── [id] │ │ │ │ └── route.ts │ │ └── contexts │ │ │ ├── retention │ │ │ └── email │ │ │ │ ├── application │ │ │ │ └── send_welcome_email │ │ │ │ │ ├── SendWelcomeEmailOnUserRegistered.ts │ │ │ │ │ └── WelcomeEmailSender.ts │ │ │ │ └── domain │ │ │ │ ├── Email.ts │ │ │ │ ├── EmailBody.ts │ │ │ │ ├── EmailId.ts │ │ │ │ ├── EmailSender.ts │ │ │ │ ├── WelcomeEmail.ts │ │ │ │ └── WelcomeEmailSentDomainEvent.ts │ │ │ ├── seller_backoffice │ │ │ └── products │ │ │ │ ├── application │ │ │ │ ├── create │ │ │ │ │ └── ProductCreator.ts │ │ │ │ ├── search │ │ │ │ │ └── ProductSearcher.ts │ │ │ │ └── search_all │ │ │ │ │ └── AllProductsSearcher.ts │ │ │ │ ├── domain │ │ │ │ ├── Product.ts │ │ │ │ ├── ProductId.ts │ │ │ │ ├── ProductImageUrl.ts │ │ │ │ ├── ProductImageUrls.ts │ │ │ │ ├── ProductName.ts │ │ │ │ ├── ProductRepository.ts │ │ │ │ └── ProductViews.ts │ │ │ │ └── infrastructure │ │ │ │ └── MySqlProductRepository.ts │ │ │ ├── shared │ │ │ ├── domain │ │ │ │ ├── AggregateRoot.ts │ │ │ │ ├── Collection.ts │ │ │ │ ├── DomainEvent.ts │ │ │ │ ├── DomainEventName.ts │ │ │ │ ├── DomainEventSubscriber.ts │ │ │ │ ├── EmailAddress.ts │ │ │ │ ├── EventBus.ts │ │ │ │ ├── Identifier.ts │ │ │ │ ├── Money.ts │ │ │ │ ├── StringValueObject.ts │ │ │ │ └── UuidGenerator.ts │ │ │ └── infrastructure │ │ │ │ └── MariaDBConnection.ts │ │ │ └── shop │ │ │ ├── product_reviews │ │ │ ├── application │ │ │ │ ├── create │ │ │ │ │ └── ProductReviewCreator.ts │ │ │ │ └── search_by_product_id │ │ │ │ │ └── ProductReviewsByProductSearcher.ts │ │ │ ├── domain │ │ │ │ ├── ProductReview.ts │ │ │ │ ├── ProductReviewComment.ts │ │ │ │ ├── ProductReviewId.ts │ │ │ │ ├── ProductReviewRating.ts │ │ │ │ └── ProductReviewRepository.ts │ │ │ └── infrastructure │ │ │ │ └── MySqlProductReviewRepository.ts │ │ │ ├── products │ │ │ ├── application │ │ │ │ ├── search │ │ │ │ │ └── ProductSearcher.ts │ │ │ │ └── search_all │ │ │ │ │ └── AllProductsSearcher.ts │ │ │ ├── domain │ │ │ │ ├── Product.ts │ │ │ │ ├── ProductFeaturedReview.ts │ │ │ │ ├── ProductId.ts │ │ │ │ ├── ProductImageUrl.ts │ │ │ │ ├── ProductImageUrls.ts │ │ │ │ ├── ProductName.ts │ │ │ │ ├── ProductRating.ts │ │ │ │ └── ProductRepository.ts │ │ │ └── infrastructure │ │ │ │ └── MySqlProductRepository.ts │ │ │ └── users │ │ │ ├── application │ │ │ ├── archive │ │ │ │ └── UserArchiver.ts │ │ │ ├── find │ │ │ │ └── UserFinder.ts │ │ │ ├── registrar │ │ │ │ └── UserRegistrar.ts │ │ │ ├── search │ │ │ │ └── UserSearcher.ts │ │ │ └── update_email │ │ │ │ └── UserEmailUpdater.ts │ │ │ ├── domain │ │ │ ├── User.ts │ │ │ ├── UserArchivedDomainEvent.ts │ │ │ ├── UserDoesNotExist.ts │ │ │ ├── UserEmail.ts │ │ │ ├── UserEmailUpdatedDomainEvent.ts │ │ │ ├── UserFinder.ts │ │ │ ├── UserId.ts │ │ │ ├── UserName.ts │ │ │ ├── UserProfilePicture.ts │ │ │ ├── UserRegisteredDomainEvent.ts │ │ │ ├── UserRepository.ts │ │ │ └── UserStatus.ts │ │ │ └── infrastructure │ │ │ └── MySqlUserRepository.ts │ ├── tailwind.config.ts │ ├── tests │ │ └── contexts │ │ │ ├── retention │ │ │ └── email │ │ │ │ ├── application │ │ │ │ └── SendWelcomeEmailOnUserRegistered.test.ts │ │ │ │ ├── domain │ │ │ │ ├── EmailBodyMother.ts │ │ │ │ ├── EmailIdMother.ts │ │ │ │ ├── WelcomeEmailMother.ts │ │ │ │ └── WelcomeEmailSentDomainEventMother.ts │ │ │ │ └── infrastructure │ │ │ │ └── MockEmailSender.ts │ │ │ ├── shared │ │ │ ├── domain │ │ │ │ ├── EmailAddressMother.ts │ │ │ │ └── EnumMother.ts │ │ │ └── infrastructure │ │ │ │ ├── MockEventBus.ts │ │ │ │ └── MockUuidGenerator.ts │ │ │ └── shop │ │ │ └── users │ │ │ ├── application │ │ │ ├── archive │ │ │ │ └── UserArchiver.test.ts │ │ │ ├── registrar │ │ │ │ └── UserRegistrar.test.ts │ │ │ └── update_email │ │ │ │ └── UserEmailUpdater.test.ts │ │ │ ├── domain │ │ │ ├── UserArchivedDomainEventMother.ts │ │ │ ├── UserEmailMother.ts │ │ │ ├── UserEmailUpdatedDomainEventMother.ts │ │ │ ├── UserIdMother.ts │ │ │ ├── UserMother.ts │ │ │ ├── UserNameMother.ts │ │ │ ├── UserProfilePictureMother.ts │ │ │ └── UserRegisteredDomainEventMother.ts │ │ │ └── infrastructure │ │ │ └── MockUserRepository.ts │ └── tsconfig.json ├── 3-subscriber_listen_multiple_events │ ├── .editorconfig │ ├── .eslintrc.json │ ├── .gitignore │ ├── Makefile │ ├── README.md │ ├── databases │ │ └── ecommerce.sql │ ├── docker-compose.yml │ ├── etc │ │ └── http │ │ │ ├── seller_backoffice │ │ │ ├── product-GET.http │ │ │ ├── product-PUT.http │ │ │ └── products-GET.http │ │ │ └── shop │ │ │ ├── product-GET.http │ │ │ ├── product_review-PUT.http │ │ │ ├── product_reviews-GET.http │ │ │ ├── products-GET.http │ │ │ ├── user-GET.http │ │ │ └── user-PUT.http │ ├── jest.config.js │ ├── next.config.js │ ├── package-lock.json │ ├── package.json │ ├── postcss.config.js │ ├── public │ │ └── codely.svg │ ├── src │ │ ├── app │ │ │ └── api │ │ │ │ ├── seller_backoffice │ │ │ │ └── products │ │ │ │ │ ├── [id] │ │ │ │ │ └── route.ts │ │ │ │ │ └── route.ts │ │ │ │ └── shop │ │ │ │ ├── product_reviews │ │ │ │ ├── [id] │ │ │ │ │ └── route.ts │ │ │ │ └── route.ts │ │ │ │ ├── products │ │ │ │ ├── [id] │ │ │ │ │ └── route.ts │ │ │ │ └── route.ts │ │ │ │ └── users │ │ │ │ └── [id] │ │ │ │ └── route.ts │ │ └── contexts │ │ │ ├── retention │ │ │ ├── email │ │ │ │ ├── application │ │ │ │ │ └── send_welcome_email │ │ │ │ │ │ ├── SendWelcomeEmailOnUserRegistered.ts │ │ │ │ │ │ └── WelcomeEmailSender.ts │ │ │ │ └── domain │ │ │ │ │ ├── Email.ts │ │ │ │ │ ├── EmailBody.ts │ │ │ │ │ ├── EmailId.ts │ │ │ │ │ ├── EmailSender.ts │ │ │ │ │ ├── WelcomeEmail.ts │ │ │ │ │ └── WelcomeEmailSentDomainEvent.ts │ │ │ └── user │ │ │ │ ├── application │ │ │ │ ├── create │ │ │ │ │ └── .gitkeep │ │ │ │ └── update_last_activity_date │ │ │ │ │ ├── UpdateLastActivityDateOnUserUpdated.ts │ │ │ │ │ └── UserLastActivityUpdater.ts │ │ │ │ └── domain │ │ │ │ ├── RetentionUser.ts │ │ │ │ └── RetentionUserRepository.ts │ │ │ ├── seller_backoffice │ │ │ └── products │ │ │ │ ├── application │ │ │ │ ├── create │ │ │ │ │ └── ProductCreator.ts │ │ │ │ ├── search │ │ │ │ │ └── ProductSearcher.ts │ │ │ │ └── search_all │ │ │ │ │ └── AllProductsSearcher.ts │ │ │ │ ├── domain │ │ │ │ ├── Product.ts │ │ │ │ ├── ProductId.ts │ │ │ │ ├── ProductImageUrl.ts │ │ │ │ ├── ProductImageUrls.ts │ │ │ │ ├── ProductName.ts │ │ │ │ ├── ProductRepository.ts │ │ │ │ └── ProductViews.ts │ │ │ │ └── infrastructure │ │ │ │ └── MySqlProductRepository.ts │ │ │ ├── shared │ │ │ ├── domain │ │ │ │ ├── AggregateRoot.ts │ │ │ │ ├── Collection.ts │ │ │ │ ├── DomainEvent.ts │ │ │ │ ├── DomainEventName.ts │ │ │ │ ├── DomainEventSubscriber.ts │ │ │ │ ├── EmailAddress.ts │ │ │ │ ├── EventBus.ts │ │ │ │ ├── Identifier.ts │ │ │ │ ├── Money.ts │ │ │ │ ├── StringValueObject.ts │ │ │ │ └── UuidGenerator.ts │ │ │ └── infrastructure │ │ │ │ └── MariaDBConnection.ts │ │ │ └── shop │ │ │ ├── product_reviews │ │ │ ├── application │ │ │ │ ├── create │ │ │ │ │ └── ProductReviewCreator.ts │ │ │ │ └── search_by_product_id │ │ │ │ │ └── ProductReviewsByProductSearcher.ts │ │ │ ├── domain │ │ │ │ ├── ProductReview.ts │ │ │ │ ├── ProductReviewComment.ts │ │ │ │ ├── ProductReviewId.ts │ │ │ │ ├── ProductReviewRating.ts │ │ │ │ └── ProductReviewRepository.ts │ │ │ └── infrastructure │ │ │ │ └── MySqlProductReviewRepository.ts │ │ │ ├── products │ │ │ ├── application │ │ │ │ ├── search │ │ │ │ │ └── ProductSearcher.ts │ │ │ │ └── search_all │ │ │ │ │ └── AllProductsSearcher.ts │ │ │ ├── domain │ │ │ │ ├── Product.ts │ │ │ │ ├── ProductFeaturedReview.ts │ │ │ │ ├── ProductId.ts │ │ │ │ ├── ProductImageUrl.ts │ │ │ │ ├── ProductImageUrls.ts │ │ │ │ ├── ProductName.ts │ │ │ │ ├── ProductRating.ts │ │ │ │ └── ProductRepository.ts │ │ │ └── infrastructure │ │ │ │ └── MySqlProductRepository.ts │ │ │ └── users │ │ │ ├── application │ │ │ ├── archive │ │ │ │ └── UserArchiver.ts │ │ │ ├── find │ │ │ │ └── UserFinder.ts │ │ │ ├── registrar │ │ │ │ └── UserRegistrar.ts │ │ │ ├── search │ │ │ │ └── UserSearcher.ts │ │ │ └── update_email │ │ │ │ └── UserEmailUpdater.ts │ │ │ ├── domain │ │ │ ├── User.ts │ │ │ ├── UserArchivedDomainEvent.ts │ │ │ ├── UserDoesNotExist.ts │ │ │ ├── UserEmail.ts │ │ │ ├── UserEmailUpdatedDomainEvent.ts │ │ │ ├── UserFinder.ts │ │ │ ├── UserId.ts │ │ │ ├── UserName.ts │ │ │ ├── UserProfilePicture.ts │ │ │ ├── UserRegisteredDomainEvent.ts │ │ │ ├── UserRepository.ts │ │ │ └── UserStatus.ts │ │ │ └── infrastructure │ │ │ └── MySqlUserRepository.ts │ ├── tailwind.config.ts │ ├── tests │ │ └── contexts │ │ │ ├── retention │ │ │ ├── email │ │ │ │ ├── application │ │ │ │ │ └── SendWelcomeEmailOnUserRegistered.test.ts │ │ │ │ ├── domain │ │ │ │ │ ├── EmailBodyMother.ts │ │ │ │ │ ├── EmailIdMother.ts │ │ │ │ │ ├── WelcomeEmailMother.ts │ │ │ │ │ └── WelcomeEmailSentDomainEventMother.ts │ │ │ │ └── infrastructure │ │ │ │ │ └── MockEmailSender.ts │ │ │ └── user │ │ │ │ ├── application │ │ │ │ └── update_last_activity_date │ │ │ │ │ └── UpdateLastActivityDateOnUserUpdated.test.ts │ │ │ │ ├── domain │ │ │ │ └── RetentionUserMother.ts │ │ │ │ └── infrastructure │ │ │ │ └── MockRetentionUserRepository.ts │ │ │ ├── shared │ │ │ ├── domain │ │ │ │ ├── EmailAddressMother.ts │ │ │ │ └── EnumMother.ts │ │ │ └── infrastructure │ │ │ │ ├── MockEventBus.ts │ │ │ │ └── MockUuidGenerator.ts │ │ │ └── shop │ │ │ └── users │ │ │ ├── application │ │ │ ├── archive │ │ │ │ └── UserArchiver.test.ts │ │ │ ├── registrar │ │ │ │ └── UserRegistrar.test.ts │ │ │ └── update_email │ │ │ │ └── UserEmailUpdater.test.ts │ │ │ ├── domain │ │ │ ├── DateMother.ts │ │ │ ├── UserArchivedDomainEventMother.ts │ │ │ ├── UserEmailMother.ts │ │ │ ├── UserEmailUpdatedDomainEventMother.ts │ │ │ ├── UserIdMother.ts │ │ │ ├── UserMother.ts │ │ │ ├── UserNameMother.ts │ │ │ ├── UserProfilePictureMother.ts │ │ │ └── UserRegisteredDomainEventMother.ts │ │ │ └── infrastructure │ │ │ └── MockUserRepository.ts │ └── tsconfig.json └── 4-save_as_derivated_action │ ├── .editorconfig │ ├── .eslintrc.json │ ├── .gitignore │ ├── Makefile │ ├── README.md │ ├── databases │ └── ecommerce.sql │ ├── docker-compose.yml │ ├── etc │ └── http │ │ ├── seller_backoffice │ │ ├── product-GET.http │ │ ├── product-PUT.http │ │ └── products-GET.http │ │ └── shop │ │ ├── product-GET.http │ │ ├── product_review-PUT.http │ │ ├── product_reviews-GET.http │ │ ├── products-GET.http │ │ ├── user-GET.http │ │ └── user-PUT.http │ ├── jest.config.js │ ├── next.config.js │ ├── package-lock.json │ ├── package.json │ ├── postcss.config.js │ ├── public │ └── codely.svg │ ├── src │ ├── app │ │ └── api │ │ │ ├── seller_backoffice │ │ │ └── products │ │ │ │ ├── [id] │ │ │ │ └── route.ts │ │ │ │ └── route.ts │ │ │ └── shop │ │ │ ├── product_reviews │ │ │ ├── [id] │ │ │ │ └── route.ts │ │ │ └── route.ts │ │ │ ├── products │ │ │ ├── [id] │ │ │ │ └── route.ts │ │ │ └── route.ts │ │ │ └── users │ │ │ └── [id] │ │ │ └── route.ts │ └── contexts │ │ ├── retention │ │ ├── email │ │ │ ├── application │ │ │ │ └── send_welcome_email │ │ │ │ │ ├── SendWelcomeEmailOnUserRegistered.ts │ │ │ │ │ └── WelcomeEmailSender.ts │ │ │ └── domain │ │ │ │ ├── Email.ts │ │ │ │ ├── EmailBody.ts │ │ │ │ ├── EmailId.ts │ │ │ │ ├── EmailSender.ts │ │ │ │ ├── WelcomeEmail.ts │ │ │ │ └── WelcomeEmailSentDomainEvent.ts │ │ └── user │ │ │ ├── application │ │ │ ├── create │ │ │ │ └── .gitkeep │ │ │ └── update_last_activity_date │ │ │ │ ├── UpdateLastActivityDateOnUserUpdated.ts │ │ │ │ └── UserLastActivityUpdater.ts │ │ │ └── domain │ │ │ ├── RetentionUser.ts │ │ │ └── RetentionUserRepository.ts │ │ ├── seller_backoffice │ │ └── products │ │ │ ├── application │ │ │ ├── create │ │ │ │ └── ProductCreator.ts │ │ │ ├── search │ │ │ │ └── ProductSearcher.ts │ │ │ └── search_all │ │ │ │ └── AllProductsSearcher.ts │ │ │ ├── domain │ │ │ ├── Product.ts │ │ │ ├── ProductId.ts │ │ │ ├── ProductImageUrl.ts │ │ │ ├── ProductImageUrls.ts │ │ │ ├── ProductName.ts │ │ │ ├── ProductRepository.ts │ │ │ └── ProductViews.ts │ │ │ └── infrastructure │ │ │ └── MySqlProductRepository.ts │ │ ├── shared │ │ ├── domain │ │ │ ├── AggregateRoot.ts │ │ │ ├── Collection.ts │ │ │ ├── EmailAddress.ts │ │ │ ├── Identifier.ts │ │ │ ├── Money.ts │ │ │ ├── StringValueObject.ts │ │ │ ├── UuidGenerator.ts │ │ │ └── event │ │ │ │ ├── DomainEvent.ts │ │ │ │ ├── DomainEventName.ts │ │ │ │ ├── DomainEventSubscriber.ts │ │ │ │ └── EventBus.ts │ │ └── infrastructure │ │ │ ├── MariaDBConnection.ts │ │ │ └── event │ │ │ └── InMemoryEventBus.ts │ │ └── shop │ │ ├── product_reviews │ │ ├── application │ │ │ ├── create │ │ │ │ └── ProductReviewCreator.ts │ │ │ └── search_by_product_id │ │ │ │ └── ProductReviewsByProductSearcher.ts │ │ ├── domain │ │ │ ├── ProductReview.ts │ │ │ ├── ProductReviewComment.ts │ │ │ ├── ProductReviewId.ts │ │ │ ├── ProductReviewRating.ts │ │ │ └── ProductReviewRepository.ts │ │ └── infrastructure │ │ │ └── MySqlProductReviewRepository.ts │ │ ├── products │ │ ├── application │ │ │ ├── search │ │ │ │ └── ProductSearcher.ts │ │ │ └── search_all │ │ │ │ └── AllProductsSearcher.ts │ │ ├── domain │ │ │ ├── Product.ts │ │ │ ├── ProductFeaturedReview.ts │ │ │ ├── ProductId.ts │ │ │ ├── ProductImageUrl.ts │ │ │ ├── ProductImageUrls.ts │ │ │ ├── ProductName.ts │ │ │ ├── ProductRating.ts │ │ │ └── ProductRepository.ts │ │ └── infrastructure │ │ │ └── MySqlProductRepository.ts │ │ └── users │ │ ├── application │ │ ├── archive │ │ │ └── UserArchiver.ts │ │ ├── find │ │ │ └── UserFinder.ts │ │ ├── registrar │ │ │ └── UserRegistrar.ts │ │ ├── save │ │ │ ├── SaveUserOnUserRegistered.ts │ │ │ └── UserSaver.ts │ │ ├── search │ │ │ └── UserSearcher.ts │ │ └── update_email │ │ │ └── UserEmailUpdater.ts │ │ ├── domain │ │ ├── User.ts │ │ ├── UserArchivedDomainEvent.ts │ │ ├── UserDoesNotExist.ts │ │ ├── UserEmail.ts │ │ ├── UserEmailUpdatedDomainEvent.ts │ │ ├── UserFinder.ts │ │ ├── UserId.ts │ │ ├── UserName.ts │ │ ├── UserProfilePicture.ts │ │ ├── UserRegisteredDomainEvent.ts │ │ ├── UserRepository.ts │ │ └── UserStatus.ts │ │ └── infrastructure │ │ └── MySqlUserRepository.ts │ ├── tailwind.config.ts │ ├── tests │ └── contexts │ │ ├── retention │ │ ├── email │ │ │ ├── application │ │ │ │ └── SendWelcomeEmailOnUserRegistered.test.ts │ │ │ ├── domain │ │ │ │ ├── EmailBodyMother.ts │ │ │ │ ├── EmailIdMother.ts │ │ │ │ ├── WelcomeEmailMother.ts │ │ │ │ └── WelcomeEmailSentDomainEventMother.ts │ │ │ └── infrastructure │ │ │ │ └── MockEmailSender.ts │ │ └── user │ │ │ ├── application │ │ │ └── update_last_activity_date │ │ │ │ └── UpdateLastActivityDateOnUserUpdated.test.ts │ │ │ ├── domain │ │ │ └── RetentionUserMother.ts │ │ │ └── infrastructure │ │ │ └── MockRetentionUserRepository.ts │ │ ├── shared │ │ ├── domain │ │ │ ├── EmailAddressMother.ts │ │ │ └── EnumMother.ts │ │ └── infrastructure │ │ │ ├── MockEventBus.ts │ │ │ └── MockUuidGenerator.ts │ │ └── shop │ │ └── users │ │ ├── application │ │ ├── archive │ │ │ └── UserArchiver.test.ts │ │ ├── registrar │ │ │ └── UserRegistrar.test.ts │ │ └── update_email │ │ │ └── UserEmailUpdater.test.ts │ │ ├── domain │ │ ├── DateMother.ts │ │ ├── UserArchivedDomainEventMother.ts │ │ ├── UserEmailMother.ts │ │ ├── UserEmailUpdatedDomainEventMother.ts │ │ ├── UserIdMother.ts │ │ ├── UserMother.ts │ │ ├── UserNameMother.ts │ │ ├── UserProfilePictureMother.ts │ │ └── UserRegisteredDomainEventMother.ts │ │ └── infrastructure │ │ └── MockUserRepository.ts │ └── tsconfig.json ├── 06-external_vs_internal_domain_events ├── 1-info_in_domain_events │ ├── 1-publish_all │ │ ├── .editorconfig │ │ ├── .eslintrc.json │ │ ├── .gitignore │ │ ├── Makefile │ │ ├── README.md │ │ ├── databases │ │ │ └── ecommerce.sql │ │ ├── docker-compose.yml │ │ ├── etc │ │ │ └── http │ │ │ │ ├── seller_backoffice │ │ │ │ ├── product-GET.http │ │ │ │ ├── product-PUT.http │ │ │ │ └── products-GET.http │ │ │ │ └── shop │ │ │ │ ├── product-GET.http │ │ │ │ ├── product_review-PUT.http │ │ │ │ ├── product_reviews-GET.http │ │ │ │ ├── products-GET.http │ │ │ │ ├── user-GET.http │ │ │ │ └── user-PUT.http │ │ ├── jest.config.js │ │ ├── next.config.js │ │ ├── package-lock.json │ │ ├── package.json │ │ ├── postcss.config.js │ │ ├── public │ │ │ └── codely.svg │ │ ├── src │ │ │ ├── app │ │ │ │ └── api │ │ │ │ │ ├── seller_backoffice │ │ │ │ │ └── products │ │ │ │ │ │ ├── [id] │ │ │ │ │ │ └── route.ts │ │ │ │ │ │ └── route.ts │ │ │ │ │ └── shop │ │ │ │ │ ├── product_reviews │ │ │ │ │ ├── [id] │ │ │ │ │ │ └── route.ts │ │ │ │ │ └── route.ts │ │ │ │ │ ├── products │ │ │ │ │ ├── [id] │ │ │ │ │ │ └── route.ts │ │ │ │ │ └── route.ts │ │ │ │ │ └── users │ │ │ │ │ └── [id] │ │ │ │ │ └── route.ts │ │ │ └── contexts │ │ │ │ ├── retention │ │ │ │ ├── email │ │ │ │ │ ├── application │ │ │ │ │ │ └── send_welcome_email │ │ │ │ │ │ │ ├── SendWelcomeEmailOnUserRegistered.ts │ │ │ │ │ │ │ └── WelcomeEmailSender.ts │ │ │ │ │ └── domain │ │ │ │ │ │ ├── Email.ts │ │ │ │ │ │ ├── EmailBody.ts │ │ │ │ │ │ ├── EmailId.ts │ │ │ │ │ │ ├── EmailSender.ts │ │ │ │ │ │ ├── WelcomeEmail.ts │ │ │ │ │ │ └── WelcomeEmailSentDomainEvent.ts │ │ │ │ └── user │ │ │ │ │ ├── application │ │ │ │ │ ├── create │ │ │ │ │ │ └── .gitkeep │ │ │ │ │ └── update_last_activity_date │ │ │ │ │ │ ├── UpdateLastActivityDateOnUserUpdated.ts │ │ │ │ │ │ └── UserLastActivityUpdater.ts │ │ │ │ │ └── domain │ │ │ │ │ ├── RetentionUser.ts │ │ │ │ │ └── RetentionUserRepository.ts │ │ │ │ ├── seller_backoffice │ │ │ │ └── products │ │ │ │ │ ├── application │ │ │ │ │ ├── create │ │ │ │ │ │ └── ProductCreator.ts │ │ │ │ │ ├── search │ │ │ │ │ │ └── ProductSearcher.ts │ │ │ │ │ └── search_all │ │ │ │ │ │ └── AllProductsSearcher.ts │ │ │ │ │ ├── domain │ │ │ │ │ ├── Product.ts │ │ │ │ │ ├── ProductId.ts │ │ │ │ │ ├── ProductImageUrl.ts │ │ │ │ │ ├── ProductImageUrls.ts │ │ │ │ │ ├── ProductName.ts │ │ │ │ │ ├── ProductRepository.ts │ │ │ │ │ └── ProductViews.ts │ │ │ │ │ └── infrastructure │ │ │ │ │ └── MySqlProductRepository.ts │ │ │ │ ├── shared │ │ │ │ ├── domain │ │ │ │ │ ├── AggregateRoot.ts │ │ │ │ │ ├── Collection.ts │ │ │ │ │ ├── DomainEvent.ts │ │ │ │ │ ├── DomainEventName.ts │ │ │ │ │ ├── DomainEventSubscriber.ts │ │ │ │ │ ├── EmailAddress.ts │ │ │ │ │ ├── EventBus.ts │ │ │ │ │ ├── Identifier.ts │ │ │ │ │ ├── Money.ts │ │ │ │ │ ├── StringValueObject.ts │ │ │ │ │ └── UuidGenerator.ts │ │ │ │ └── infrastructure │ │ │ │ │ └── MariaDBConnection.ts │ │ │ │ └── shop │ │ │ │ ├── product_reviews │ │ │ │ ├── application │ │ │ │ │ ├── create │ │ │ │ │ │ └── ProductReviewCreator.ts │ │ │ │ │ └── search_by_product_id │ │ │ │ │ │ └── ProductReviewsByProductSearcher.ts │ │ │ │ ├── domain │ │ │ │ │ ├── ProductReview.ts │ │ │ │ │ ├── ProductReviewComment.ts │ │ │ │ │ ├── ProductReviewId.ts │ │ │ │ │ ├── ProductReviewRating.ts │ │ │ │ │ └── ProductReviewRepository.ts │ │ │ │ └── infrastructure │ │ │ │ │ └── MySqlProductReviewRepository.ts │ │ │ │ ├── products │ │ │ │ ├── application │ │ │ │ │ ├── search │ │ │ │ │ │ └── ProductSearcher.ts │ │ │ │ │ └── search_all │ │ │ │ │ │ └── AllProductsSearcher.ts │ │ │ │ ├── domain │ │ │ │ │ ├── Product.ts │ │ │ │ │ ├── ProductFeaturedReview.ts │ │ │ │ │ ├── ProductId.ts │ │ │ │ │ ├── ProductImageUrl.ts │ │ │ │ │ ├── ProductImageUrls.ts │ │ │ │ │ ├── ProductName.ts │ │ │ │ │ ├── ProductRating.ts │ │ │ │ │ └── ProductRepository.ts │ │ │ │ └── infrastructure │ │ │ │ │ └── MySqlProductRepository.ts │ │ │ │ └── users │ │ │ │ ├── application │ │ │ │ ├── archive │ │ │ │ │ └── UserArchiver.ts │ │ │ │ ├── find │ │ │ │ │ └── UserFinder.ts │ │ │ │ ├── registrar │ │ │ │ │ └── UserRegistrar.ts │ │ │ │ ├── search │ │ │ │ │ └── UserSearcher.ts │ │ │ │ └── update_email │ │ │ │ │ └── UserEmailUpdater.ts │ │ │ │ ├── domain │ │ │ │ ├── User.ts │ │ │ │ ├── UserArchivedDomainEvent.ts │ │ │ │ ├── UserDoesNotExist.ts │ │ │ │ ├── UserEmail.ts │ │ │ │ ├── UserEmailUpdatedDomainEvent.ts │ │ │ │ ├── UserFinder.ts │ │ │ │ ├── UserId.ts │ │ │ │ ├── UserName.ts │ │ │ │ ├── UserProfilePicture.ts │ │ │ │ ├── UserRegisteredDomainEvent.ts │ │ │ │ ├── UserRepository.ts │ │ │ │ └── UserStatus.ts │ │ │ │ └── infrastructure │ │ │ │ └── MySqlUserRepository.ts │ │ ├── tailwind.config.ts │ │ ├── tests │ │ │ └── contexts │ │ │ │ ├── retention │ │ │ │ ├── email │ │ │ │ │ ├── application │ │ │ │ │ │ └── SendWelcomeEmailOnUserRegistered.test.ts │ │ │ │ │ ├── domain │ │ │ │ │ │ ├── EmailBodyMother.ts │ │ │ │ │ │ ├── EmailIdMother.ts │ │ │ │ │ │ ├── WelcomeEmailMother.ts │ │ │ │ │ │ └── WelcomeEmailSentDomainEventMother.ts │ │ │ │ │ └── infrastructure │ │ │ │ │ │ └── MockEmailSender.ts │ │ │ │ └── user │ │ │ │ │ ├── application │ │ │ │ │ └── update_last_activity_date │ │ │ │ │ │ └── UpdateLastActivityDateOnUserUpdated.test.ts │ │ │ │ │ ├── domain │ │ │ │ │ └── RetentionUserMother.ts │ │ │ │ │ └── infrastructure │ │ │ │ │ └── MockRetentionUserRepository.ts │ │ │ │ ├── shared │ │ │ │ ├── domain │ │ │ │ │ ├── EmailAddressMother.ts │ │ │ │ │ └── EnumMother.ts │ │ │ │ └── infrastructure │ │ │ │ │ ├── MockEventBus.ts │ │ │ │ │ └── MockUuidGenerator.ts │ │ │ │ └── shop │ │ │ │ └── users │ │ │ │ ├── application │ │ │ │ ├── archive │ │ │ │ │ └── UserArchiver.test.ts │ │ │ │ ├── registrar │ │ │ │ │ └── UserRegistrar.test.ts │ │ │ │ └── update_email │ │ │ │ │ └── UserEmailUpdater.test.ts │ │ │ │ ├── domain │ │ │ │ ├── DateMother.ts │ │ │ │ ├── UserArchivedDomainEventMother.ts │ │ │ │ ├── UserEmailMother.ts │ │ │ │ ├── UserEmailUpdatedDomainEventMother.ts │ │ │ │ ├── UserIdMother.ts │ │ │ │ ├── UserMother.ts │ │ │ │ ├── UserNameMother.ts │ │ │ │ ├── UserProfilePictureMother.ts │ │ │ │ └── UserRegisteredDomainEventMother.ts │ │ │ │ └── infrastructure │ │ │ │ └── MockUserRepository.ts │ │ └── tsconfig.json │ └── 2-publish_only_external │ │ ├── .editorconfig │ │ ├── .eslintrc.json │ │ ├── .gitignore │ │ ├── Makefile │ │ ├── README.md │ │ ├── databases │ │ └── ecommerce.sql │ │ ├── docker-compose.yml │ │ ├── etc │ │ └── http │ │ │ ├── seller_backoffice │ │ │ ├── product-GET.http │ │ │ ├── product-PUT.http │ │ │ └── products-GET.http │ │ │ └── shop │ │ │ ├── product-GET.http │ │ │ ├── product_review-PUT.http │ │ │ ├── product_reviews-GET.http │ │ │ ├── products-GET.http │ │ │ ├── user-GET.http │ │ │ └── user-PUT.http │ │ ├── jest.config.js │ │ ├── next.config.js │ │ ├── package-lock.json │ │ ├── package.json │ │ ├── postcss.config.js │ │ ├── public │ │ └── codely.svg │ │ ├── src │ │ ├── app │ │ │ └── api │ │ │ │ ├── seller_backoffice │ │ │ │ └── products │ │ │ │ │ ├── [id] │ │ │ │ │ └── route.ts │ │ │ │ │ └── route.ts │ │ │ │ └── shop │ │ │ │ ├── product_reviews │ │ │ │ ├── [id] │ │ │ │ │ └── route.ts │ │ │ │ └── route.ts │ │ │ │ ├── products │ │ │ │ ├── [id] │ │ │ │ │ └── route.ts │ │ │ │ └── route.ts │ │ │ │ └── users │ │ │ │ └── [id] │ │ │ │ └── route.ts │ │ └── contexts │ │ │ ├── retention │ │ │ ├── email │ │ │ │ ├── application │ │ │ │ │ └── send_welcome_email │ │ │ │ │ │ ├── SendWelcomeEmailOnUserRegistered.ts │ │ │ │ │ │ └── WelcomeEmailSender.ts │ │ │ │ └── domain │ │ │ │ │ ├── Email.ts │ │ │ │ │ ├── EmailBody.ts │ │ │ │ │ ├── EmailId.ts │ │ │ │ │ ├── EmailSender.ts │ │ │ │ │ ├── WelcomeEmail.ts │ │ │ │ │ └── WelcomeEmailSentDomainEvent.ts │ │ │ └── user │ │ │ │ ├── application │ │ │ │ ├── create │ │ │ │ │ └── .gitkeep │ │ │ │ └── update_last_activity_date │ │ │ │ │ ├── UpdateLastActivityDateOnUserUpdated.ts │ │ │ │ │ └── UserLastActivityUpdater.ts │ │ │ │ └── domain │ │ │ │ ├── RetentionUser.ts │ │ │ │ └── RetentionUserRepository.ts │ │ │ ├── seller_backoffice │ │ │ └── products │ │ │ │ ├── application │ │ │ │ ├── create │ │ │ │ │ └── ProductCreator.ts │ │ │ │ ├── search │ │ │ │ │ └── ProductSearcher.ts │ │ │ │ └── search_all │ │ │ │ │ └── AllProductsSearcher.ts │ │ │ │ ├── domain │ │ │ │ ├── Product.ts │ │ │ │ ├── ProductId.ts │ │ │ │ ├── ProductImageUrl.ts │ │ │ │ ├── ProductImageUrls.ts │ │ │ │ ├── ProductName.ts │ │ │ │ ├── ProductRepository.ts │ │ │ │ └── ProductViews.ts │ │ │ │ └── infrastructure │ │ │ │ └── MySqlProductRepository.ts │ │ │ ├── shared │ │ │ ├── application │ │ │ │ └── publish_external_domain_event │ │ │ │ │ ├── ExternalDomainEventPublisher.ts │ │ │ │ │ └── PublishExternalDomainEventOnDomainEventPublished.ts │ │ │ ├── domain │ │ │ │ ├── AggregateRoot.ts │ │ │ │ ├── Collection.ts │ │ │ │ ├── DomainEvent.ts │ │ │ │ ├── DomainEventName.ts │ │ │ │ ├── DomainEventSubscriber.ts │ │ │ │ ├── EmailAddress.ts │ │ │ │ ├── ExternalEventBus.ts │ │ │ │ ├── Identifier.ts │ │ │ │ ├── InternalEventBus.ts │ │ │ │ ├── Money.ts │ │ │ │ ├── StringValueObject.ts │ │ │ │ └── UuidGenerator.ts │ │ │ └── infrastructure │ │ │ │ └── MariaDBConnection.ts │ │ │ └── shop │ │ │ ├── product_reviews │ │ │ ├── application │ │ │ │ ├── create │ │ │ │ │ └── ProductReviewCreator.ts │ │ │ │ └── search_by_product_id │ │ │ │ │ └── ProductReviewsByProductSearcher.ts │ │ │ ├── domain │ │ │ │ ├── ProductReview.ts │ │ │ │ ├── ProductReviewComment.ts │ │ │ │ ├── ProductReviewId.ts │ │ │ │ ├── ProductReviewRating.ts │ │ │ │ └── ProductReviewRepository.ts │ │ │ └── infrastructure │ │ │ │ └── MySqlProductReviewRepository.ts │ │ │ ├── products │ │ │ ├── application │ │ │ │ ├── search │ │ │ │ │ └── ProductSearcher.ts │ │ │ │ └── search_all │ │ │ │ │ └── AllProductsSearcher.ts │ │ │ ├── domain │ │ │ │ ├── Product.ts │ │ │ │ ├── ProductFeaturedReview.ts │ │ │ │ ├── ProductId.ts │ │ │ │ ├── ProductImageUrl.ts │ │ │ │ ├── ProductImageUrls.ts │ │ │ │ ├── ProductName.ts │ │ │ │ ├── ProductRating.ts │ │ │ │ └── ProductRepository.ts │ │ │ └── infrastructure │ │ │ │ └── MySqlProductRepository.ts │ │ │ └── users │ │ │ ├── application │ │ │ ├── archive │ │ │ │ └── UserArchiver.ts │ │ │ ├── find │ │ │ │ └── UserFinder.ts │ │ │ ├── registrar │ │ │ │ └── UserRegistrar.ts │ │ │ ├── search │ │ │ │ └── UserSearcher.ts │ │ │ └── update_email │ │ │ │ └── UserEmailUpdater.ts │ │ │ ├── domain │ │ │ ├── User.ts │ │ │ ├── UserArchivedDomainEvent.ts │ │ │ ├── UserDoesNotExist.ts │ │ │ ├── UserEmail.ts │ │ │ ├── UserEmailUpdatedDomainEvent.ts │ │ │ ├── UserFinder.ts │ │ │ ├── UserId.ts │ │ │ ├── UserName.ts │ │ │ ├── UserProfilePicture.ts │ │ │ ├── UserRegisteredDomainEvent.ts │ │ │ ├── UserRepository.ts │ │ │ └── UserStatus.ts │ │ │ └── infrastructure │ │ │ └── MySqlUserRepository.ts │ │ ├── tailwind.config.ts │ │ ├── tests │ │ └── contexts │ │ │ ├── retention │ │ │ ├── email │ │ │ │ ├── application │ │ │ │ │ └── SendWelcomeEmailOnUserRegistered.test.ts │ │ │ │ ├── domain │ │ │ │ │ ├── EmailBodyMother.ts │ │ │ │ │ ├── EmailIdMother.ts │ │ │ │ │ ├── WelcomeEmailMother.ts │ │ │ │ │ └── WelcomeEmailSentDomainEventMother.ts │ │ │ │ └── infrastructure │ │ │ │ │ └── MockEmailSender.ts │ │ │ └── user │ │ │ │ ├── application │ │ │ │ └── update_last_activity_date │ │ │ │ │ └── UpdateLastActivityDateOnUserUpdated.test.ts │ │ │ │ ├── domain │ │ │ │ └── RetentionUserMother.ts │ │ │ │ └── infrastructure │ │ │ │ └── MockRetentionUserRepository.ts │ │ │ ├── shared │ │ │ ├── domain │ │ │ │ ├── EmailAddressMother.ts │ │ │ │ └── EnumMother.ts │ │ │ └── infrastructure │ │ │ │ ├── MockEventBus.ts │ │ │ │ └── MockUuidGenerator.ts │ │ │ └── shop │ │ │ └── users │ │ │ ├── application │ │ │ ├── archive │ │ │ │ └── UserArchiver.test.ts │ │ │ ├── registrar │ │ │ │ └── UserRegistrar.test.ts │ │ │ └── update_email │ │ │ │ └── UserEmailUpdater.test.ts │ │ │ ├── domain │ │ │ ├── DateMother.ts │ │ │ ├── UserArchivedDomainEventMother.ts │ │ │ ├── UserEmailMother.ts │ │ │ ├── UserEmailUpdatedDomainEventMother.ts │ │ │ ├── UserIdMother.ts │ │ │ ├── UserMother.ts │ │ │ ├── UserNameMother.ts │ │ │ ├── UserProfilePictureMother.ts │ │ │ └── UserRegisteredDomainEventMother.ts │ │ │ └── infrastructure │ │ │ └── MockUserRepository.ts │ │ └── tsconfig.json └── 2-enrich_domain_events │ ├── .editorconfig │ ├── .eslintrc.json │ ├── .gitignore │ ├── Makefile │ ├── README.md │ ├── databases │ └── ecommerce.sql │ ├── docker-compose.yml │ ├── etc │ └── http │ │ ├── seller_backoffice │ │ ├── product-GET.http │ │ ├── product-PUT.http │ │ └── products-GET.http │ │ └── shop │ │ ├── product-GET.http │ │ ├── product_review-PUT.http │ │ ├── product_reviews-GET.http │ │ ├── products-GET.http │ │ ├── user-GET.http │ │ └── user-PUT.http │ ├── jest.config.js │ ├── next.config.js │ ├── package-lock.json │ ├── package.json │ ├── postcss.config.js │ ├── public │ └── codely.svg │ ├── src │ ├── app │ │ └── api │ │ │ ├── seller_backoffice │ │ │ └── products │ │ │ │ ├── [id] │ │ │ │ └── route.ts │ │ │ │ └── route.ts │ │ │ └── shop │ │ │ ├── product_reviews │ │ │ ├── [id] │ │ │ │ └── route.ts │ │ │ └── route.ts │ │ │ ├── products │ │ │ ├── [id] │ │ │ │ └── route.ts │ │ │ └── route.ts │ │ │ └── users │ │ │ └── [id] │ │ │ └── route.ts │ └── contexts │ │ ├── retention │ │ ├── email │ │ │ ├── application │ │ │ │ └── send_welcome_email │ │ │ │ │ ├── SendWelcomeEmailOnUserRegistered.ts │ │ │ │ │ └── WelcomeEmailSender.ts │ │ │ └── domain │ │ │ │ ├── Email.ts │ │ │ │ ├── EmailBody.ts │ │ │ │ ├── EmailId.ts │ │ │ │ ├── EmailSender.ts │ │ │ │ ├── WelcomeEmail.ts │ │ │ │ └── WelcomeEmailSentDomainEvent.ts │ │ └── user │ │ │ ├── application │ │ │ ├── create │ │ │ │ └── .gitkeep │ │ │ └── update_last_activity_date │ │ │ │ ├── UpdateLastActivityDateOnUserUpdated.ts │ │ │ │ └── UserLastActivityUpdater.ts │ │ │ └── domain │ │ │ ├── RetentionUser.ts │ │ │ └── RetentionUserRepository.ts │ │ ├── seller_backoffice │ │ └── products │ │ │ ├── application │ │ │ ├── create │ │ │ │ └── ProductCreator.ts │ │ │ ├── search │ │ │ │ └── ProductSearcher.ts │ │ │ └── search_all │ │ │ │ └── AllProductsSearcher.ts │ │ │ ├── domain │ │ │ ├── Product.ts │ │ │ ├── ProductId.ts │ │ │ ├── ProductImageUrl.ts │ │ │ ├── ProductImageUrls.ts │ │ │ ├── ProductName.ts │ │ │ ├── ProductRepository.ts │ │ │ └── ProductViews.ts │ │ │ └── infrastructure │ │ │ └── MySqlProductRepository.ts │ │ ├── shared │ │ ├── domain │ │ │ ├── AggregateRoot.ts │ │ │ ├── Collection.ts │ │ │ ├── DomainEvent.ts │ │ │ ├── DomainEventName.ts │ │ │ ├── DomainEventSubscriber.ts │ │ │ ├── EmailAddress.ts │ │ │ ├── EventBus.ts │ │ │ ├── Identifier.ts │ │ │ ├── Money.ts │ │ │ ├── StringValueObject.ts │ │ │ ├── UuidGenerator.ts │ │ │ └── shop │ │ │ │ └── users │ │ │ │ └── UserEmailUpdatedDomainEvent.ts │ │ └── infrastructure │ │ │ └── MariaDBConnection.ts │ │ └── shop │ │ ├── product_reviews │ │ ├── application │ │ │ ├── create │ │ │ │ └── ProductReviewCreator.ts │ │ │ └── search_by_product_id │ │ │ │ └── ProductReviewsByProductSearcher.ts │ │ ├── domain │ │ │ ├── ProductReview.ts │ │ │ ├── ProductReviewComment.ts │ │ │ ├── ProductReviewId.ts │ │ │ ├── ProductReviewRating.ts │ │ │ └── ProductReviewRepository.ts │ │ └── infrastructure │ │ │ └── MySqlProductReviewRepository.ts │ │ ├── products │ │ ├── application │ │ │ ├── search │ │ │ │ └── ProductSearcher.ts │ │ │ └── search_all │ │ │ │ └── AllProductsSearcher.ts │ │ ├── domain │ │ │ ├── Product.ts │ │ │ ├── ProductFeaturedReview.ts │ │ │ ├── ProductId.ts │ │ │ ├── ProductImageUrl.ts │ │ │ ├── ProductImageUrls.ts │ │ │ ├── ProductName.ts │ │ │ ├── ProductRating.ts │ │ │ └── ProductRepository.ts │ │ └── infrastructure │ │ │ └── MySqlProductRepository.ts │ │ └── users │ │ ├── application │ │ ├── archive │ │ │ └── UserArchiver.ts │ │ ├── find │ │ │ └── UserFinder.ts │ │ ├── registrar │ │ │ └── UserRegistrar.ts │ │ ├── search │ │ │ └── UserSearcher.ts │ │ └── update_email │ │ │ └── UserEmailUpdater.ts │ │ ├── domain │ │ ├── User.ts │ │ ├── UserArchivedDomainEvent.ts │ │ ├── UserDoesNotExist.ts │ │ ├── UserEmail.ts │ │ ├── UserFinder.ts │ │ ├── UserId.ts │ │ ├── UserName.ts │ │ ├── UserProfilePicture.ts │ │ ├── UserRegisteredDomainEvent.ts │ │ ├── UserRepository.ts │ │ └── UserStatus.ts │ │ └── infrastructure │ │ └── MySqlUserRepository.ts │ ├── tailwind.config.ts │ ├── tests │ └── contexts │ │ ├── retention │ │ ├── email │ │ │ ├── application │ │ │ │ └── SendWelcomeEmailOnUserRegistered.test.ts │ │ │ ├── domain │ │ │ │ ├── EmailBodyMother.ts │ │ │ │ ├── EmailIdMother.ts │ │ │ │ ├── WelcomeEmailMother.ts │ │ │ │ └── WelcomeEmailSentDomainEventMother.ts │ │ │ └── infrastructure │ │ │ │ └── MockEmailSender.ts │ │ └── user │ │ │ ├── application │ │ │ └── update_last_activity_date │ │ │ │ └── UpdateLastActivityDateOnUserUpdated.test.ts │ │ │ ├── domain │ │ │ └── RetentionUserMother.ts │ │ │ └── infrastructure │ │ │ └── MockRetentionUserRepository.ts │ │ ├── shared │ │ ├── domain │ │ │ ├── EmailAddressMother.ts │ │ │ └── EnumMother.ts │ │ └── infrastructure │ │ │ ├── MockEventBus.ts │ │ │ └── MockUuidGenerator.ts │ │ └── shop │ │ └── users │ │ ├── application │ │ ├── archive │ │ │ └── UserArchiver.test.ts │ │ ├── registrar │ │ │ └── UserRegistrar.test.ts │ │ └── update_email │ │ │ └── UserEmailUpdater.test.ts │ │ ├── domain │ │ ├── DateMother.ts │ │ ├── UserArchivedDomainEventMother.ts │ │ ├── UserEmailMother.ts │ │ ├── UserEmailUpdatedDomainEventMother.ts │ │ ├── UserIdMother.ts │ │ ├── UserMother.ts │ │ ├── UserNameMother.ts │ │ ├── UserProfilePictureMother.ts │ │ └── UserRegisteredDomainEventMother.ts │ │ └── infrastructure │ │ └── MockUserRepository.ts │ └── tsconfig.json ├── 07-implement_event_bus └── 1-sync_event_bus │ ├── .editorconfig │ ├── .eslintrc.json │ ├── .gitignore │ ├── Makefile │ ├── README.md │ ├── databases │ └── ecommerce.sql │ ├── docker-compose.yml │ ├── etc │ └── http │ │ ├── seller_backoffice │ │ ├── product-GET.http │ │ ├── product-PUT.http │ │ └── products-GET.http │ │ └── shop │ │ ├── product-GET.http │ │ ├── product_review-PUT.http │ │ ├── product_reviews-GET.http │ │ ├── products-GET.http │ │ ├── user-GET.http │ │ └── user-PUT.http │ ├── jest.config.js │ ├── next.config.js │ ├── package-lock.json │ ├── package.json │ ├── postcss.config.js │ ├── public │ └── codely.svg │ ├── src │ ├── app │ │ └── api │ │ │ ├── seller_backoffice │ │ │ └── products │ │ │ │ ├── [id] │ │ │ │ └── route.ts │ │ │ │ └── route.ts │ │ │ └── shop │ │ │ ├── product_reviews │ │ │ ├── [id] │ │ │ │ └── route.ts │ │ │ └── route.ts │ │ │ ├── products │ │ │ ├── [id] │ │ │ │ └── route.ts │ │ │ └── route.ts │ │ │ └── users │ │ │ └── [id] │ │ │ └── route.ts │ └── contexts │ │ ├── retention │ │ ├── email │ │ │ ├── application │ │ │ │ └── send_welcome_email │ │ │ │ │ ├── SendWelcomeEmailOnUserRegistered.ts │ │ │ │ │ └── WelcomeEmailSender.ts │ │ │ └── domain │ │ │ │ ├── Email.ts │ │ │ │ ├── EmailBody.ts │ │ │ │ ├── EmailId.ts │ │ │ │ ├── EmailSender.ts │ │ │ │ ├── WelcomeEmail.ts │ │ │ │ └── WelcomeEmailSentDomainEvent.ts │ │ └── user │ │ │ ├── application │ │ │ ├── create │ │ │ │ └── .gitkeep │ │ │ └── update_last_activity_date │ │ │ │ ├── UpdateLastActivityDateOnUserUpdated.ts │ │ │ │ └── UserLastActivityUpdater.ts │ │ │ └── domain │ │ │ ├── RetentionUser.ts │ │ │ └── RetentionUserRepository.ts │ │ ├── seller_backoffice │ │ └── products │ │ │ ├── application │ │ │ ├── create │ │ │ │ └── ProductCreator.ts │ │ │ ├── search │ │ │ │ └── ProductSearcher.ts │ │ │ └── search_all │ │ │ │ └── AllProductsSearcher.ts │ │ │ ├── domain │ │ │ ├── Product.ts │ │ │ ├── ProductId.ts │ │ │ ├── ProductImageUrl.ts │ │ │ ├── ProductImageUrls.ts │ │ │ ├── ProductName.ts │ │ │ ├── ProductRepository.ts │ │ │ └── ProductViews.ts │ │ │ └── infrastructure │ │ │ └── MySqlProductRepository.ts │ │ ├── shared │ │ ├── domain │ │ │ ├── AggregateRoot.ts │ │ │ ├── Collection.ts │ │ │ ├── EmailAddress.ts │ │ │ ├── Identifier.ts │ │ │ ├── Money.ts │ │ │ ├── StringValueObject.ts │ │ │ ├── UuidGenerator.ts │ │ │ └── event │ │ │ │ ├── DomainEvent.ts │ │ │ │ ├── DomainEventName.ts │ │ │ │ ├── DomainEventSubscriber.ts │ │ │ │ └── EventBus.ts │ │ └── infrastructure │ │ │ ├── MariaDBConnection.ts │ │ │ └── event │ │ │ └── InMemoryEventBus.ts │ │ └── shop │ │ ├── product_reviews │ │ ├── application │ │ │ ├── create │ │ │ │ └── ProductReviewCreator.ts │ │ │ └── search_by_product_id │ │ │ │ └── ProductReviewsByProductSearcher.ts │ │ ├── domain │ │ │ ├── ProductReview.ts │ │ │ ├── ProductReviewComment.ts │ │ │ ├── ProductReviewId.ts │ │ │ ├── ProductReviewRating.ts │ │ │ └── ProductReviewRepository.ts │ │ └── infrastructure │ │ │ └── MySqlProductReviewRepository.ts │ │ ├── products │ │ ├── application │ │ │ ├── search │ │ │ │ └── ProductSearcher.ts │ │ │ └── search_all │ │ │ │ └── AllProductsSearcher.ts │ │ ├── domain │ │ │ ├── Product.ts │ │ │ ├── ProductFeaturedReview.ts │ │ │ ├── ProductId.ts │ │ │ ├── ProductImageUrl.ts │ │ │ ├── ProductImageUrls.ts │ │ │ ├── ProductName.ts │ │ │ ├── ProductRating.ts │ │ │ └── ProductRepository.ts │ │ └── infrastructure │ │ │ └── MySqlProductRepository.ts │ │ └── users │ │ ├── application │ │ ├── archive │ │ │ └── UserArchiver.ts │ │ ├── find │ │ │ └── UserFinder.ts │ │ ├── registrar │ │ │ └── UserRegistrar.ts │ │ ├── search │ │ │ └── UserSearcher.ts │ │ └── update_email │ │ │ └── UserEmailUpdater.ts │ │ ├── domain │ │ ├── User.ts │ │ ├── UserArchivedDomainEvent.ts │ │ ├── UserDoesNotExist.ts │ │ ├── UserEmail.ts │ │ ├── UserEmailUpdatedDomainEvent.ts │ │ ├── UserFinder.ts │ │ ├── UserId.ts │ │ ├── UserName.ts │ │ ├── UserProfilePicture.ts │ │ ├── UserRegisteredDomainEvent.ts │ │ ├── UserRepository.ts │ │ └── UserStatus.ts │ │ └── infrastructure │ │ └── MySqlUserRepository.ts │ ├── tailwind.config.ts │ ├── tests │ └── contexts │ │ ├── retention │ │ ├── email │ │ │ ├── application │ │ │ │ └── SendWelcomeEmailOnUserRegistered.test.ts │ │ │ ├── domain │ │ │ │ ├── EmailBodyMother.ts │ │ │ │ ├── EmailIdMother.ts │ │ │ │ ├── WelcomeEmailMother.ts │ │ │ │ └── WelcomeEmailSentDomainEventMother.ts │ │ │ └── infrastructure │ │ │ │ └── MockEmailSender.ts │ │ └── user │ │ │ ├── application │ │ │ └── update_last_activity_date │ │ │ │ └── UpdateLastActivityDateOnUserUpdated.test.ts │ │ │ ├── domain │ │ │ └── RetentionUserMother.ts │ │ │ └── infrastructure │ │ │ └── MockRetentionUserRepository.ts │ │ ├── shared │ │ ├── domain │ │ │ ├── EmailAddressMother.ts │ │ │ └── EnumMother.ts │ │ └── infrastructure │ │ │ ├── MockEventBus.ts │ │ │ └── MockUuidGenerator.ts │ │ └── shop │ │ └── users │ │ ├── application │ │ ├── archive │ │ │ └── UserArchiver.test.ts │ │ ├── registrar │ │ │ └── UserRegistrar.test.ts │ │ └── update_email │ │ │ └── UserEmailUpdater.test.ts │ │ ├── domain │ │ ├── DateMother.ts │ │ ├── UserArchivedDomainEventMother.ts │ │ ├── UserEmailMother.ts │ │ ├── UserEmailUpdatedDomainEventMother.ts │ │ ├── UserIdMother.ts │ │ ├── UserMother.ts │ │ ├── UserNameMother.ts │ │ ├── UserProfilePictureMother.ts │ │ └── UserRegisteredDomainEventMother.ts │ │ └── infrastructure │ │ └── MockUserRepository.ts │ └── tsconfig.json ├── 08-add_domain_events_to_legacy └── 2-add_event_bus │ └── 1-without_events │ ├── .editorconfig │ ├── .eslintrc.json │ ├── .gitignore │ ├── Makefile │ ├── README.md │ ├── databases │ └── ecommerce.sql │ ├── docker-compose.yml │ ├── etc │ └── http │ │ ├── seller_backoffice │ │ ├── product-GET.http │ │ ├── product-PUT.http │ │ └── products-GET.http │ │ └── shop │ │ ├── product-GET.http │ │ ├── product_review-PUT.http │ │ ├── product_reviews-GET.http │ │ ├── products-GET.http │ │ ├── user-GET.http │ │ └── user-PUT.http │ ├── jest.config.js │ ├── next.config.js │ ├── package-lock.json │ ├── package.json │ ├── postcss.config.js │ ├── public │ └── codely.svg │ ├── src │ ├── app │ │ └── api │ │ │ ├── seller_backoffice │ │ │ └── products │ │ │ │ ├── [id] │ │ │ │ └── route.ts │ │ │ │ └── route.ts │ │ │ └── shop │ │ │ ├── product_reviews │ │ │ ├── [id] │ │ │ │ └── route.ts │ │ │ └── route.ts │ │ │ ├── products │ │ │ ├── [id] │ │ │ │ └── route.ts │ │ │ └── route.ts │ │ │ └── users │ │ │ └── [id] │ │ │ └── route.ts │ └── contexts │ │ ├── retention │ │ ├── email │ │ │ ├── application │ │ │ │ └── send_welcome_email │ │ │ │ │ └── WelcomeEmailSender.ts │ │ │ └── domain │ │ │ │ ├── Email.ts │ │ │ │ ├── EmailBody.ts │ │ │ │ ├── EmailId.ts │ │ │ │ ├── EmailSender.ts │ │ │ │ ├── WelcomeEmail.ts │ │ │ │ └── WelcomeEmailSentDomainEvent.ts │ │ └── user │ │ │ ├── application │ │ │ ├── create │ │ │ │ └── .gitkeep │ │ │ └── update_last_activity_date │ │ │ │ ├── UpdateLastActivityDateOnUserUpdated.ts │ │ │ │ └── UserLastActivityUpdater.ts │ │ │ └── domain │ │ │ ├── RetentionUser.ts │ │ │ └── RetentionUserRepository.ts │ │ ├── seller_backoffice │ │ └── products │ │ │ ├── application │ │ │ ├── create │ │ │ │ └── ProductCreator.ts │ │ │ ├── search │ │ │ │ └── ProductSearcher.ts │ │ │ └── search_all │ │ │ │ └── AllProductsSearcher.ts │ │ │ ├── domain │ │ │ ├── Product.ts │ │ │ ├── ProductId.ts │ │ │ ├── ProductImageUrl.ts │ │ │ ├── ProductImageUrls.ts │ │ │ ├── ProductName.ts │ │ │ ├── ProductRepository.ts │ │ │ └── ProductViews.ts │ │ │ └── infrastructure │ │ │ └── MySqlProductRepository.ts │ │ ├── shared │ │ ├── domain │ │ │ ├── AggregateRoot.ts │ │ │ ├── Collection.ts │ │ │ ├── EmailAddress.ts │ │ │ ├── Identifier.ts │ │ │ ├── Money.ts │ │ │ ├── StringValueObject.ts │ │ │ ├── UuidGenerator.ts │ │ │ └── event │ │ │ │ ├── DomainEvent.ts │ │ │ │ ├── DomainEventName.ts │ │ │ │ ├── DomainEventSubscriber.ts │ │ │ │ └── EventBus.ts │ │ └── infrastructure │ │ │ ├── MariaDBConnection.ts │ │ │ └── event │ │ │ └── InMemoryEventBus.ts │ │ └── shop │ │ ├── product_reviews │ │ ├── application │ │ │ ├── create │ │ │ │ └── ProductReviewCreator.ts │ │ │ └── search_by_product_id │ │ │ │ └── ProductReviewsByProductSearcher.ts │ │ ├── domain │ │ │ ├── ProductReview.ts │ │ │ ├── ProductReviewComment.ts │ │ │ ├── ProductReviewId.ts │ │ │ ├── ProductReviewRating.ts │ │ │ └── ProductReviewRepository.ts │ │ └── infrastructure │ │ │ └── MySqlProductReviewRepository.ts │ │ ├── products │ │ ├── application │ │ │ ├── search │ │ │ │ └── ProductSearcher.ts │ │ │ └── search_all │ │ │ │ └── AllProductsSearcher.ts │ │ ├── domain │ │ │ ├── Product.ts │ │ │ ├── ProductFeaturedReview.ts │ │ │ ├── ProductId.ts │ │ │ ├── ProductImageUrl.ts │ │ │ ├── ProductImageUrls.ts │ │ │ ├── ProductName.ts │ │ │ ├── ProductRating.ts │ │ │ └── ProductRepository.ts │ │ └── infrastructure │ │ │ └── MySqlProductRepository.ts │ │ └── users │ │ ├── application │ │ ├── archive │ │ │ └── UserArchiver.ts │ │ ├── find │ │ │ └── UserFinder.ts │ │ ├── registrar │ │ │ └── UserRegistrar.ts │ │ ├── search │ │ │ └── UserSearcher.ts │ │ └── update_email │ │ │ └── UserEmailUpdater.ts │ │ ├── domain │ │ ├── User.ts │ │ ├── UserArchivedDomainEvent.ts │ │ ├── UserDoesNotExist.ts │ │ ├── UserEmail.ts │ │ ├── UserEmailUpdatedDomainEvent.ts │ │ ├── UserFinder.ts │ │ ├── UserId.ts │ │ ├── UserName.ts │ │ ├── UserProfilePicture.ts │ │ ├── UserRegisteredDomainEvent.ts │ │ ├── UserRepository.ts │ │ └── UserStatus.ts │ │ └── infrastructure │ │ └── MySqlUserRepository.ts │ ├── tailwind.config.ts │ ├── tests │ └── contexts │ │ ├── retention │ │ ├── email │ │ │ ├── domain │ │ │ │ ├── EmailBodyMother.ts │ │ │ │ ├── EmailIdMother.ts │ │ │ │ ├── WelcomeEmailMother.ts │ │ │ │ └── WelcomeEmailSentDomainEventMother.ts │ │ │ └── infrastructure │ │ │ │ └── MockEmailSender.ts │ │ └── user │ │ │ ├── application │ │ │ └── update_last_activity_date │ │ │ │ └── UpdateLastActivityDateOnUserUpdated.test.ts │ │ │ ├── domain │ │ │ └── RetentionUserMother.ts │ │ │ └── infrastructure │ │ │ └── MockRetentionUserRepository.ts │ │ ├── shared │ │ ├── domain │ │ │ ├── EmailAddressMother.ts │ │ │ └── EnumMother.ts │ │ └── infrastructure │ │ │ ├── MockEventBus.ts │ │ │ └── MockUuidGenerator.ts │ │ └── shop │ │ └── users │ │ ├── application │ │ ├── archive │ │ │ └── UserArchiver.test.ts │ │ ├── registrar │ │ │ └── UserRegistrar.test.ts │ │ └── update_email │ │ │ └── UserEmailUpdater.test.ts │ │ ├── domain │ │ ├── DateMother.ts │ │ ├── UserArchivedDomainEventMother.ts │ │ ├── UserEmailMother.ts │ │ ├── UserEmailUpdatedDomainEventMother.ts │ │ ├── UserIdMother.ts │ │ ├── UserMother.ts │ │ ├── UserNameMother.ts │ │ ├── UserProfilePictureMother.ts │ │ └── UserRegisteredDomainEventMother.ts │ │ └── infrastructure │ │ └── MockUserRepository.ts │ └── tsconfig.json ├── 09-change_data_capture └── 2-add_change_data_capture │ ├── .env │ ├── .github │ ├── FUNDING.yml │ └── workflows │ │ ├── ci.yml │ │ └── labeler.yml │ ├── .gitignore │ ├── Dockerfile │ ├── Makefile │ ├── README.md │ ├── apps │ ├── backoffice │ │ ├── backend │ │ │ ├── bin │ │ │ │ └── console │ │ │ ├── config │ │ │ │ ├── bundles.php │ │ │ │ ├── routes │ │ │ │ │ ├── courses.yaml │ │ │ │ │ ├── health-check.yaml │ │ │ │ │ └── metrics.yaml │ │ │ │ ├── services.yaml │ │ │ │ ├── services │ │ │ │ │ └── framework.yaml │ │ │ │ └── services_test.yaml │ │ │ ├── public │ │ │ │ └── index.php │ │ │ └── src │ │ │ │ ├── BackofficeBackendKernel.php │ │ │ │ └── Controller │ │ │ │ ├── Courses │ │ │ │ └── CoursesGetController.php │ │ │ │ ├── HealthCheck │ │ │ │ └── HealthCheckGetController.php │ │ │ │ └── Metrics │ │ │ │ └── MetricsController.php │ │ └── frontend │ │ │ ├── bin │ │ │ └── console │ │ │ ├── config │ │ │ ├── bundles.php │ │ │ ├── routes │ │ │ │ ├── api_courses.yaml │ │ │ │ ├── courses.yaml │ │ │ │ ├── health-check.yaml │ │ │ │ ├── home.yaml │ │ │ │ └── metrics.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 │ │ │ │ └── Metrics │ │ │ │ └── MetricsController.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 │ │ │ │ └── metrics.yaml │ │ │ ├── services.yaml │ │ │ ├── services │ │ │ │ └── framework.yaml │ │ │ └── services_test.yaml │ │ ├── public │ │ │ └── index.php │ │ ├── src │ │ │ ├── Command │ │ │ │ └── DomainEvents │ │ │ │ │ ├── MySql │ │ │ │ │ └── ConsumeMySqlDomainEventsCommand.php │ │ │ │ │ ├── PublishDomainEventsFromMutationsCommand.php │ │ │ │ │ └── RabbitMq │ │ │ │ │ ├── ConfigureRabbitMqCommand.php │ │ │ │ │ ├── ConsumeRabbitMqDomainEventsCommand.php │ │ │ │ │ └── GenerateSupervisorRabbitMqConsumerFilesCommand.php │ │ │ ├── Controller │ │ │ │ ├── Courses │ │ │ │ │ └── CoursesPutController.php │ │ │ │ ├── CoursesCounter │ │ │ │ │ └── CoursesCounterGetController.php │ │ │ │ ├── HealthCheck │ │ │ │ │ └── HealthCheckGetController.php │ │ │ │ └── Metrics │ │ │ │ │ └── MetricsController.php │ │ │ └── MoocBackendKernel.php │ │ └── tests │ │ │ ├── features │ │ │ ├── courses │ │ │ │ └── course_put.feature │ │ │ ├── courses_counter │ │ │ │ └── courses_counter_get.feature │ │ │ └── health_check │ │ │ │ └── health_check_get.feature │ │ │ └── mooc_backend.yml │ │ └── frontend │ │ └── src │ │ └── .gitkeep │ ├── behat.yml │ ├── composer.json │ ├── composer.lock │ ├── docker-compose.yml │ ├── ecs.php │ ├── etc │ ├── databases │ │ ├── backoffice │ │ │ └── courses.json │ │ └── mooc.sql │ ├── endpoints │ │ ├── backoffice_frontend.http │ │ └── mooc_backend.http │ ├── infrastructure │ │ └── php │ │ │ ├── conf.d │ │ │ ├── apcu.ini │ │ │ ├── opcache.ini │ │ │ └── xdebug.ini │ │ │ └── php.ini │ └── prometheus │ │ └── prometheus.yml │ ├── phpmd.xml │ ├── phpstan.neon │ ├── phpunit.xml │ ├── psalm.xml │ ├── rector.php │ ├── 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 │ │ │ │ ├── Cdc │ │ │ │ └── DatabaseMutationToCourseCreatedDomainEvent.php │ │ │ │ └── Persistence │ │ │ │ ├── Doctrine │ │ │ │ ├── Course.orm.xml │ │ │ │ ├── CourseDuration.orm.xml │ │ │ │ ├── CourseIdType.php │ │ │ │ └── CourseName.orm.xml │ │ │ │ ├── DoctrineCourseRepository.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 │ │ │ │ ├── Courses │ │ │ │ │ └── CourseId.php │ │ │ │ └── Videos │ │ │ │ │ └── VideoUrl.php │ │ │ └── Infrastructure │ │ │ │ ├── Doctrine │ │ │ │ ├── DbalTypesSearcher.php │ │ │ │ ├── DoctrinePrefixesSearcher.php │ │ │ │ └── MoocEntityManagerFactory.php │ │ │ │ └── Symfony │ │ │ │ └── DependencyInjection │ │ │ │ └── mooc_services.yaml │ │ └── Videos │ │ │ ├── Application │ │ │ ├── Create │ │ │ │ ├── CreateVideoCommand.php │ │ │ │ ├── CreateVideoCommandHandler.php │ │ │ │ └── VideoCreator.php │ │ │ ├── Find │ │ │ │ ├── FindVideoQuery.php │ │ │ │ ├── FindVideoQueryHandler.php │ │ │ │ ├── VideoFinder.php │ │ │ │ ├── VideoResponse.php │ │ │ │ └── VideoResponseConverter.php │ │ │ ├── Trim │ │ │ │ ├── TrimVideoCommand.php │ │ │ │ ├── TrimVideoCommandHandler.php │ │ │ │ └── VideoTrimmer.php │ │ │ └── Update │ │ │ │ └── VideoTitleUpdater.php │ │ │ ├── Domain │ │ │ ├── Video.php │ │ │ ├── VideoCreatedDomainEvent.php │ │ │ ├── VideoFinder.php │ │ │ ├── VideoId.php │ │ │ ├── VideoNotFound.php │ │ │ ├── VideoRepository.php │ │ │ ├── VideoTitle.php │ │ │ ├── VideoType.php │ │ │ └── Videos.php │ │ │ └── Infrastructure │ │ │ └── Persistence │ │ │ ├── Doctrine │ │ │ ├── Video.orm.xml │ │ │ ├── VideoIdType.php │ │ │ ├── VideoTitle.orm.xml │ │ │ └── VideoType.orm.xml │ │ │ └── VideoRepositoryMySql.php │ ├── 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 │ │ ├── Second.php │ │ ├── SecondsInterval.php │ │ ├── Utils.php │ │ ├── UuidGenerator.php │ │ └── ValueObject │ │ │ ├── IntValueObject.php │ │ │ ├── SimpleUuid.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 │ │ │ └── WithMonitoring │ │ │ │ └── WithPrometheusMonitoringEventBus.php │ │ └── Query │ │ │ ├── InMemorySymfonyQueryBus.php │ │ │ └── QueryNotRegisteredError.php │ │ ├── Cdc │ │ ├── DatabaseMutationAction.php │ │ └── DatabaseMutationToDomainEvent.php │ │ ├── Doctrine │ │ ├── DatabaseConnections.php │ │ ├── Dbal │ │ │ ├── DbalCustomTypesRegistrar.php │ │ │ └── DoctrineCustomType.php │ │ └── DoctrineEntityManagerFactory.php │ │ ├── Elasticsearch │ │ ├── ElasticsearchClient.php │ │ └── ElasticsearchClientFactory.php │ │ ├── Logger │ │ └── MonologLogger.php │ │ ├── Monitoring │ │ └── PrometheusMonitor.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 │ ├── 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 │ │ │ ├── ElasticsearchBackofficeCourseRepositoryTest.php │ │ │ └── MySqlBackofficeCourseRepositoryTest.php │ └── Shared │ │ └── Infraestructure │ │ └── PhpUnit │ │ ├── BackofficeContextInfrastructureTestCase.php │ │ └── BackofficeEnvironmentArranger.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 │ ├── MoocArchitectureTest.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 │ ├── ArchitectureTest.php │ ├── 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 │ │ └── MySqlDatabaseCleaner.php │ ├── Elastic │ │ └── ElasticDatabaseCleaner.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 │ └── SharedArchitectureTest.php ├── LICENSE └── README.md /02-from_where_publish_domain_events/1-from_use_case/.editorconfig: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/02-from_where_publish_domain_events/1-from_use_case/.editorconfig -------------------------------------------------------------------------------- /02-from_where_publish_domain_events/1-from_use_case/.eslintrc.json: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/02-from_where_publish_domain_events/1-from_use_case/.eslintrc.json -------------------------------------------------------------------------------- /02-from_where_publish_domain_events/1-from_use_case/.gitignore: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/02-from_where_publish_domain_events/1-from_use_case/.gitignore -------------------------------------------------------------------------------- /02-from_where_publish_domain_events/1-from_use_case/Makefile: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /02-from_where_publish_domain_events/1-from_use_case/README.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/02-from_where_publish_domain_events/1-from_use_case/README.md -------------------------------------------------------------------------------- /02-from_where_publish_domain_events/1-from_use_case/databases/ecommerce.sql: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/02-from_where_publish_domain_events/1-from_use_case/databases/ecommerce.sql -------------------------------------------------------------------------------- /02-from_where_publish_domain_events/1-from_use_case/docker-compose.yml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/02-from_where_publish_domain_events/1-from_use_case/docker-compose.yml -------------------------------------------------------------------------------- /02-from_where_publish_domain_events/1-from_use_case/etc/http/seller_backoffice/product-GET.http: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/02-from_where_publish_domain_events/1-from_use_case/etc/http/seller_backoffice/product-GET.http -------------------------------------------------------------------------------- /02-from_where_publish_domain_events/1-from_use_case/etc/http/seller_backoffice/product-PUT.http: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/02-from_where_publish_domain_events/1-from_use_case/etc/http/seller_backoffice/product-PUT.http -------------------------------------------------------------------------------- /02-from_where_publish_domain_events/1-from_use_case/etc/http/seller_backoffice/products-GET.http: -------------------------------------------------------------------------------- 1 | GET http://localhost:3000/api/seller_backoffice/products 2 | -------------------------------------------------------------------------------- /02-from_where_publish_domain_events/1-from_use_case/etc/http/shop/product-GET.http: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/02-from_where_publish_domain_events/1-from_use_case/etc/http/shop/product-GET.http -------------------------------------------------------------------------------- /02-from_where_publish_domain_events/1-from_use_case/etc/http/shop/product_review-PUT.http: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/02-from_where_publish_domain_events/1-from_use_case/etc/http/shop/product_review-PUT.http -------------------------------------------------------------------------------- /02-from_where_publish_domain_events/1-from_use_case/etc/http/shop/product_reviews-GET.http: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/02-from_where_publish_domain_events/1-from_use_case/etc/http/shop/product_reviews-GET.http -------------------------------------------------------------------------------- /02-from_where_publish_domain_events/1-from_use_case/etc/http/shop/products-GET.http: -------------------------------------------------------------------------------- 1 | GET http://localhost:3000/api/shop/products 2 | -------------------------------------------------------------------------------- /02-from_where_publish_domain_events/1-from_use_case/etc/http/shop/user-GET.http: -------------------------------------------------------------------------------- 1 | GET http://localhost:3000/api/shop/users/1ec0b8ee-dbdc-48f6-ae5a-bfb99bee5e27 2 | -------------------------------------------------------------------------------- /02-from_where_publish_domain_events/1-from_use_case/etc/http/shop/user-PUT.http: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/02-from_where_publish_domain_events/1-from_use_case/etc/http/shop/user-PUT.http -------------------------------------------------------------------------------- /02-from_where_publish_domain_events/1-from_use_case/jest.config.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/02-from_where_publish_domain_events/1-from_use_case/jest.config.js -------------------------------------------------------------------------------- /02-from_where_publish_domain_events/1-from_use_case/next.config.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/02-from_where_publish_domain_events/1-from_use_case/next.config.js -------------------------------------------------------------------------------- /02-from_where_publish_domain_events/1-from_use_case/package-lock.json: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/02-from_where_publish_domain_events/1-from_use_case/package-lock.json -------------------------------------------------------------------------------- /02-from_where_publish_domain_events/1-from_use_case/package.json: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/02-from_where_publish_domain_events/1-from_use_case/package.json -------------------------------------------------------------------------------- /02-from_where_publish_domain_events/1-from_use_case/postcss.config.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/02-from_where_publish_domain_events/1-from_use_case/postcss.config.js -------------------------------------------------------------------------------- /02-from_where_publish_domain_events/1-from_use_case/public/codely.svg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/02-from_where_publish_domain_events/1-from_use_case/public/codely.svg -------------------------------------------------------------------------------- /02-from_where_publish_domain_events/1-from_use_case/src/app/api/shop/product_reviews/[id]/route.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/02-from_where_publish_domain_events/1-from_use_case/src/app/api/shop/product_reviews/[id]/route.ts -------------------------------------------------------------------------------- /02-from_where_publish_domain_events/1-from_use_case/src/app/api/shop/product_reviews/route.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/02-from_where_publish_domain_events/1-from_use_case/src/app/api/shop/product_reviews/route.ts -------------------------------------------------------------------------------- /02-from_where_publish_domain_events/1-from_use_case/src/app/api/shop/products/[id]/route.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/02-from_where_publish_domain_events/1-from_use_case/src/app/api/shop/products/[id]/route.ts -------------------------------------------------------------------------------- /02-from_where_publish_domain_events/1-from_use_case/src/app/api/shop/products/route.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/02-from_where_publish_domain_events/1-from_use_case/src/app/api/shop/products/route.ts -------------------------------------------------------------------------------- /02-from_where_publish_domain_events/1-from_use_case/src/app/api/shop/users/[id]/route.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/02-from_where_publish_domain_events/1-from_use_case/src/app/api/shop/users/[id]/route.ts -------------------------------------------------------------------------------- /02-from_where_publish_domain_events/1-from_use_case/src/contexts/shared/domain/Collection.ts: -------------------------------------------------------------------------------- 1 | export abstract class Collection { 2 | constructor(public readonly value: T[]) {} 3 | } 4 | -------------------------------------------------------------------------------- /02-from_where_publish_domain_events/1-from_use_case/src/contexts/shared/domain/DomainEvent.ts: -------------------------------------------------------------------------------- 1 | export class DomainEvent {} 2 | -------------------------------------------------------------------------------- /02-from_where_publish_domain_events/1-from_use_case/src/contexts/shared/domain/EventBus.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/02-from_where_publish_domain_events/1-from_use_case/src/contexts/shared/domain/EventBus.ts -------------------------------------------------------------------------------- /02-from_where_publish_domain_events/1-from_use_case/src/contexts/shared/domain/Identifier.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/02-from_where_publish_domain_events/1-from_use_case/src/contexts/shared/domain/Identifier.ts -------------------------------------------------------------------------------- /02-from_where_publish_domain_events/1-from_use_case/src/contexts/shared/domain/Money.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/02-from_where_publish_domain_events/1-from_use_case/src/contexts/shared/domain/Money.ts -------------------------------------------------------------------------------- /02-from_where_publish_domain_events/1-from_use_case/src/contexts/shop/products/domain/Product.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/02-from_where_publish_domain_events/1-from_use_case/src/contexts/shop/products/domain/Product.ts -------------------------------------------------------------------------------- /02-from_where_publish_domain_events/1-from_use_case/src/contexts/shop/products/domain/ProductId.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/02-from_where_publish_domain_events/1-from_use_case/src/contexts/shop/products/domain/ProductId.ts -------------------------------------------------------------------------------- /02-from_where_publish_domain_events/1-from_use_case/src/contexts/shop/users/domain/User.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/02-from_where_publish_domain_events/1-from_use_case/src/contexts/shop/users/domain/User.ts -------------------------------------------------------------------------------- /02-from_where_publish_domain_events/1-from_use_case/src/contexts/shop/users/domain/UserEmail.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/02-from_where_publish_domain_events/1-from_use_case/src/contexts/shop/users/domain/UserEmail.ts -------------------------------------------------------------------------------- /02-from_where_publish_domain_events/1-from_use_case/src/contexts/shop/users/domain/UserId.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/02-from_where_publish_domain_events/1-from_use_case/src/contexts/shop/users/domain/UserId.ts -------------------------------------------------------------------------------- /02-from_where_publish_domain_events/1-from_use_case/src/contexts/shop/users/domain/UserName.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/02-from_where_publish_domain_events/1-from_use_case/src/contexts/shop/users/domain/UserName.ts -------------------------------------------------------------------------------- /02-from_where_publish_domain_events/1-from_use_case/tailwind.config.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/02-from_where_publish_domain_events/1-from_use_case/tailwind.config.ts -------------------------------------------------------------------------------- /02-from_where_publish_domain_events/1-from_use_case/tests/contexts/shop/users/domain/UserMother.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/02-from_where_publish_domain_events/1-from_use_case/tests/contexts/shop/users/domain/UserMother.ts -------------------------------------------------------------------------------- /02-from_where_publish_domain_events/1-from_use_case/tsconfig.json: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/02-from_where_publish_domain_events/1-from_use_case/tsconfig.json -------------------------------------------------------------------------------- /02-from_where_publish_domain_events/2-from_constructor/.editorconfig: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/02-from_where_publish_domain_events/2-from_constructor/.editorconfig -------------------------------------------------------------------------------- /02-from_where_publish_domain_events/2-from_constructor/.eslintrc.json: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/02-from_where_publish_domain_events/2-from_constructor/.eslintrc.json -------------------------------------------------------------------------------- /02-from_where_publish_domain_events/2-from_constructor/.gitignore: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/02-from_where_publish_domain_events/2-from_constructor/.gitignore -------------------------------------------------------------------------------- /02-from_where_publish_domain_events/2-from_constructor/Makefile: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /02-from_where_publish_domain_events/2-from_constructor/README.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/02-from_where_publish_domain_events/2-from_constructor/README.md -------------------------------------------------------------------------------- /02-from_where_publish_domain_events/2-from_constructor/databases/ecommerce.sql: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/02-from_where_publish_domain_events/2-from_constructor/databases/ecommerce.sql -------------------------------------------------------------------------------- /02-from_where_publish_domain_events/2-from_constructor/docker-compose.yml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/02-from_where_publish_domain_events/2-from_constructor/docker-compose.yml -------------------------------------------------------------------------------- /02-from_where_publish_domain_events/2-from_constructor/etc/http/seller_backoffice/product-GET.http: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/02-from_where_publish_domain_events/2-from_constructor/etc/http/seller_backoffice/product-GET.http -------------------------------------------------------------------------------- /02-from_where_publish_domain_events/2-from_constructor/etc/http/seller_backoffice/product-PUT.http: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/02-from_where_publish_domain_events/2-from_constructor/etc/http/seller_backoffice/product-PUT.http -------------------------------------------------------------------------------- /02-from_where_publish_domain_events/2-from_constructor/etc/http/seller_backoffice/products-GET.http: -------------------------------------------------------------------------------- 1 | GET http://localhost:3000/api/seller_backoffice/products 2 | -------------------------------------------------------------------------------- /02-from_where_publish_domain_events/2-from_constructor/etc/http/shop/product-GET.http: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/02-from_where_publish_domain_events/2-from_constructor/etc/http/shop/product-GET.http -------------------------------------------------------------------------------- /02-from_where_publish_domain_events/2-from_constructor/etc/http/shop/product_review-PUT.http: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/02-from_where_publish_domain_events/2-from_constructor/etc/http/shop/product_review-PUT.http -------------------------------------------------------------------------------- /02-from_where_publish_domain_events/2-from_constructor/etc/http/shop/product_reviews-GET.http: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/02-from_where_publish_domain_events/2-from_constructor/etc/http/shop/product_reviews-GET.http -------------------------------------------------------------------------------- /02-from_where_publish_domain_events/2-from_constructor/etc/http/shop/products-GET.http: -------------------------------------------------------------------------------- 1 | GET http://localhost:3000/api/shop/products 2 | -------------------------------------------------------------------------------- /02-from_where_publish_domain_events/2-from_constructor/etc/http/shop/user-GET.http: -------------------------------------------------------------------------------- 1 | GET http://localhost:3000/api/shop/users/1ec0b8ee-dbdc-48f6-ae5a-bfb99bee5e27 2 | -------------------------------------------------------------------------------- /02-from_where_publish_domain_events/2-from_constructor/etc/http/shop/user-PUT.http: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/02-from_where_publish_domain_events/2-from_constructor/etc/http/shop/user-PUT.http -------------------------------------------------------------------------------- /02-from_where_publish_domain_events/2-from_constructor/jest.config.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/02-from_where_publish_domain_events/2-from_constructor/jest.config.js -------------------------------------------------------------------------------- /02-from_where_publish_domain_events/2-from_constructor/next.config.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/02-from_where_publish_domain_events/2-from_constructor/next.config.js -------------------------------------------------------------------------------- /02-from_where_publish_domain_events/2-from_constructor/package-lock.json: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/02-from_where_publish_domain_events/2-from_constructor/package-lock.json -------------------------------------------------------------------------------- /02-from_where_publish_domain_events/2-from_constructor/package.json: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/02-from_where_publish_domain_events/2-from_constructor/package.json -------------------------------------------------------------------------------- /02-from_where_publish_domain_events/2-from_constructor/postcss.config.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/02-from_where_publish_domain_events/2-from_constructor/postcss.config.js -------------------------------------------------------------------------------- /02-from_where_publish_domain_events/2-from_constructor/public/codely.svg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/02-from_where_publish_domain_events/2-from_constructor/public/codely.svg -------------------------------------------------------------------------------- /02-from_where_publish_domain_events/2-from_constructor/src/app/api/shop/product_reviews/route.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/02-from_where_publish_domain_events/2-from_constructor/src/app/api/shop/product_reviews/route.ts -------------------------------------------------------------------------------- /02-from_where_publish_domain_events/2-from_constructor/src/app/api/shop/products/[id]/route.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/02-from_where_publish_domain_events/2-from_constructor/src/app/api/shop/products/[id]/route.ts -------------------------------------------------------------------------------- /02-from_where_publish_domain_events/2-from_constructor/src/app/api/shop/products/route.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/02-from_where_publish_domain_events/2-from_constructor/src/app/api/shop/products/route.ts -------------------------------------------------------------------------------- /02-from_where_publish_domain_events/2-from_constructor/src/app/api/shop/users/[id]/route.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/02-from_where_publish_domain_events/2-from_constructor/src/app/api/shop/users/[id]/route.ts -------------------------------------------------------------------------------- /02-from_where_publish_domain_events/2-from_constructor/src/contexts/shared/domain/Collection.ts: -------------------------------------------------------------------------------- 1 | export abstract class Collection { 2 | constructor(public readonly value: T[]) {} 3 | } 4 | -------------------------------------------------------------------------------- /02-from_where_publish_domain_events/2-from_constructor/src/contexts/shared/domain/DomainEvent.ts: -------------------------------------------------------------------------------- 1 | export class DomainEvent {} 2 | -------------------------------------------------------------------------------- /02-from_where_publish_domain_events/2-from_constructor/src/contexts/shared/domain/EventBus.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/02-from_where_publish_domain_events/2-from_constructor/src/contexts/shared/domain/EventBus.ts -------------------------------------------------------------------------------- /02-from_where_publish_domain_events/2-from_constructor/src/contexts/shared/domain/Identifier.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/02-from_where_publish_domain_events/2-from_constructor/src/contexts/shared/domain/Identifier.ts -------------------------------------------------------------------------------- /02-from_where_publish_domain_events/2-from_constructor/src/contexts/shared/domain/Money.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/02-from_where_publish_domain_events/2-from_constructor/src/contexts/shared/domain/Money.ts -------------------------------------------------------------------------------- /02-from_where_publish_domain_events/2-from_constructor/src/contexts/shop/users/domain/User.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/02-from_where_publish_domain_events/2-from_constructor/src/contexts/shop/users/domain/User.ts -------------------------------------------------------------------------------- /02-from_where_publish_domain_events/2-from_constructor/src/contexts/shop/users/domain/UserEmail.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/02-from_where_publish_domain_events/2-from_constructor/src/contexts/shop/users/domain/UserEmail.ts -------------------------------------------------------------------------------- /02-from_where_publish_domain_events/2-from_constructor/src/contexts/shop/users/domain/UserId.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/02-from_where_publish_domain_events/2-from_constructor/src/contexts/shop/users/domain/UserId.ts -------------------------------------------------------------------------------- /02-from_where_publish_domain_events/2-from_constructor/src/contexts/shop/users/domain/UserName.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/02-from_where_publish_domain_events/2-from_constructor/src/contexts/shop/users/domain/UserName.ts -------------------------------------------------------------------------------- /02-from_where_publish_domain_events/2-from_constructor/tailwind.config.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/02-from_where_publish_domain_events/2-from_constructor/tailwind.config.ts -------------------------------------------------------------------------------- /02-from_where_publish_domain_events/2-from_constructor/tsconfig.json: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/02-from_where_publish_domain_events/2-from_constructor/tsconfig.json -------------------------------------------------------------------------------- /02-from_where_publish_domain_events/3-registering_in_named_constructor/.editorconfig: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/02-from_where_publish_domain_events/3-registering_in_named_constructor/.editorconfig -------------------------------------------------------------------------------- /02-from_where_publish_domain_events/3-registering_in_named_constructor/.eslintrc.json: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/02-from_where_publish_domain_events/3-registering_in_named_constructor/.eslintrc.json -------------------------------------------------------------------------------- /02-from_where_publish_domain_events/3-registering_in_named_constructor/.gitignore: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/02-from_where_publish_domain_events/3-registering_in_named_constructor/.gitignore -------------------------------------------------------------------------------- /02-from_where_publish_domain_events/3-registering_in_named_constructor/Makefile: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /02-from_where_publish_domain_events/3-registering_in_named_constructor/README.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/02-from_where_publish_domain_events/3-registering_in_named_constructor/README.md -------------------------------------------------------------------------------- /02-from_where_publish_domain_events/3-registering_in_named_constructor/databases/ecommerce.sql: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/02-from_where_publish_domain_events/3-registering_in_named_constructor/databases/ecommerce.sql -------------------------------------------------------------------------------- /02-from_where_publish_domain_events/3-registering_in_named_constructor/docker-compose.yml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/02-from_where_publish_domain_events/3-registering_in_named_constructor/docker-compose.yml -------------------------------------------------------------------------------- /02-from_where_publish_domain_events/3-registering_in_named_constructor/etc/http/seller_backoffice/products-GET.http: -------------------------------------------------------------------------------- 1 | GET http://localhost:3000/api/seller_backoffice/products 2 | -------------------------------------------------------------------------------- /02-from_where_publish_domain_events/3-registering_in_named_constructor/etc/http/shop/products-GET.http: -------------------------------------------------------------------------------- 1 | GET http://localhost:3000/api/shop/products 2 | -------------------------------------------------------------------------------- /02-from_where_publish_domain_events/3-registering_in_named_constructor/etc/http/shop/user-GET.http: -------------------------------------------------------------------------------- 1 | GET http://localhost:3000/api/shop/users/1ec0b8ee-dbdc-48f6-ae5a-bfb99bee5e27 2 | -------------------------------------------------------------------------------- /02-from_where_publish_domain_events/3-registering_in_named_constructor/etc/http/shop/user-PUT.http: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/02-from_where_publish_domain_events/3-registering_in_named_constructor/etc/http/shop/user-PUT.http -------------------------------------------------------------------------------- /02-from_where_publish_domain_events/3-registering_in_named_constructor/jest.config.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/02-from_where_publish_domain_events/3-registering_in_named_constructor/jest.config.js -------------------------------------------------------------------------------- /02-from_where_publish_domain_events/3-registering_in_named_constructor/next.config.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/02-from_where_publish_domain_events/3-registering_in_named_constructor/next.config.js -------------------------------------------------------------------------------- /02-from_where_publish_domain_events/3-registering_in_named_constructor/package-lock.json: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/02-from_where_publish_domain_events/3-registering_in_named_constructor/package-lock.json -------------------------------------------------------------------------------- /02-from_where_publish_domain_events/3-registering_in_named_constructor/package.json: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/02-from_where_publish_domain_events/3-registering_in_named_constructor/package.json -------------------------------------------------------------------------------- /02-from_where_publish_domain_events/3-registering_in_named_constructor/postcss.config.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/02-from_where_publish_domain_events/3-registering_in_named_constructor/postcss.config.js -------------------------------------------------------------------------------- /02-from_where_publish_domain_events/3-registering_in_named_constructor/public/codely.svg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/02-from_where_publish_domain_events/3-registering_in_named_constructor/public/codely.svg -------------------------------------------------------------------------------- /02-from_where_publish_domain_events/3-registering_in_named_constructor/src/contexts/shared/domain/Collection.ts: -------------------------------------------------------------------------------- 1 | export abstract class Collection { 2 | constructor(public readonly value: T[]) {} 3 | } 4 | -------------------------------------------------------------------------------- /02-from_where_publish_domain_events/3-registering_in_named_constructor/src/contexts/shared/domain/DomainEvent.ts: -------------------------------------------------------------------------------- 1 | export class DomainEvent {} 2 | -------------------------------------------------------------------------------- /02-from_where_publish_domain_events/3-registering_in_named_constructor/tailwind.config.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/02-from_where_publish_domain_events/3-registering_in_named_constructor/tailwind.config.ts -------------------------------------------------------------------------------- /02-from_where_publish_domain_events/3-registering_in_named_constructor/tsconfig.json: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/02-from_where_publish_domain_events/3-registering_in_named_constructor/tsconfig.json -------------------------------------------------------------------------------- /02-from_where_publish_domain_events/4-event_bus_as_an_argument/.editorconfig: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/02-from_where_publish_domain_events/4-event_bus_as_an_argument/.editorconfig -------------------------------------------------------------------------------- /02-from_where_publish_domain_events/4-event_bus_as_an_argument/.eslintrc.json: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/02-from_where_publish_domain_events/4-event_bus_as_an_argument/.eslintrc.json -------------------------------------------------------------------------------- /02-from_where_publish_domain_events/4-event_bus_as_an_argument/.gitignore: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/02-from_where_publish_domain_events/4-event_bus_as_an_argument/.gitignore -------------------------------------------------------------------------------- /02-from_where_publish_domain_events/4-event_bus_as_an_argument/Makefile: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /02-from_where_publish_domain_events/4-event_bus_as_an_argument/README.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/02-from_where_publish_domain_events/4-event_bus_as_an_argument/README.md -------------------------------------------------------------------------------- /02-from_where_publish_domain_events/4-event_bus_as_an_argument/databases/ecommerce.sql: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/02-from_where_publish_domain_events/4-event_bus_as_an_argument/databases/ecommerce.sql -------------------------------------------------------------------------------- /02-from_where_publish_domain_events/4-event_bus_as_an_argument/docker-compose.yml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/02-from_where_publish_domain_events/4-event_bus_as_an_argument/docker-compose.yml -------------------------------------------------------------------------------- /02-from_where_publish_domain_events/4-event_bus_as_an_argument/etc/http/seller_backoffice/products-GET.http: -------------------------------------------------------------------------------- 1 | GET http://localhost:3000/api/seller_backoffice/products 2 | -------------------------------------------------------------------------------- /02-from_where_publish_domain_events/4-event_bus_as_an_argument/etc/http/shop/product-GET.http: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/02-from_where_publish_domain_events/4-event_bus_as_an_argument/etc/http/shop/product-GET.http -------------------------------------------------------------------------------- /02-from_where_publish_domain_events/4-event_bus_as_an_argument/etc/http/shop/products-GET.http: -------------------------------------------------------------------------------- 1 | GET http://localhost:3000/api/shop/products 2 | -------------------------------------------------------------------------------- /02-from_where_publish_domain_events/4-event_bus_as_an_argument/etc/http/shop/user-GET.http: -------------------------------------------------------------------------------- 1 | GET http://localhost:3000/api/shop/users/1ec0b8ee-dbdc-48f6-ae5a-bfb99bee5e27 2 | -------------------------------------------------------------------------------- /02-from_where_publish_domain_events/4-event_bus_as_an_argument/etc/http/shop/user-PUT.http: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/02-from_where_publish_domain_events/4-event_bus_as_an_argument/etc/http/shop/user-PUT.http -------------------------------------------------------------------------------- /02-from_where_publish_domain_events/4-event_bus_as_an_argument/jest.config.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/02-from_where_publish_domain_events/4-event_bus_as_an_argument/jest.config.js -------------------------------------------------------------------------------- /02-from_where_publish_domain_events/4-event_bus_as_an_argument/next.config.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/02-from_where_publish_domain_events/4-event_bus_as_an_argument/next.config.js -------------------------------------------------------------------------------- /02-from_where_publish_domain_events/4-event_bus_as_an_argument/package-lock.json: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/02-from_where_publish_domain_events/4-event_bus_as_an_argument/package-lock.json -------------------------------------------------------------------------------- /02-from_where_publish_domain_events/4-event_bus_as_an_argument/package.json: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/02-from_where_publish_domain_events/4-event_bus_as_an_argument/package.json -------------------------------------------------------------------------------- /02-from_where_publish_domain_events/4-event_bus_as_an_argument/postcss.config.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/02-from_where_publish_domain_events/4-event_bus_as_an_argument/postcss.config.js -------------------------------------------------------------------------------- /02-from_where_publish_domain_events/4-event_bus_as_an_argument/public/codely.svg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/02-from_where_publish_domain_events/4-event_bus_as_an_argument/public/codely.svg -------------------------------------------------------------------------------- /02-from_where_publish_domain_events/4-event_bus_as_an_argument/src/app/api/shop/products/route.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/02-from_where_publish_domain_events/4-event_bus_as_an_argument/src/app/api/shop/products/route.ts -------------------------------------------------------------------------------- /02-from_where_publish_domain_events/4-event_bus_as_an_argument/src/contexts/shared/domain/Collection.ts: -------------------------------------------------------------------------------- 1 | export abstract class Collection { 2 | constructor(public readonly value: T[]) {} 3 | } 4 | -------------------------------------------------------------------------------- /02-from_where_publish_domain_events/4-event_bus_as_an_argument/src/contexts/shared/domain/DomainEvent.ts: -------------------------------------------------------------------------------- 1 | export class DomainEvent {} 2 | -------------------------------------------------------------------------------- /02-from_where_publish_domain_events/4-event_bus_as_an_argument/src/contexts/shared/domain/Money.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/02-from_where_publish_domain_events/4-event_bus_as_an_argument/src/contexts/shared/domain/Money.ts -------------------------------------------------------------------------------- /02-from_where_publish_domain_events/4-event_bus_as_an_argument/tailwind.config.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/02-from_where_publish_domain_events/4-event_bus_as_an_argument/tailwind.config.ts -------------------------------------------------------------------------------- /02-from_where_publish_domain_events/4-event_bus_as_an_argument/tsconfig.json: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/02-from_where_publish_domain_events/4-event_bus_as_an_argument/tsconfig.json -------------------------------------------------------------------------------- /03-domain_events_design/1-granularity_in_domain_events/1-user_updated_domain_event/.editorconfig: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/03-domain_events_design/1-granularity_in_domain_events/1-user_updated_domain_event/.editorconfig -------------------------------------------------------------------------------- /03-domain_events_design/1-granularity_in_domain_events/1-user_updated_domain_event/.eslintrc.json: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/03-domain_events_design/1-granularity_in_domain_events/1-user_updated_domain_event/.eslintrc.json -------------------------------------------------------------------------------- /03-domain_events_design/1-granularity_in_domain_events/1-user_updated_domain_event/.gitignore: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/03-domain_events_design/1-granularity_in_domain_events/1-user_updated_domain_event/.gitignore -------------------------------------------------------------------------------- /03-domain_events_design/1-granularity_in_domain_events/1-user_updated_domain_event/Makefile: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /03-domain_events_design/1-granularity_in_domain_events/1-user_updated_domain_event/README.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/03-domain_events_design/1-granularity_in_domain_events/1-user_updated_domain_event/README.md -------------------------------------------------------------------------------- /03-domain_events_design/1-granularity_in_domain_events/1-user_updated_domain_event/etc/http/seller_backoffice/products-GET.http: -------------------------------------------------------------------------------- 1 | GET http://localhost:3000/api/seller_backoffice/products 2 | -------------------------------------------------------------------------------- /03-domain_events_design/1-granularity_in_domain_events/1-user_updated_domain_event/etc/http/shop/products-GET.http: -------------------------------------------------------------------------------- 1 | GET http://localhost:3000/api/shop/products 2 | -------------------------------------------------------------------------------- /03-domain_events_design/1-granularity_in_domain_events/1-user_updated_domain_event/etc/http/shop/user-GET.http: -------------------------------------------------------------------------------- 1 | GET http://localhost:3000/api/shop/users/1ec0b8ee-dbdc-48f6-ae5a-bfb99bee5e27 2 | -------------------------------------------------------------------------------- /03-domain_events_design/1-granularity_in_domain_events/1-user_updated_domain_event/jest.config.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/03-domain_events_design/1-granularity_in_domain_events/1-user_updated_domain_event/jest.config.js -------------------------------------------------------------------------------- /03-domain_events_design/1-granularity_in_domain_events/1-user_updated_domain_event/next.config.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/03-domain_events_design/1-granularity_in_domain_events/1-user_updated_domain_event/next.config.js -------------------------------------------------------------------------------- /03-domain_events_design/1-granularity_in_domain_events/1-user_updated_domain_event/package.json: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/03-domain_events_design/1-granularity_in_domain_events/1-user_updated_domain_event/package.json -------------------------------------------------------------------------------- /03-domain_events_design/1-granularity_in_domain_events/1-user_updated_domain_event/src/contexts/shared/domain/Collection.ts: -------------------------------------------------------------------------------- 1 | export abstract class Collection { 2 | constructor(public readonly value: T[]) {} 3 | } 4 | -------------------------------------------------------------------------------- /03-domain_events_design/1-granularity_in_domain_events/1-user_updated_domain_event/src/contexts/shared/domain/DomainEvent.ts: -------------------------------------------------------------------------------- 1 | export class DomainEvent {} 2 | -------------------------------------------------------------------------------- /03-domain_events_design/1-granularity_in_domain_events/1-user_updated_domain_event/tsconfig.json: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/03-domain_events_design/1-granularity_in_domain_events/1-user_updated_domain_event/tsconfig.json -------------------------------------------------------------------------------- /03-domain_events_design/1-granularity_in_domain_events/2-user_email_updated_domain_event/Makefile: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /03-domain_events_design/1-granularity_in_domain_events/2-user_email_updated_domain_event/README.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/03-domain_events_design/1-granularity_in_domain_events/2-user_email_updated_domain_event/README.md -------------------------------------------------------------------------------- /03-domain_events_design/1-granularity_in_domain_events/2-user_email_updated_domain_event/etc/http/seller_backoffice/products-GET.http: -------------------------------------------------------------------------------- 1 | GET http://localhost:3000/api/seller_backoffice/products 2 | -------------------------------------------------------------------------------- /03-domain_events_design/1-granularity_in_domain_events/2-user_email_updated_domain_event/etc/http/shop/products-GET.http: -------------------------------------------------------------------------------- 1 | GET http://localhost:3000/api/shop/products 2 | -------------------------------------------------------------------------------- /03-domain_events_design/1-granularity_in_domain_events/2-user_email_updated_domain_event/etc/http/shop/user-GET.http: -------------------------------------------------------------------------------- 1 | GET http://localhost:3000/api/shop/users/1ec0b8ee-dbdc-48f6-ae5a-bfb99bee5e27 2 | -------------------------------------------------------------------------------- /03-domain_events_design/1-granularity_in_domain_events/2-user_email_updated_domain_event/src/contexts/shared/domain/Collection.ts: -------------------------------------------------------------------------------- 1 | export abstract class Collection { 2 | constructor(public readonly value: T[]) {} 3 | } 4 | -------------------------------------------------------------------------------- /03-domain_events_design/1-granularity_in_domain_events/2-user_email_updated_domain_event/src/contexts/shared/domain/DomainEvent.ts: -------------------------------------------------------------------------------- 1 | export class DomainEvent {} 2 | -------------------------------------------------------------------------------- /03-domain_events_design/2-semantics_in_domain_events/1-user_status_updated_domain_event/.gitignore: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/03-domain_events_design/2-semantics_in_domain_events/1-user_status_updated_domain_event/.gitignore -------------------------------------------------------------------------------- /03-domain_events_design/2-semantics_in_domain_events/1-user_status_updated_domain_event/Makefile: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /03-domain_events_design/2-semantics_in_domain_events/1-user_status_updated_domain_event/README.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/03-domain_events_design/2-semantics_in_domain_events/1-user_status_updated_domain_event/README.md -------------------------------------------------------------------------------- /03-domain_events_design/2-semantics_in_domain_events/1-user_status_updated_domain_event/etc/http/seller_backoffice/products-GET.http: -------------------------------------------------------------------------------- 1 | GET http://localhost:3000/api/seller_backoffice/products 2 | -------------------------------------------------------------------------------- /03-domain_events_design/2-semantics_in_domain_events/1-user_status_updated_domain_event/etc/http/shop/products-GET.http: -------------------------------------------------------------------------------- 1 | GET http://localhost:3000/api/shop/products 2 | -------------------------------------------------------------------------------- /03-domain_events_design/2-semantics_in_domain_events/1-user_status_updated_domain_event/etc/http/shop/user-GET.http: -------------------------------------------------------------------------------- 1 | GET http://localhost:3000/api/shop/users/1ec0b8ee-dbdc-48f6-ae5a-bfb99bee5e27 2 | -------------------------------------------------------------------------------- /03-domain_events_design/2-semantics_in_domain_events/1-user_status_updated_domain_event/src/contexts/shared/domain/Collection.ts: -------------------------------------------------------------------------------- 1 | export abstract class Collection { 2 | constructor(public readonly value: T[]) {} 3 | } 4 | -------------------------------------------------------------------------------- /03-domain_events_design/2-semantics_in_domain_events/1-user_status_updated_domain_event/src/contexts/shared/domain/DomainEvent.ts: -------------------------------------------------------------------------------- 1 | export class DomainEvent {} 2 | -------------------------------------------------------------------------------- /03-domain_events_design/2-semantics_in_domain_events/2-user_archived_domain_event/.editorconfig: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/03-domain_events_design/2-semantics_in_domain_events/2-user_archived_domain_event/.editorconfig -------------------------------------------------------------------------------- /03-domain_events_design/2-semantics_in_domain_events/2-user_archived_domain_event/.eslintrc.json: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/03-domain_events_design/2-semantics_in_domain_events/2-user_archived_domain_event/.eslintrc.json -------------------------------------------------------------------------------- /03-domain_events_design/2-semantics_in_domain_events/2-user_archived_domain_event/.gitignore: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/03-domain_events_design/2-semantics_in_domain_events/2-user_archived_domain_event/.gitignore -------------------------------------------------------------------------------- /03-domain_events_design/2-semantics_in_domain_events/2-user_archived_domain_event/Makefile: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /03-domain_events_design/2-semantics_in_domain_events/2-user_archived_domain_event/README.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/03-domain_events_design/2-semantics_in_domain_events/2-user_archived_domain_event/README.md -------------------------------------------------------------------------------- /03-domain_events_design/2-semantics_in_domain_events/2-user_archived_domain_event/etc/http/seller_backoffice/products-GET.http: -------------------------------------------------------------------------------- 1 | GET http://localhost:3000/api/seller_backoffice/products 2 | -------------------------------------------------------------------------------- /03-domain_events_design/2-semantics_in_domain_events/2-user_archived_domain_event/etc/http/shop/products-GET.http: -------------------------------------------------------------------------------- 1 | GET http://localhost:3000/api/shop/products 2 | -------------------------------------------------------------------------------- /03-domain_events_design/2-semantics_in_domain_events/2-user_archived_domain_event/etc/http/shop/user-GET.http: -------------------------------------------------------------------------------- 1 | GET http://localhost:3000/api/shop/users/1ec0b8ee-dbdc-48f6-ae5a-bfb99bee5e27 2 | -------------------------------------------------------------------------------- /03-domain_events_design/2-semantics_in_domain_events/2-user_archived_domain_event/jest.config.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/03-domain_events_design/2-semantics_in_domain_events/2-user_archived_domain_event/jest.config.js -------------------------------------------------------------------------------- /03-domain_events_design/2-semantics_in_domain_events/2-user_archived_domain_event/next.config.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/03-domain_events_design/2-semantics_in_domain_events/2-user_archived_domain_event/next.config.js -------------------------------------------------------------------------------- /03-domain_events_design/2-semantics_in_domain_events/2-user_archived_domain_event/package.json: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/03-domain_events_design/2-semantics_in_domain_events/2-user_archived_domain_event/package.json -------------------------------------------------------------------------------- /03-domain_events_design/2-semantics_in_domain_events/2-user_archived_domain_event/src/contexts/shared/domain/Collection.ts: -------------------------------------------------------------------------------- 1 | export abstract class Collection { 2 | constructor(public readonly value: T[]) {} 3 | } 4 | -------------------------------------------------------------------------------- /03-domain_events_design/2-semantics_in_domain_events/2-user_archived_domain_event/src/contexts/shared/domain/DomainEvent.ts: -------------------------------------------------------------------------------- 1 | export class DomainEvent {} 2 | -------------------------------------------------------------------------------- /03-domain_events_design/2-semantics_in_domain_events/2-user_archived_domain_event/tsconfig.json: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/03-domain_events_design/2-semantics_in_domain_events/2-user_archived_domain_event/tsconfig.json -------------------------------------------------------------------------------- /04-react_to_domain_events/1-subscriber_listen_one_event/.editorconfig: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/04-react_to_domain_events/1-subscriber_listen_one_event/.editorconfig -------------------------------------------------------------------------------- /04-react_to_domain_events/1-subscriber_listen_one_event/.eslintrc.json: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/04-react_to_domain_events/1-subscriber_listen_one_event/.eslintrc.json -------------------------------------------------------------------------------- /04-react_to_domain_events/1-subscriber_listen_one_event/.gitignore: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/04-react_to_domain_events/1-subscriber_listen_one_event/.gitignore -------------------------------------------------------------------------------- /04-react_to_domain_events/1-subscriber_listen_one_event/Makefile: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /04-react_to_domain_events/1-subscriber_listen_one_event/README.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/04-react_to_domain_events/1-subscriber_listen_one_event/README.md -------------------------------------------------------------------------------- /04-react_to_domain_events/1-subscriber_listen_one_event/databases/ecommerce.sql: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/04-react_to_domain_events/1-subscriber_listen_one_event/databases/ecommerce.sql -------------------------------------------------------------------------------- /04-react_to_domain_events/1-subscriber_listen_one_event/docker-compose.yml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/04-react_to_domain_events/1-subscriber_listen_one_event/docker-compose.yml -------------------------------------------------------------------------------- /04-react_to_domain_events/1-subscriber_listen_one_event/etc/http/seller_backoffice/products-GET.http: -------------------------------------------------------------------------------- 1 | GET http://localhost:3000/api/seller_backoffice/products 2 | -------------------------------------------------------------------------------- /04-react_to_domain_events/1-subscriber_listen_one_event/etc/http/shop/product-GET.http: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/04-react_to_domain_events/1-subscriber_listen_one_event/etc/http/shop/product-GET.http -------------------------------------------------------------------------------- /04-react_to_domain_events/1-subscriber_listen_one_event/etc/http/shop/product_review-PUT.http: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/04-react_to_domain_events/1-subscriber_listen_one_event/etc/http/shop/product_review-PUT.http -------------------------------------------------------------------------------- /04-react_to_domain_events/1-subscriber_listen_one_event/etc/http/shop/product_reviews-GET.http: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/04-react_to_domain_events/1-subscriber_listen_one_event/etc/http/shop/product_reviews-GET.http -------------------------------------------------------------------------------- /04-react_to_domain_events/1-subscriber_listen_one_event/etc/http/shop/products-GET.http: -------------------------------------------------------------------------------- 1 | GET http://localhost:3000/api/shop/products 2 | -------------------------------------------------------------------------------- /04-react_to_domain_events/1-subscriber_listen_one_event/etc/http/shop/user-GET.http: -------------------------------------------------------------------------------- 1 | GET http://localhost:3000/api/shop/users/1ec0b8ee-dbdc-48f6-ae5a-bfb99bee5e27 2 | -------------------------------------------------------------------------------- /04-react_to_domain_events/1-subscriber_listen_one_event/etc/http/shop/user-PUT.http: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/04-react_to_domain_events/1-subscriber_listen_one_event/etc/http/shop/user-PUT.http -------------------------------------------------------------------------------- /04-react_to_domain_events/1-subscriber_listen_one_event/jest.config.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/04-react_to_domain_events/1-subscriber_listen_one_event/jest.config.js -------------------------------------------------------------------------------- /04-react_to_domain_events/1-subscriber_listen_one_event/next.config.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/04-react_to_domain_events/1-subscriber_listen_one_event/next.config.js -------------------------------------------------------------------------------- /04-react_to_domain_events/1-subscriber_listen_one_event/package-lock.json: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/04-react_to_domain_events/1-subscriber_listen_one_event/package-lock.json -------------------------------------------------------------------------------- /04-react_to_domain_events/1-subscriber_listen_one_event/package.json: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/04-react_to_domain_events/1-subscriber_listen_one_event/package.json -------------------------------------------------------------------------------- /04-react_to_domain_events/1-subscriber_listen_one_event/postcss.config.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/04-react_to_domain_events/1-subscriber_listen_one_event/postcss.config.js -------------------------------------------------------------------------------- /04-react_to_domain_events/1-subscriber_listen_one_event/public/codely.svg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/04-react_to_domain_events/1-subscriber_listen_one_event/public/codely.svg -------------------------------------------------------------------------------- /04-react_to_domain_events/1-subscriber_listen_one_event/src/app/api/shop/product_reviews/route.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/04-react_to_domain_events/1-subscriber_listen_one_event/src/app/api/shop/product_reviews/route.ts -------------------------------------------------------------------------------- /04-react_to_domain_events/1-subscriber_listen_one_event/src/app/api/shop/products/[id]/route.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/04-react_to_domain_events/1-subscriber_listen_one_event/src/app/api/shop/products/[id]/route.ts -------------------------------------------------------------------------------- /04-react_to_domain_events/1-subscriber_listen_one_event/src/app/api/shop/products/route.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/04-react_to_domain_events/1-subscriber_listen_one_event/src/app/api/shop/products/route.ts -------------------------------------------------------------------------------- /04-react_to_domain_events/1-subscriber_listen_one_event/src/app/api/shop/users/[id]/route.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/04-react_to_domain_events/1-subscriber_listen_one_event/src/app/api/shop/users/[id]/route.ts -------------------------------------------------------------------------------- /04-react_to_domain_events/1-subscriber_listen_one_event/src/contexts/shared/domain/Collection.ts: -------------------------------------------------------------------------------- 1 | export abstract class Collection { 2 | constructor(public readonly value: T[]) {} 3 | } 4 | -------------------------------------------------------------------------------- /04-react_to_domain_events/1-subscriber_listen_one_event/src/contexts/shared/domain/DomainEvent.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/04-react_to_domain_events/1-subscriber_listen_one_event/src/contexts/shared/domain/DomainEvent.ts -------------------------------------------------------------------------------- /04-react_to_domain_events/1-subscriber_listen_one_event/src/contexts/shared/domain/EmailAddress.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/04-react_to_domain_events/1-subscriber_listen_one_event/src/contexts/shared/domain/EmailAddress.ts -------------------------------------------------------------------------------- /04-react_to_domain_events/1-subscriber_listen_one_event/src/contexts/shared/domain/EventBus.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/04-react_to_domain_events/1-subscriber_listen_one_event/src/contexts/shared/domain/EventBus.ts -------------------------------------------------------------------------------- /04-react_to_domain_events/1-subscriber_listen_one_event/src/contexts/shared/domain/Identifier.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/04-react_to_domain_events/1-subscriber_listen_one_event/src/contexts/shared/domain/Identifier.ts -------------------------------------------------------------------------------- /04-react_to_domain_events/1-subscriber_listen_one_event/src/contexts/shared/domain/Money.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/04-react_to_domain_events/1-subscriber_listen_one_event/src/contexts/shared/domain/Money.ts -------------------------------------------------------------------------------- /04-react_to_domain_events/1-subscriber_listen_one_event/src/contexts/shop/users/domain/User.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/04-react_to_domain_events/1-subscriber_listen_one_event/src/contexts/shop/users/domain/User.ts -------------------------------------------------------------------------------- /04-react_to_domain_events/1-subscriber_listen_one_event/src/contexts/shop/users/domain/UserId.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/04-react_to_domain_events/1-subscriber_listen_one_event/src/contexts/shop/users/domain/UserId.ts -------------------------------------------------------------------------------- /04-react_to_domain_events/1-subscriber_listen_one_event/src/contexts/shop/users/domain/UserName.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/04-react_to_domain_events/1-subscriber_listen_one_event/src/contexts/shop/users/domain/UserName.ts -------------------------------------------------------------------------------- /04-react_to_domain_events/1-subscriber_listen_one_event/tailwind.config.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/04-react_to_domain_events/1-subscriber_listen_one_event/tailwind.config.ts -------------------------------------------------------------------------------- /04-react_to_domain_events/1-subscriber_listen_one_event/tests/contexts/shared/domain/EnumMother.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/04-react_to_domain_events/1-subscriber_listen_one_event/tests/contexts/shared/domain/EnumMother.ts -------------------------------------------------------------------------------- /04-react_to_domain_events/1-subscriber_listen_one_event/tsconfig.json: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/04-react_to_domain_events/1-subscriber_listen_one_event/tsconfig.json -------------------------------------------------------------------------------- /04-react_to_domain_events/2-test_subscriber/.editorconfig: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/04-react_to_domain_events/2-test_subscriber/.editorconfig -------------------------------------------------------------------------------- /04-react_to_domain_events/2-test_subscriber/.eslintrc.json: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/04-react_to_domain_events/2-test_subscriber/.eslintrc.json -------------------------------------------------------------------------------- /04-react_to_domain_events/2-test_subscriber/.gitignore: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/04-react_to_domain_events/2-test_subscriber/.gitignore -------------------------------------------------------------------------------- /04-react_to_domain_events/2-test_subscriber/Makefile: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /04-react_to_domain_events/2-test_subscriber/README.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/04-react_to_domain_events/2-test_subscriber/README.md -------------------------------------------------------------------------------- /04-react_to_domain_events/2-test_subscriber/databases/ecommerce.sql: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/04-react_to_domain_events/2-test_subscriber/databases/ecommerce.sql -------------------------------------------------------------------------------- /04-react_to_domain_events/2-test_subscriber/docker-compose.yml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/04-react_to_domain_events/2-test_subscriber/docker-compose.yml -------------------------------------------------------------------------------- /04-react_to_domain_events/2-test_subscriber/etc/http/seller_backoffice/product-GET.http: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/04-react_to_domain_events/2-test_subscriber/etc/http/seller_backoffice/product-GET.http -------------------------------------------------------------------------------- /04-react_to_domain_events/2-test_subscriber/etc/http/seller_backoffice/product-PUT.http: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/04-react_to_domain_events/2-test_subscriber/etc/http/seller_backoffice/product-PUT.http -------------------------------------------------------------------------------- /04-react_to_domain_events/2-test_subscriber/etc/http/seller_backoffice/products-GET.http: -------------------------------------------------------------------------------- 1 | GET http://localhost:3000/api/seller_backoffice/products 2 | -------------------------------------------------------------------------------- /04-react_to_domain_events/2-test_subscriber/etc/http/shop/product-GET.http: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/04-react_to_domain_events/2-test_subscriber/etc/http/shop/product-GET.http -------------------------------------------------------------------------------- /04-react_to_domain_events/2-test_subscriber/etc/http/shop/product_review-PUT.http: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/04-react_to_domain_events/2-test_subscriber/etc/http/shop/product_review-PUT.http -------------------------------------------------------------------------------- /04-react_to_domain_events/2-test_subscriber/etc/http/shop/product_reviews-GET.http: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/04-react_to_domain_events/2-test_subscriber/etc/http/shop/product_reviews-GET.http -------------------------------------------------------------------------------- /04-react_to_domain_events/2-test_subscriber/etc/http/shop/products-GET.http: -------------------------------------------------------------------------------- 1 | GET http://localhost:3000/api/shop/products 2 | -------------------------------------------------------------------------------- /04-react_to_domain_events/2-test_subscriber/etc/http/shop/user-GET.http: -------------------------------------------------------------------------------- 1 | GET http://localhost:3000/api/shop/users/1ec0b8ee-dbdc-48f6-ae5a-bfb99bee5e27 2 | -------------------------------------------------------------------------------- /04-react_to_domain_events/2-test_subscriber/etc/http/shop/user-PUT.http: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/04-react_to_domain_events/2-test_subscriber/etc/http/shop/user-PUT.http -------------------------------------------------------------------------------- /04-react_to_domain_events/2-test_subscriber/jest.config.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/04-react_to_domain_events/2-test_subscriber/jest.config.js -------------------------------------------------------------------------------- /04-react_to_domain_events/2-test_subscriber/next.config.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/04-react_to_domain_events/2-test_subscriber/next.config.js -------------------------------------------------------------------------------- /04-react_to_domain_events/2-test_subscriber/package-lock.json: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/04-react_to_domain_events/2-test_subscriber/package-lock.json -------------------------------------------------------------------------------- /04-react_to_domain_events/2-test_subscriber/package.json: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/04-react_to_domain_events/2-test_subscriber/package.json -------------------------------------------------------------------------------- /04-react_to_domain_events/2-test_subscriber/postcss.config.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/04-react_to_domain_events/2-test_subscriber/postcss.config.js -------------------------------------------------------------------------------- /04-react_to_domain_events/2-test_subscriber/public/codely.svg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/04-react_to_domain_events/2-test_subscriber/public/codely.svg -------------------------------------------------------------------------------- /04-react_to_domain_events/2-test_subscriber/src/app/api/seller_backoffice/products/[id]/route.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/04-react_to_domain_events/2-test_subscriber/src/app/api/seller_backoffice/products/[id]/route.ts -------------------------------------------------------------------------------- /04-react_to_domain_events/2-test_subscriber/src/app/api/seller_backoffice/products/route.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/04-react_to_domain_events/2-test_subscriber/src/app/api/seller_backoffice/products/route.ts -------------------------------------------------------------------------------- /04-react_to_domain_events/2-test_subscriber/src/app/api/shop/product_reviews/[id]/route.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/04-react_to_domain_events/2-test_subscriber/src/app/api/shop/product_reviews/[id]/route.ts -------------------------------------------------------------------------------- /04-react_to_domain_events/2-test_subscriber/src/app/api/shop/product_reviews/route.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/04-react_to_domain_events/2-test_subscriber/src/app/api/shop/product_reviews/route.ts -------------------------------------------------------------------------------- /04-react_to_domain_events/2-test_subscriber/src/app/api/shop/products/[id]/route.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/04-react_to_domain_events/2-test_subscriber/src/app/api/shop/products/[id]/route.ts -------------------------------------------------------------------------------- /04-react_to_domain_events/2-test_subscriber/src/app/api/shop/products/route.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/04-react_to_domain_events/2-test_subscriber/src/app/api/shop/products/route.ts -------------------------------------------------------------------------------- /04-react_to_domain_events/2-test_subscriber/src/app/api/shop/users/[id]/route.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/04-react_to_domain_events/2-test_subscriber/src/app/api/shop/users/[id]/route.ts -------------------------------------------------------------------------------- /04-react_to_domain_events/2-test_subscriber/src/contexts/retention/email/domain/Email.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/04-react_to_domain_events/2-test_subscriber/src/contexts/retention/email/domain/Email.ts -------------------------------------------------------------------------------- /04-react_to_domain_events/2-test_subscriber/src/contexts/retention/email/domain/EmailBody.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/04-react_to_domain_events/2-test_subscriber/src/contexts/retention/email/domain/EmailBody.ts -------------------------------------------------------------------------------- /04-react_to_domain_events/2-test_subscriber/src/contexts/retention/email/domain/EmailId.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/04-react_to_domain_events/2-test_subscriber/src/contexts/retention/email/domain/EmailId.ts -------------------------------------------------------------------------------- /04-react_to_domain_events/2-test_subscriber/src/contexts/retention/email/domain/EmailSender.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/04-react_to_domain_events/2-test_subscriber/src/contexts/retention/email/domain/EmailSender.ts -------------------------------------------------------------------------------- /04-react_to_domain_events/2-test_subscriber/src/contexts/retention/email/domain/WelcomeEmail.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/04-react_to_domain_events/2-test_subscriber/src/contexts/retention/email/domain/WelcomeEmail.ts -------------------------------------------------------------------------------- /04-react_to_domain_events/2-test_subscriber/src/contexts/shared/domain/AggregateRoot.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/04-react_to_domain_events/2-test_subscriber/src/contexts/shared/domain/AggregateRoot.ts -------------------------------------------------------------------------------- /04-react_to_domain_events/2-test_subscriber/src/contexts/shared/domain/Collection.ts: -------------------------------------------------------------------------------- 1 | export abstract class Collection { 2 | constructor(public readonly value: T[]) {} 3 | } 4 | -------------------------------------------------------------------------------- /04-react_to_domain_events/2-test_subscriber/src/contexts/shared/domain/DomainEvent.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/04-react_to_domain_events/2-test_subscriber/src/contexts/shared/domain/DomainEvent.ts -------------------------------------------------------------------------------- /04-react_to_domain_events/2-test_subscriber/src/contexts/shared/domain/DomainEventName.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/04-react_to_domain_events/2-test_subscriber/src/contexts/shared/domain/DomainEventName.ts -------------------------------------------------------------------------------- /04-react_to_domain_events/2-test_subscriber/src/contexts/shared/domain/DomainEventSubscriber.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/04-react_to_domain_events/2-test_subscriber/src/contexts/shared/domain/DomainEventSubscriber.ts -------------------------------------------------------------------------------- /04-react_to_domain_events/2-test_subscriber/src/contexts/shared/domain/EmailAddress.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/04-react_to_domain_events/2-test_subscriber/src/contexts/shared/domain/EmailAddress.ts -------------------------------------------------------------------------------- /04-react_to_domain_events/2-test_subscriber/src/contexts/shared/domain/EventBus.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/04-react_to_domain_events/2-test_subscriber/src/contexts/shared/domain/EventBus.ts -------------------------------------------------------------------------------- /04-react_to_domain_events/2-test_subscriber/src/contexts/shared/domain/Identifier.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/04-react_to_domain_events/2-test_subscriber/src/contexts/shared/domain/Identifier.ts -------------------------------------------------------------------------------- /04-react_to_domain_events/2-test_subscriber/src/contexts/shared/domain/Money.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/04-react_to_domain_events/2-test_subscriber/src/contexts/shared/domain/Money.ts -------------------------------------------------------------------------------- /04-react_to_domain_events/2-test_subscriber/src/contexts/shared/domain/StringValueObject.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/04-react_to_domain_events/2-test_subscriber/src/contexts/shared/domain/StringValueObject.ts -------------------------------------------------------------------------------- /04-react_to_domain_events/2-test_subscriber/src/contexts/shared/domain/UuidGenerator.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/04-react_to_domain_events/2-test_subscriber/src/contexts/shared/domain/UuidGenerator.ts -------------------------------------------------------------------------------- /04-react_to_domain_events/2-test_subscriber/src/contexts/shop/products/domain/Product.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/04-react_to_domain_events/2-test_subscriber/src/contexts/shop/products/domain/Product.ts -------------------------------------------------------------------------------- /04-react_to_domain_events/2-test_subscriber/src/contexts/shop/products/domain/ProductId.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/04-react_to_domain_events/2-test_subscriber/src/contexts/shop/products/domain/ProductId.ts -------------------------------------------------------------------------------- /04-react_to_domain_events/2-test_subscriber/src/contexts/shop/products/domain/ProductImageUrl.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/04-react_to_domain_events/2-test_subscriber/src/contexts/shop/products/domain/ProductImageUrl.ts -------------------------------------------------------------------------------- /04-react_to_domain_events/2-test_subscriber/src/contexts/shop/products/domain/ProductImageUrls.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/04-react_to_domain_events/2-test_subscriber/src/contexts/shop/products/domain/ProductImageUrls.ts -------------------------------------------------------------------------------- /04-react_to_domain_events/2-test_subscriber/src/contexts/shop/products/domain/ProductName.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/04-react_to_domain_events/2-test_subscriber/src/contexts/shop/products/domain/ProductName.ts -------------------------------------------------------------------------------- /04-react_to_domain_events/2-test_subscriber/src/contexts/shop/products/domain/ProductRating.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/04-react_to_domain_events/2-test_subscriber/src/contexts/shop/products/domain/ProductRating.ts -------------------------------------------------------------------------------- /04-react_to_domain_events/2-test_subscriber/src/contexts/shop/products/domain/ProductRepository.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/04-react_to_domain_events/2-test_subscriber/src/contexts/shop/products/domain/ProductRepository.ts -------------------------------------------------------------------------------- /04-react_to_domain_events/2-test_subscriber/src/contexts/shop/users/application/find/UserFinder.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/04-react_to_domain_events/2-test_subscriber/src/contexts/shop/users/application/find/UserFinder.ts -------------------------------------------------------------------------------- /04-react_to_domain_events/2-test_subscriber/src/contexts/shop/users/domain/User.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/04-react_to_domain_events/2-test_subscriber/src/contexts/shop/users/domain/User.ts -------------------------------------------------------------------------------- /04-react_to_domain_events/2-test_subscriber/src/contexts/shop/users/domain/UserDoesNotExist.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/04-react_to_domain_events/2-test_subscriber/src/contexts/shop/users/domain/UserDoesNotExist.ts -------------------------------------------------------------------------------- /04-react_to_domain_events/2-test_subscriber/src/contexts/shop/users/domain/UserEmail.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/04-react_to_domain_events/2-test_subscriber/src/contexts/shop/users/domain/UserEmail.ts -------------------------------------------------------------------------------- /04-react_to_domain_events/2-test_subscriber/src/contexts/shop/users/domain/UserFinder.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/04-react_to_domain_events/2-test_subscriber/src/contexts/shop/users/domain/UserFinder.ts -------------------------------------------------------------------------------- /04-react_to_domain_events/2-test_subscriber/src/contexts/shop/users/domain/UserId.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/04-react_to_domain_events/2-test_subscriber/src/contexts/shop/users/domain/UserId.ts -------------------------------------------------------------------------------- /04-react_to_domain_events/2-test_subscriber/src/contexts/shop/users/domain/UserName.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/04-react_to_domain_events/2-test_subscriber/src/contexts/shop/users/domain/UserName.ts -------------------------------------------------------------------------------- /04-react_to_domain_events/2-test_subscriber/src/contexts/shop/users/domain/UserProfilePicture.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/04-react_to_domain_events/2-test_subscriber/src/contexts/shop/users/domain/UserProfilePicture.ts -------------------------------------------------------------------------------- /04-react_to_domain_events/2-test_subscriber/src/contexts/shop/users/domain/UserRepository.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/04-react_to_domain_events/2-test_subscriber/src/contexts/shop/users/domain/UserRepository.ts -------------------------------------------------------------------------------- /04-react_to_domain_events/2-test_subscriber/src/contexts/shop/users/domain/UserStatus.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/04-react_to_domain_events/2-test_subscriber/src/contexts/shop/users/domain/UserStatus.ts -------------------------------------------------------------------------------- /04-react_to_domain_events/2-test_subscriber/tailwind.config.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/04-react_to_domain_events/2-test_subscriber/tailwind.config.ts -------------------------------------------------------------------------------- /04-react_to_domain_events/2-test_subscriber/tests/contexts/retention/email/domain/EmailIdMother.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/04-react_to_domain_events/2-test_subscriber/tests/contexts/retention/email/domain/EmailIdMother.ts -------------------------------------------------------------------------------- /04-react_to_domain_events/2-test_subscriber/tests/contexts/shared/domain/EmailAddressMother.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/04-react_to_domain_events/2-test_subscriber/tests/contexts/shared/domain/EmailAddressMother.ts -------------------------------------------------------------------------------- /04-react_to_domain_events/2-test_subscriber/tests/contexts/shared/domain/EnumMother.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/04-react_to_domain_events/2-test_subscriber/tests/contexts/shared/domain/EnumMother.ts -------------------------------------------------------------------------------- /04-react_to_domain_events/2-test_subscriber/tests/contexts/shared/infrastructure/MockEventBus.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/04-react_to_domain_events/2-test_subscriber/tests/contexts/shared/infrastructure/MockEventBus.ts -------------------------------------------------------------------------------- /04-react_to_domain_events/2-test_subscriber/tests/contexts/shop/users/domain/UserEmailMother.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/04-react_to_domain_events/2-test_subscriber/tests/contexts/shop/users/domain/UserEmailMother.ts -------------------------------------------------------------------------------- /04-react_to_domain_events/2-test_subscriber/tests/contexts/shop/users/domain/UserIdMother.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/04-react_to_domain_events/2-test_subscriber/tests/contexts/shop/users/domain/UserIdMother.ts -------------------------------------------------------------------------------- /04-react_to_domain_events/2-test_subscriber/tests/contexts/shop/users/domain/UserMother.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/04-react_to_domain_events/2-test_subscriber/tests/contexts/shop/users/domain/UserMother.ts -------------------------------------------------------------------------------- /04-react_to_domain_events/2-test_subscriber/tests/contexts/shop/users/domain/UserNameMother.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/04-react_to_domain_events/2-test_subscriber/tests/contexts/shop/users/domain/UserNameMother.ts -------------------------------------------------------------------------------- /04-react_to_domain_events/2-test_subscriber/tsconfig.json: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/04-react_to_domain_events/2-test_subscriber/tsconfig.json -------------------------------------------------------------------------------- /04-react_to_domain_events/3-subscriber_listen_multiple_events/.editorconfig: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/04-react_to_domain_events/3-subscriber_listen_multiple_events/.editorconfig -------------------------------------------------------------------------------- /04-react_to_domain_events/3-subscriber_listen_multiple_events/.eslintrc.json: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/04-react_to_domain_events/3-subscriber_listen_multiple_events/.eslintrc.json -------------------------------------------------------------------------------- /04-react_to_domain_events/3-subscriber_listen_multiple_events/.gitignore: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/04-react_to_domain_events/3-subscriber_listen_multiple_events/.gitignore -------------------------------------------------------------------------------- /04-react_to_domain_events/3-subscriber_listen_multiple_events/Makefile: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /04-react_to_domain_events/3-subscriber_listen_multiple_events/README.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/04-react_to_domain_events/3-subscriber_listen_multiple_events/README.md -------------------------------------------------------------------------------- /04-react_to_domain_events/3-subscriber_listen_multiple_events/databases/ecommerce.sql: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/04-react_to_domain_events/3-subscriber_listen_multiple_events/databases/ecommerce.sql -------------------------------------------------------------------------------- /04-react_to_domain_events/3-subscriber_listen_multiple_events/docker-compose.yml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/04-react_to_domain_events/3-subscriber_listen_multiple_events/docker-compose.yml -------------------------------------------------------------------------------- /04-react_to_domain_events/3-subscriber_listen_multiple_events/etc/http/seller_backoffice/products-GET.http: -------------------------------------------------------------------------------- 1 | GET http://localhost:3000/api/seller_backoffice/products 2 | -------------------------------------------------------------------------------- /04-react_to_domain_events/3-subscriber_listen_multiple_events/etc/http/shop/product-GET.http: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/04-react_to_domain_events/3-subscriber_listen_multiple_events/etc/http/shop/product-GET.http -------------------------------------------------------------------------------- /04-react_to_domain_events/3-subscriber_listen_multiple_events/etc/http/shop/products-GET.http: -------------------------------------------------------------------------------- 1 | GET http://localhost:3000/api/shop/products 2 | -------------------------------------------------------------------------------- /04-react_to_domain_events/3-subscriber_listen_multiple_events/etc/http/shop/user-GET.http: -------------------------------------------------------------------------------- 1 | GET http://localhost:3000/api/shop/users/1ec0b8ee-dbdc-48f6-ae5a-bfb99bee5e27 2 | -------------------------------------------------------------------------------- /04-react_to_domain_events/3-subscriber_listen_multiple_events/etc/http/shop/user-PUT.http: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/04-react_to_domain_events/3-subscriber_listen_multiple_events/etc/http/shop/user-PUT.http -------------------------------------------------------------------------------- /04-react_to_domain_events/3-subscriber_listen_multiple_events/jest.config.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/04-react_to_domain_events/3-subscriber_listen_multiple_events/jest.config.js -------------------------------------------------------------------------------- /04-react_to_domain_events/3-subscriber_listen_multiple_events/next.config.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/04-react_to_domain_events/3-subscriber_listen_multiple_events/next.config.js -------------------------------------------------------------------------------- /04-react_to_domain_events/3-subscriber_listen_multiple_events/package-lock.json: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/04-react_to_domain_events/3-subscriber_listen_multiple_events/package-lock.json -------------------------------------------------------------------------------- /04-react_to_domain_events/3-subscriber_listen_multiple_events/package.json: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/04-react_to_domain_events/3-subscriber_listen_multiple_events/package.json -------------------------------------------------------------------------------- /04-react_to_domain_events/3-subscriber_listen_multiple_events/postcss.config.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/04-react_to_domain_events/3-subscriber_listen_multiple_events/postcss.config.js -------------------------------------------------------------------------------- /04-react_to_domain_events/3-subscriber_listen_multiple_events/public/codely.svg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/04-react_to_domain_events/3-subscriber_listen_multiple_events/public/codely.svg -------------------------------------------------------------------------------- /04-react_to_domain_events/3-subscriber_listen_multiple_events/src/app/api/shop/products/route.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/04-react_to_domain_events/3-subscriber_listen_multiple_events/src/app/api/shop/products/route.ts -------------------------------------------------------------------------------- /04-react_to_domain_events/3-subscriber_listen_multiple_events/src/contexts/retention/user/application/create/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /04-react_to_domain_events/3-subscriber_listen_multiple_events/src/contexts/shared/domain/Collection.ts: -------------------------------------------------------------------------------- 1 | export abstract class Collection { 2 | constructor(public readonly value: T[]) {} 3 | } 4 | -------------------------------------------------------------------------------- /04-react_to_domain_events/3-subscriber_listen_multiple_events/tailwind.config.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/04-react_to_domain_events/3-subscriber_listen_multiple_events/tailwind.config.ts -------------------------------------------------------------------------------- /04-react_to_domain_events/3-subscriber_listen_multiple_events/tsconfig.json: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/04-react_to_domain_events/3-subscriber_listen_multiple_events/tsconfig.json -------------------------------------------------------------------------------- /04-react_to_domain_events/4-save_as_derivated_action/.editorconfig: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/04-react_to_domain_events/4-save_as_derivated_action/.editorconfig -------------------------------------------------------------------------------- /04-react_to_domain_events/4-save_as_derivated_action/.eslintrc.json: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/04-react_to_domain_events/4-save_as_derivated_action/.eslintrc.json -------------------------------------------------------------------------------- /04-react_to_domain_events/4-save_as_derivated_action/.gitignore: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/04-react_to_domain_events/4-save_as_derivated_action/.gitignore -------------------------------------------------------------------------------- /04-react_to_domain_events/4-save_as_derivated_action/Makefile: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /04-react_to_domain_events/4-save_as_derivated_action/README.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/04-react_to_domain_events/4-save_as_derivated_action/README.md -------------------------------------------------------------------------------- /04-react_to_domain_events/4-save_as_derivated_action/databases/ecommerce.sql: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/04-react_to_domain_events/4-save_as_derivated_action/databases/ecommerce.sql -------------------------------------------------------------------------------- /04-react_to_domain_events/4-save_as_derivated_action/docker-compose.yml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/04-react_to_domain_events/4-save_as_derivated_action/docker-compose.yml -------------------------------------------------------------------------------- /04-react_to_domain_events/4-save_as_derivated_action/etc/http/seller_backoffice/product-GET.http: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/04-react_to_domain_events/4-save_as_derivated_action/etc/http/seller_backoffice/product-GET.http -------------------------------------------------------------------------------- /04-react_to_domain_events/4-save_as_derivated_action/etc/http/seller_backoffice/product-PUT.http: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/04-react_to_domain_events/4-save_as_derivated_action/etc/http/seller_backoffice/product-PUT.http -------------------------------------------------------------------------------- /04-react_to_domain_events/4-save_as_derivated_action/etc/http/seller_backoffice/products-GET.http: -------------------------------------------------------------------------------- 1 | GET http://localhost:3000/api/seller_backoffice/products 2 | -------------------------------------------------------------------------------- /04-react_to_domain_events/4-save_as_derivated_action/etc/http/shop/product-GET.http: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/04-react_to_domain_events/4-save_as_derivated_action/etc/http/shop/product-GET.http -------------------------------------------------------------------------------- /04-react_to_domain_events/4-save_as_derivated_action/etc/http/shop/product_review-PUT.http: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/04-react_to_domain_events/4-save_as_derivated_action/etc/http/shop/product_review-PUT.http -------------------------------------------------------------------------------- /04-react_to_domain_events/4-save_as_derivated_action/etc/http/shop/product_reviews-GET.http: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/04-react_to_domain_events/4-save_as_derivated_action/etc/http/shop/product_reviews-GET.http -------------------------------------------------------------------------------- /04-react_to_domain_events/4-save_as_derivated_action/etc/http/shop/products-GET.http: -------------------------------------------------------------------------------- 1 | GET http://localhost:3000/api/shop/products 2 | -------------------------------------------------------------------------------- /04-react_to_domain_events/4-save_as_derivated_action/etc/http/shop/user-GET.http: -------------------------------------------------------------------------------- 1 | GET http://localhost:3000/api/shop/users/1ec0b8ee-dbdc-48f6-ae5a-bfb99bee5e27 2 | -------------------------------------------------------------------------------- /04-react_to_domain_events/4-save_as_derivated_action/etc/http/shop/user-PUT.http: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/04-react_to_domain_events/4-save_as_derivated_action/etc/http/shop/user-PUT.http -------------------------------------------------------------------------------- /04-react_to_domain_events/4-save_as_derivated_action/jest.config.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/04-react_to_domain_events/4-save_as_derivated_action/jest.config.js -------------------------------------------------------------------------------- /04-react_to_domain_events/4-save_as_derivated_action/next.config.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/04-react_to_domain_events/4-save_as_derivated_action/next.config.js -------------------------------------------------------------------------------- /04-react_to_domain_events/4-save_as_derivated_action/package-lock.json: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/04-react_to_domain_events/4-save_as_derivated_action/package-lock.json -------------------------------------------------------------------------------- /04-react_to_domain_events/4-save_as_derivated_action/package.json: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/04-react_to_domain_events/4-save_as_derivated_action/package.json -------------------------------------------------------------------------------- /04-react_to_domain_events/4-save_as_derivated_action/postcss.config.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/04-react_to_domain_events/4-save_as_derivated_action/postcss.config.js -------------------------------------------------------------------------------- /04-react_to_domain_events/4-save_as_derivated_action/public/codely.svg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/04-react_to_domain_events/4-save_as_derivated_action/public/codely.svg -------------------------------------------------------------------------------- /04-react_to_domain_events/4-save_as_derivated_action/src/app/api/shop/product_reviews/route.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/04-react_to_domain_events/4-save_as_derivated_action/src/app/api/shop/product_reviews/route.ts -------------------------------------------------------------------------------- /04-react_to_domain_events/4-save_as_derivated_action/src/app/api/shop/products/[id]/route.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/04-react_to_domain_events/4-save_as_derivated_action/src/app/api/shop/products/[id]/route.ts -------------------------------------------------------------------------------- /04-react_to_domain_events/4-save_as_derivated_action/src/app/api/shop/products/route.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/04-react_to_domain_events/4-save_as_derivated_action/src/app/api/shop/products/route.ts -------------------------------------------------------------------------------- /04-react_to_domain_events/4-save_as_derivated_action/src/app/api/shop/users/[id]/route.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/04-react_to_domain_events/4-save_as_derivated_action/src/app/api/shop/users/[id]/route.ts -------------------------------------------------------------------------------- /04-react_to_domain_events/4-save_as_derivated_action/src/contexts/retention/user/application/create/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /04-react_to_domain_events/4-save_as_derivated_action/src/contexts/shared/domain/AggregateRoot.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/04-react_to_domain_events/4-save_as_derivated_action/src/contexts/shared/domain/AggregateRoot.ts -------------------------------------------------------------------------------- /04-react_to_domain_events/4-save_as_derivated_action/src/contexts/shared/domain/Collection.ts: -------------------------------------------------------------------------------- 1 | export abstract class Collection { 2 | constructor(public readonly value: T[]) {} 3 | } 4 | -------------------------------------------------------------------------------- /04-react_to_domain_events/4-save_as_derivated_action/src/contexts/shared/domain/EmailAddress.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/04-react_to_domain_events/4-save_as_derivated_action/src/contexts/shared/domain/EmailAddress.ts -------------------------------------------------------------------------------- /04-react_to_domain_events/4-save_as_derivated_action/src/contexts/shared/domain/Identifier.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/04-react_to_domain_events/4-save_as_derivated_action/src/contexts/shared/domain/Identifier.ts -------------------------------------------------------------------------------- /04-react_to_domain_events/4-save_as_derivated_action/src/contexts/shared/domain/Money.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/04-react_to_domain_events/4-save_as_derivated_action/src/contexts/shared/domain/Money.ts -------------------------------------------------------------------------------- /04-react_to_domain_events/4-save_as_derivated_action/src/contexts/shared/domain/UuidGenerator.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/04-react_to_domain_events/4-save_as_derivated_action/src/contexts/shared/domain/UuidGenerator.ts -------------------------------------------------------------------------------- /04-react_to_domain_events/4-save_as_derivated_action/src/contexts/shop/users/domain/User.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/04-react_to_domain_events/4-save_as_derivated_action/src/contexts/shop/users/domain/User.ts -------------------------------------------------------------------------------- /04-react_to_domain_events/4-save_as_derivated_action/src/contexts/shop/users/domain/UserEmail.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/04-react_to_domain_events/4-save_as_derivated_action/src/contexts/shop/users/domain/UserEmail.ts -------------------------------------------------------------------------------- /04-react_to_domain_events/4-save_as_derivated_action/src/contexts/shop/users/domain/UserId.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/04-react_to_domain_events/4-save_as_derivated_action/src/contexts/shop/users/domain/UserId.ts -------------------------------------------------------------------------------- /04-react_to_domain_events/4-save_as_derivated_action/src/contexts/shop/users/domain/UserName.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/04-react_to_domain_events/4-save_as_derivated_action/src/contexts/shop/users/domain/UserName.ts -------------------------------------------------------------------------------- /04-react_to_domain_events/4-save_as_derivated_action/tailwind.config.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/04-react_to_domain_events/4-save_as_derivated_action/tailwind.config.ts -------------------------------------------------------------------------------- /04-react_to_domain_events/4-save_as_derivated_action/tests/contexts/shared/domain/EnumMother.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/04-react_to_domain_events/4-save_as_derivated_action/tests/contexts/shared/domain/EnumMother.ts -------------------------------------------------------------------------------- /04-react_to_domain_events/4-save_as_derivated_action/tsconfig.json: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/04-react_to_domain_events/4-save_as_derivated_action/tsconfig.json -------------------------------------------------------------------------------- /06-external_vs_internal_domain_events/1-info_in_domain_events/1-publish_all/.editorconfig: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/06-external_vs_internal_domain_events/1-info_in_domain_events/1-publish_all/.editorconfig -------------------------------------------------------------------------------- /06-external_vs_internal_domain_events/1-info_in_domain_events/1-publish_all/.eslintrc.json: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/06-external_vs_internal_domain_events/1-info_in_domain_events/1-publish_all/.eslintrc.json -------------------------------------------------------------------------------- /06-external_vs_internal_domain_events/1-info_in_domain_events/1-publish_all/.gitignore: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/06-external_vs_internal_domain_events/1-info_in_domain_events/1-publish_all/.gitignore -------------------------------------------------------------------------------- /06-external_vs_internal_domain_events/1-info_in_domain_events/1-publish_all/Makefile: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /06-external_vs_internal_domain_events/1-info_in_domain_events/1-publish_all/README.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/06-external_vs_internal_domain_events/1-info_in_domain_events/1-publish_all/README.md -------------------------------------------------------------------------------- /06-external_vs_internal_domain_events/1-info_in_domain_events/1-publish_all/docker-compose.yml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/06-external_vs_internal_domain_events/1-info_in_domain_events/1-publish_all/docker-compose.yml -------------------------------------------------------------------------------- /06-external_vs_internal_domain_events/1-info_in_domain_events/1-publish_all/etc/http/seller_backoffice/products-GET.http: -------------------------------------------------------------------------------- 1 | GET http://localhost:3000/api/seller_backoffice/products 2 | -------------------------------------------------------------------------------- /06-external_vs_internal_domain_events/1-info_in_domain_events/1-publish_all/etc/http/shop/products-GET.http: -------------------------------------------------------------------------------- 1 | GET http://localhost:3000/api/shop/products 2 | -------------------------------------------------------------------------------- /06-external_vs_internal_domain_events/1-info_in_domain_events/1-publish_all/etc/http/shop/user-GET.http: -------------------------------------------------------------------------------- 1 | GET http://localhost:3000/api/shop/users/1ec0b8ee-dbdc-48f6-ae5a-bfb99bee5e27 2 | -------------------------------------------------------------------------------- /06-external_vs_internal_domain_events/1-info_in_domain_events/1-publish_all/jest.config.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/06-external_vs_internal_domain_events/1-info_in_domain_events/1-publish_all/jest.config.js -------------------------------------------------------------------------------- /06-external_vs_internal_domain_events/1-info_in_domain_events/1-publish_all/next.config.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/06-external_vs_internal_domain_events/1-info_in_domain_events/1-publish_all/next.config.js -------------------------------------------------------------------------------- /06-external_vs_internal_domain_events/1-info_in_domain_events/1-publish_all/package-lock.json: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/06-external_vs_internal_domain_events/1-info_in_domain_events/1-publish_all/package-lock.json -------------------------------------------------------------------------------- /06-external_vs_internal_domain_events/1-info_in_domain_events/1-publish_all/package.json: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/06-external_vs_internal_domain_events/1-info_in_domain_events/1-publish_all/package.json -------------------------------------------------------------------------------- /06-external_vs_internal_domain_events/1-info_in_domain_events/1-publish_all/postcss.config.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/06-external_vs_internal_domain_events/1-info_in_domain_events/1-publish_all/postcss.config.js -------------------------------------------------------------------------------- /06-external_vs_internal_domain_events/1-info_in_domain_events/1-publish_all/public/codely.svg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/06-external_vs_internal_domain_events/1-info_in_domain_events/1-publish_all/public/codely.svg -------------------------------------------------------------------------------- /06-external_vs_internal_domain_events/1-info_in_domain_events/1-publish_all/src/contexts/retention/user/application/create/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /06-external_vs_internal_domain_events/1-info_in_domain_events/1-publish_all/src/contexts/shared/domain/Collection.ts: -------------------------------------------------------------------------------- 1 | export abstract class Collection { 2 | constructor(public readonly value: T[]) {} 3 | } 4 | -------------------------------------------------------------------------------- /06-external_vs_internal_domain_events/1-info_in_domain_events/1-publish_all/tailwind.config.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/06-external_vs_internal_domain_events/1-info_in_domain_events/1-publish_all/tailwind.config.ts -------------------------------------------------------------------------------- /06-external_vs_internal_domain_events/1-info_in_domain_events/1-publish_all/tsconfig.json: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/06-external_vs_internal_domain_events/1-info_in_domain_events/1-publish_all/tsconfig.json -------------------------------------------------------------------------------- /06-external_vs_internal_domain_events/1-info_in_domain_events/2-publish_only_external/.gitignore: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/06-external_vs_internal_domain_events/1-info_in_domain_events/2-publish_only_external/.gitignore -------------------------------------------------------------------------------- /06-external_vs_internal_domain_events/1-info_in_domain_events/2-publish_only_external/Makefile: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /06-external_vs_internal_domain_events/1-info_in_domain_events/2-publish_only_external/README.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/06-external_vs_internal_domain_events/1-info_in_domain_events/2-publish_only_external/README.md -------------------------------------------------------------------------------- /06-external_vs_internal_domain_events/1-info_in_domain_events/2-publish_only_external/etc/http/seller_backoffice/products-GET.http: -------------------------------------------------------------------------------- 1 | GET http://localhost:3000/api/seller_backoffice/products 2 | -------------------------------------------------------------------------------- /06-external_vs_internal_domain_events/1-info_in_domain_events/2-publish_only_external/etc/http/shop/products-GET.http: -------------------------------------------------------------------------------- 1 | GET http://localhost:3000/api/shop/products 2 | -------------------------------------------------------------------------------- /06-external_vs_internal_domain_events/1-info_in_domain_events/2-publish_only_external/etc/http/shop/user-GET.http: -------------------------------------------------------------------------------- 1 | GET http://localhost:3000/api/shop/users/1ec0b8ee-dbdc-48f6-ae5a-bfb99bee5e27 2 | -------------------------------------------------------------------------------- /06-external_vs_internal_domain_events/1-info_in_domain_events/2-publish_only_external/src/contexts/retention/user/application/create/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /06-external_vs_internal_domain_events/1-info_in_domain_events/2-publish_only_external/src/contexts/shared/domain/Collection.ts: -------------------------------------------------------------------------------- 1 | export abstract class Collection { 2 | constructor(public readonly value: T[]) {} 3 | } 4 | -------------------------------------------------------------------------------- /06-external_vs_internal_domain_events/2-enrich_domain_events/.editorconfig: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/06-external_vs_internal_domain_events/2-enrich_domain_events/.editorconfig -------------------------------------------------------------------------------- /06-external_vs_internal_domain_events/2-enrich_domain_events/.eslintrc.json: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/06-external_vs_internal_domain_events/2-enrich_domain_events/.eslintrc.json -------------------------------------------------------------------------------- /06-external_vs_internal_domain_events/2-enrich_domain_events/.gitignore: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/06-external_vs_internal_domain_events/2-enrich_domain_events/.gitignore -------------------------------------------------------------------------------- /06-external_vs_internal_domain_events/2-enrich_domain_events/Makefile: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /06-external_vs_internal_domain_events/2-enrich_domain_events/README.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/06-external_vs_internal_domain_events/2-enrich_domain_events/README.md -------------------------------------------------------------------------------- /06-external_vs_internal_domain_events/2-enrich_domain_events/databases/ecommerce.sql: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/06-external_vs_internal_domain_events/2-enrich_domain_events/databases/ecommerce.sql -------------------------------------------------------------------------------- /06-external_vs_internal_domain_events/2-enrich_domain_events/docker-compose.yml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/06-external_vs_internal_domain_events/2-enrich_domain_events/docker-compose.yml -------------------------------------------------------------------------------- /06-external_vs_internal_domain_events/2-enrich_domain_events/etc/http/seller_backoffice/products-GET.http: -------------------------------------------------------------------------------- 1 | GET http://localhost:3000/api/seller_backoffice/products 2 | -------------------------------------------------------------------------------- /06-external_vs_internal_domain_events/2-enrich_domain_events/etc/http/shop/product-GET.http: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/06-external_vs_internal_domain_events/2-enrich_domain_events/etc/http/shop/product-GET.http -------------------------------------------------------------------------------- /06-external_vs_internal_domain_events/2-enrich_domain_events/etc/http/shop/products-GET.http: -------------------------------------------------------------------------------- 1 | GET http://localhost:3000/api/shop/products 2 | -------------------------------------------------------------------------------- /06-external_vs_internal_domain_events/2-enrich_domain_events/etc/http/shop/user-GET.http: -------------------------------------------------------------------------------- 1 | GET http://localhost:3000/api/shop/users/1ec0b8ee-dbdc-48f6-ae5a-bfb99bee5e27 2 | -------------------------------------------------------------------------------- /06-external_vs_internal_domain_events/2-enrich_domain_events/etc/http/shop/user-PUT.http: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/06-external_vs_internal_domain_events/2-enrich_domain_events/etc/http/shop/user-PUT.http -------------------------------------------------------------------------------- /06-external_vs_internal_domain_events/2-enrich_domain_events/jest.config.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/06-external_vs_internal_domain_events/2-enrich_domain_events/jest.config.js -------------------------------------------------------------------------------- /06-external_vs_internal_domain_events/2-enrich_domain_events/next.config.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/06-external_vs_internal_domain_events/2-enrich_domain_events/next.config.js -------------------------------------------------------------------------------- /06-external_vs_internal_domain_events/2-enrich_domain_events/package-lock.json: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/06-external_vs_internal_domain_events/2-enrich_domain_events/package-lock.json -------------------------------------------------------------------------------- /06-external_vs_internal_domain_events/2-enrich_domain_events/package.json: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/06-external_vs_internal_domain_events/2-enrich_domain_events/package.json -------------------------------------------------------------------------------- /06-external_vs_internal_domain_events/2-enrich_domain_events/postcss.config.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/06-external_vs_internal_domain_events/2-enrich_domain_events/postcss.config.js -------------------------------------------------------------------------------- /06-external_vs_internal_domain_events/2-enrich_domain_events/public/codely.svg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/06-external_vs_internal_domain_events/2-enrich_domain_events/public/codely.svg -------------------------------------------------------------------------------- /06-external_vs_internal_domain_events/2-enrich_domain_events/src/app/api/shop/products/route.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/06-external_vs_internal_domain_events/2-enrich_domain_events/src/app/api/shop/products/route.ts -------------------------------------------------------------------------------- /06-external_vs_internal_domain_events/2-enrich_domain_events/src/contexts/retention/user/application/create/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /06-external_vs_internal_domain_events/2-enrich_domain_events/src/contexts/shared/domain/Collection.ts: -------------------------------------------------------------------------------- 1 | export abstract class Collection { 2 | constructor(public readonly value: T[]) {} 3 | } 4 | -------------------------------------------------------------------------------- /06-external_vs_internal_domain_events/2-enrich_domain_events/src/contexts/shared/domain/Money.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/06-external_vs_internal_domain_events/2-enrich_domain_events/src/contexts/shared/domain/Money.ts -------------------------------------------------------------------------------- /06-external_vs_internal_domain_events/2-enrich_domain_events/tailwind.config.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/06-external_vs_internal_domain_events/2-enrich_domain_events/tailwind.config.ts -------------------------------------------------------------------------------- /06-external_vs_internal_domain_events/2-enrich_domain_events/tsconfig.json: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/06-external_vs_internal_domain_events/2-enrich_domain_events/tsconfig.json -------------------------------------------------------------------------------- /07-implement_event_bus/1-sync_event_bus/.editorconfig: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/07-implement_event_bus/1-sync_event_bus/.editorconfig -------------------------------------------------------------------------------- /07-implement_event_bus/1-sync_event_bus/.eslintrc.json: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/07-implement_event_bus/1-sync_event_bus/.eslintrc.json -------------------------------------------------------------------------------- /07-implement_event_bus/1-sync_event_bus/.gitignore: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/07-implement_event_bus/1-sync_event_bus/.gitignore -------------------------------------------------------------------------------- /07-implement_event_bus/1-sync_event_bus/Makefile: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /07-implement_event_bus/1-sync_event_bus/README.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/07-implement_event_bus/1-sync_event_bus/README.md -------------------------------------------------------------------------------- /07-implement_event_bus/1-sync_event_bus/databases/ecommerce.sql: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/07-implement_event_bus/1-sync_event_bus/databases/ecommerce.sql -------------------------------------------------------------------------------- /07-implement_event_bus/1-sync_event_bus/docker-compose.yml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/07-implement_event_bus/1-sync_event_bus/docker-compose.yml -------------------------------------------------------------------------------- /07-implement_event_bus/1-sync_event_bus/etc/http/seller_backoffice/product-GET.http: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/07-implement_event_bus/1-sync_event_bus/etc/http/seller_backoffice/product-GET.http -------------------------------------------------------------------------------- /07-implement_event_bus/1-sync_event_bus/etc/http/seller_backoffice/product-PUT.http: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/07-implement_event_bus/1-sync_event_bus/etc/http/seller_backoffice/product-PUT.http -------------------------------------------------------------------------------- /07-implement_event_bus/1-sync_event_bus/etc/http/seller_backoffice/products-GET.http: -------------------------------------------------------------------------------- 1 | GET http://localhost:3000/api/seller_backoffice/products 2 | -------------------------------------------------------------------------------- /07-implement_event_bus/1-sync_event_bus/etc/http/shop/product-GET.http: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/07-implement_event_bus/1-sync_event_bus/etc/http/shop/product-GET.http -------------------------------------------------------------------------------- /07-implement_event_bus/1-sync_event_bus/etc/http/shop/product_review-PUT.http: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/07-implement_event_bus/1-sync_event_bus/etc/http/shop/product_review-PUT.http -------------------------------------------------------------------------------- /07-implement_event_bus/1-sync_event_bus/etc/http/shop/product_reviews-GET.http: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/07-implement_event_bus/1-sync_event_bus/etc/http/shop/product_reviews-GET.http -------------------------------------------------------------------------------- /07-implement_event_bus/1-sync_event_bus/etc/http/shop/products-GET.http: -------------------------------------------------------------------------------- 1 | GET http://localhost:3000/api/shop/products 2 | -------------------------------------------------------------------------------- /07-implement_event_bus/1-sync_event_bus/etc/http/shop/user-GET.http: -------------------------------------------------------------------------------- 1 | GET http://localhost:3000/api/shop/users/1ec0b8ee-dbdc-48f6-ae5a-bfb99bee5e27 2 | -------------------------------------------------------------------------------- /07-implement_event_bus/1-sync_event_bus/etc/http/shop/user-PUT.http: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/07-implement_event_bus/1-sync_event_bus/etc/http/shop/user-PUT.http -------------------------------------------------------------------------------- /07-implement_event_bus/1-sync_event_bus/jest.config.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/07-implement_event_bus/1-sync_event_bus/jest.config.js -------------------------------------------------------------------------------- /07-implement_event_bus/1-sync_event_bus/next.config.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/07-implement_event_bus/1-sync_event_bus/next.config.js -------------------------------------------------------------------------------- /07-implement_event_bus/1-sync_event_bus/package-lock.json: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/07-implement_event_bus/1-sync_event_bus/package-lock.json -------------------------------------------------------------------------------- /07-implement_event_bus/1-sync_event_bus/package.json: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/07-implement_event_bus/1-sync_event_bus/package.json -------------------------------------------------------------------------------- /07-implement_event_bus/1-sync_event_bus/postcss.config.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/07-implement_event_bus/1-sync_event_bus/postcss.config.js -------------------------------------------------------------------------------- /07-implement_event_bus/1-sync_event_bus/public/codely.svg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/07-implement_event_bus/1-sync_event_bus/public/codely.svg -------------------------------------------------------------------------------- /07-implement_event_bus/1-sync_event_bus/src/app/api/seller_backoffice/products/[id]/route.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/07-implement_event_bus/1-sync_event_bus/src/app/api/seller_backoffice/products/[id]/route.ts -------------------------------------------------------------------------------- /07-implement_event_bus/1-sync_event_bus/src/app/api/seller_backoffice/products/route.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/07-implement_event_bus/1-sync_event_bus/src/app/api/seller_backoffice/products/route.ts -------------------------------------------------------------------------------- /07-implement_event_bus/1-sync_event_bus/src/app/api/shop/product_reviews/[id]/route.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/07-implement_event_bus/1-sync_event_bus/src/app/api/shop/product_reviews/[id]/route.ts -------------------------------------------------------------------------------- /07-implement_event_bus/1-sync_event_bus/src/app/api/shop/product_reviews/route.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/07-implement_event_bus/1-sync_event_bus/src/app/api/shop/product_reviews/route.ts -------------------------------------------------------------------------------- /07-implement_event_bus/1-sync_event_bus/src/app/api/shop/products/[id]/route.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/07-implement_event_bus/1-sync_event_bus/src/app/api/shop/products/[id]/route.ts -------------------------------------------------------------------------------- /07-implement_event_bus/1-sync_event_bus/src/app/api/shop/products/route.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/07-implement_event_bus/1-sync_event_bus/src/app/api/shop/products/route.ts -------------------------------------------------------------------------------- /07-implement_event_bus/1-sync_event_bus/src/app/api/shop/users/[id]/route.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/07-implement_event_bus/1-sync_event_bus/src/app/api/shop/users/[id]/route.ts -------------------------------------------------------------------------------- /07-implement_event_bus/1-sync_event_bus/src/contexts/retention/email/domain/Email.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/07-implement_event_bus/1-sync_event_bus/src/contexts/retention/email/domain/Email.ts -------------------------------------------------------------------------------- /07-implement_event_bus/1-sync_event_bus/src/contexts/retention/email/domain/EmailBody.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/07-implement_event_bus/1-sync_event_bus/src/contexts/retention/email/domain/EmailBody.ts -------------------------------------------------------------------------------- /07-implement_event_bus/1-sync_event_bus/src/contexts/retention/email/domain/EmailId.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/07-implement_event_bus/1-sync_event_bus/src/contexts/retention/email/domain/EmailId.ts -------------------------------------------------------------------------------- /07-implement_event_bus/1-sync_event_bus/src/contexts/retention/email/domain/EmailSender.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/07-implement_event_bus/1-sync_event_bus/src/contexts/retention/email/domain/EmailSender.ts -------------------------------------------------------------------------------- /07-implement_event_bus/1-sync_event_bus/src/contexts/retention/email/domain/WelcomeEmail.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/07-implement_event_bus/1-sync_event_bus/src/contexts/retention/email/domain/WelcomeEmail.ts -------------------------------------------------------------------------------- /07-implement_event_bus/1-sync_event_bus/src/contexts/retention/user/application/create/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /07-implement_event_bus/1-sync_event_bus/src/contexts/retention/user/domain/RetentionUser.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/07-implement_event_bus/1-sync_event_bus/src/contexts/retention/user/domain/RetentionUser.ts -------------------------------------------------------------------------------- /07-implement_event_bus/1-sync_event_bus/src/contexts/shared/domain/AggregateRoot.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/07-implement_event_bus/1-sync_event_bus/src/contexts/shared/domain/AggregateRoot.ts -------------------------------------------------------------------------------- /07-implement_event_bus/1-sync_event_bus/src/contexts/shared/domain/Collection.ts: -------------------------------------------------------------------------------- 1 | export abstract class Collection { 2 | constructor(public readonly value: T[]) {} 3 | } 4 | -------------------------------------------------------------------------------- /07-implement_event_bus/1-sync_event_bus/src/contexts/shared/domain/EmailAddress.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/07-implement_event_bus/1-sync_event_bus/src/contexts/shared/domain/EmailAddress.ts -------------------------------------------------------------------------------- /07-implement_event_bus/1-sync_event_bus/src/contexts/shared/domain/Identifier.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/07-implement_event_bus/1-sync_event_bus/src/contexts/shared/domain/Identifier.ts -------------------------------------------------------------------------------- /07-implement_event_bus/1-sync_event_bus/src/contexts/shared/domain/Money.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/07-implement_event_bus/1-sync_event_bus/src/contexts/shared/domain/Money.ts -------------------------------------------------------------------------------- /07-implement_event_bus/1-sync_event_bus/src/contexts/shared/domain/StringValueObject.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/07-implement_event_bus/1-sync_event_bus/src/contexts/shared/domain/StringValueObject.ts -------------------------------------------------------------------------------- /07-implement_event_bus/1-sync_event_bus/src/contexts/shared/domain/UuidGenerator.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/07-implement_event_bus/1-sync_event_bus/src/contexts/shared/domain/UuidGenerator.ts -------------------------------------------------------------------------------- /07-implement_event_bus/1-sync_event_bus/src/contexts/shared/domain/event/DomainEvent.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/07-implement_event_bus/1-sync_event_bus/src/contexts/shared/domain/event/DomainEvent.ts -------------------------------------------------------------------------------- /07-implement_event_bus/1-sync_event_bus/src/contexts/shared/domain/event/DomainEventName.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/07-implement_event_bus/1-sync_event_bus/src/contexts/shared/domain/event/DomainEventName.ts -------------------------------------------------------------------------------- /07-implement_event_bus/1-sync_event_bus/src/contexts/shared/domain/event/EventBus.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/07-implement_event_bus/1-sync_event_bus/src/contexts/shared/domain/event/EventBus.ts -------------------------------------------------------------------------------- /07-implement_event_bus/1-sync_event_bus/src/contexts/shared/infrastructure/MariaDBConnection.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/07-implement_event_bus/1-sync_event_bus/src/contexts/shared/infrastructure/MariaDBConnection.ts -------------------------------------------------------------------------------- /07-implement_event_bus/1-sync_event_bus/src/contexts/shop/products/domain/Product.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/07-implement_event_bus/1-sync_event_bus/src/contexts/shop/products/domain/Product.ts -------------------------------------------------------------------------------- /07-implement_event_bus/1-sync_event_bus/src/contexts/shop/products/domain/ProductId.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/07-implement_event_bus/1-sync_event_bus/src/contexts/shop/products/domain/ProductId.ts -------------------------------------------------------------------------------- /07-implement_event_bus/1-sync_event_bus/src/contexts/shop/products/domain/ProductImageUrl.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/07-implement_event_bus/1-sync_event_bus/src/contexts/shop/products/domain/ProductImageUrl.ts -------------------------------------------------------------------------------- /07-implement_event_bus/1-sync_event_bus/src/contexts/shop/products/domain/ProductImageUrls.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/07-implement_event_bus/1-sync_event_bus/src/contexts/shop/products/domain/ProductImageUrls.ts -------------------------------------------------------------------------------- /07-implement_event_bus/1-sync_event_bus/src/contexts/shop/products/domain/ProductName.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/07-implement_event_bus/1-sync_event_bus/src/contexts/shop/products/domain/ProductName.ts -------------------------------------------------------------------------------- /07-implement_event_bus/1-sync_event_bus/src/contexts/shop/products/domain/ProductRating.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/07-implement_event_bus/1-sync_event_bus/src/contexts/shop/products/domain/ProductRating.ts -------------------------------------------------------------------------------- /07-implement_event_bus/1-sync_event_bus/src/contexts/shop/products/domain/ProductRepository.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/07-implement_event_bus/1-sync_event_bus/src/contexts/shop/products/domain/ProductRepository.ts -------------------------------------------------------------------------------- /07-implement_event_bus/1-sync_event_bus/src/contexts/shop/users/application/find/UserFinder.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/07-implement_event_bus/1-sync_event_bus/src/contexts/shop/users/application/find/UserFinder.ts -------------------------------------------------------------------------------- /07-implement_event_bus/1-sync_event_bus/src/contexts/shop/users/domain/User.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/07-implement_event_bus/1-sync_event_bus/src/contexts/shop/users/domain/User.ts -------------------------------------------------------------------------------- /07-implement_event_bus/1-sync_event_bus/src/contexts/shop/users/domain/UserDoesNotExist.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/07-implement_event_bus/1-sync_event_bus/src/contexts/shop/users/domain/UserDoesNotExist.ts -------------------------------------------------------------------------------- /07-implement_event_bus/1-sync_event_bus/src/contexts/shop/users/domain/UserEmail.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/07-implement_event_bus/1-sync_event_bus/src/contexts/shop/users/domain/UserEmail.ts -------------------------------------------------------------------------------- /07-implement_event_bus/1-sync_event_bus/src/contexts/shop/users/domain/UserFinder.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/07-implement_event_bus/1-sync_event_bus/src/contexts/shop/users/domain/UserFinder.ts -------------------------------------------------------------------------------- /07-implement_event_bus/1-sync_event_bus/src/contexts/shop/users/domain/UserId.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/07-implement_event_bus/1-sync_event_bus/src/contexts/shop/users/domain/UserId.ts -------------------------------------------------------------------------------- /07-implement_event_bus/1-sync_event_bus/src/contexts/shop/users/domain/UserName.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/07-implement_event_bus/1-sync_event_bus/src/contexts/shop/users/domain/UserName.ts -------------------------------------------------------------------------------- /07-implement_event_bus/1-sync_event_bus/src/contexts/shop/users/domain/UserProfilePicture.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/07-implement_event_bus/1-sync_event_bus/src/contexts/shop/users/domain/UserProfilePicture.ts -------------------------------------------------------------------------------- /07-implement_event_bus/1-sync_event_bus/src/contexts/shop/users/domain/UserRepository.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/07-implement_event_bus/1-sync_event_bus/src/contexts/shop/users/domain/UserRepository.ts -------------------------------------------------------------------------------- /07-implement_event_bus/1-sync_event_bus/src/contexts/shop/users/domain/UserStatus.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/07-implement_event_bus/1-sync_event_bus/src/contexts/shop/users/domain/UserStatus.ts -------------------------------------------------------------------------------- /07-implement_event_bus/1-sync_event_bus/tailwind.config.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/07-implement_event_bus/1-sync_event_bus/tailwind.config.ts -------------------------------------------------------------------------------- /07-implement_event_bus/1-sync_event_bus/tests/contexts/retention/email/domain/EmailBodyMother.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/07-implement_event_bus/1-sync_event_bus/tests/contexts/retention/email/domain/EmailBodyMother.ts -------------------------------------------------------------------------------- /07-implement_event_bus/1-sync_event_bus/tests/contexts/retention/email/domain/EmailIdMother.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/07-implement_event_bus/1-sync_event_bus/tests/contexts/retention/email/domain/EmailIdMother.ts -------------------------------------------------------------------------------- /07-implement_event_bus/1-sync_event_bus/tests/contexts/shared/domain/EmailAddressMother.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/07-implement_event_bus/1-sync_event_bus/tests/contexts/shared/domain/EmailAddressMother.ts -------------------------------------------------------------------------------- /07-implement_event_bus/1-sync_event_bus/tests/contexts/shared/domain/EnumMother.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/07-implement_event_bus/1-sync_event_bus/tests/contexts/shared/domain/EnumMother.ts -------------------------------------------------------------------------------- /07-implement_event_bus/1-sync_event_bus/tests/contexts/shared/infrastructure/MockEventBus.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/07-implement_event_bus/1-sync_event_bus/tests/contexts/shared/infrastructure/MockEventBus.ts -------------------------------------------------------------------------------- /07-implement_event_bus/1-sync_event_bus/tests/contexts/shop/users/domain/DateMother.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/07-implement_event_bus/1-sync_event_bus/tests/contexts/shop/users/domain/DateMother.ts -------------------------------------------------------------------------------- /07-implement_event_bus/1-sync_event_bus/tests/contexts/shop/users/domain/UserEmailMother.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/07-implement_event_bus/1-sync_event_bus/tests/contexts/shop/users/domain/UserEmailMother.ts -------------------------------------------------------------------------------- /07-implement_event_bus/1-sync_event_bus/tests/contexts/shop/users/domain/UserIdMother.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/07-implement_event_bus/1-sync_event_bus/tests/contexts/shop/users/domain/UserIdMother.ts -------------------------------------------------------------------------------- /07-implement_event_bus/1-sync_event_bus/tests/contexts/shop/users/domain/UserMother.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/07-implement_event_bus/1-sync_event_bus/tests/contexts/shop/users/domain/UserMother.ts -------------------------------------------------------------------------------- /07-implement_event_bus/1-sync_event_bus/tests/contexts/shop/users/domain/UserNameMother.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/07-implement_event_bus/1-sync_event_bus/tests/contexts/shop/users/domain/UserNameMother.ts -------------------------------------------------------------------------------- /07-implement_event_bus/1-sync_event_bus/tsconfig.json: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/07-implement_event_bus/1-sync_event_bus/tsconfig.json -------------------------------------------------------------------------------- /08-add_domain_events_to_legacy/2-add_event_bus/1-without_events/.editorconfig: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/08-add_domain_events_to_legacy/2-add_event_bus/1-without_events/.editorconfig -------------------------------------------------------------------------------- /08-add_domain_events_to_legacy/2-add_event_bus/1-without_events/.eslintrc.json: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/08-add_domain_events_to_legacy/2-add_event_bus/1-without_events/.eslintrc.json -------------------------------------------------------------------------------- /08-add_domain_events_to_legacy/2-add_event_bus/1-without_events/.gitignore: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/08-add_domain_events_to_legacy/2-add_event_bus/1-without_events/.gitignore -------------------------------------------------------------------------------- /08-add_domain_events_to_legacy/2-add_event_bus/1-without_events/Makefile: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /08-add_domain_events_to_legacy/2-add_event_bus/1-without_events/README.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/08-add_domain_events_to_legacy/2-add_event_bus/1-without_events/README.md -------------------------------------------------------------------------------- /08-add_domain_events_to_legacy/2-add_event_bus/1-without_events/databases/ecommerce.sql: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/08-add_domain_events_to_legacy/2-add_event_bus/1-without_events/databases/ecommerce.sql -------------------------------------------------------------------------------- /08-add_domain_events_to_legacy/2-add_event_bus/1-without_events/docker-compose.yml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/08-add_domain_events_to_legacy/2-add_event_bus/1-without_events/docker-compose.yml -------------------------------------------------------------------------------- /08-add_domain_events_to_legacy/2-add_event_bus/1-without_events/etc/http/seller_backoffice/products-GET.http: -------------------------------------------------------------------------------- 1 | GET http://localhost:3000/api/seller_backoffice/products 2 | -------------------------------------------------------------------------------- /08-add_domain_events_to_legacy/2-add_event_bus/1-without_events/etc/http/shop/product-GET.http: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/08-add_domain_events_to_legacy/2-add_event_bus/1-without_events/etc/http/shop/product-GET.http -------------------------------------------------------------------------------- /08-add_domain_events_to_legacy/2-add_event_bus/1-without_events/etc/http/shop/products-GET.http: -------------------------------------------------------------------------------- 1 | GET http://localhost:3000/api/shop/products 2 | -------------------------------------------------------------------------------- /08-add_domain_events_to_legacy/2-add_event_bus/1-without_events/etc/http/shop/user-GET.http: -------------------------------------------------------------------------------- 1 | GET http://localhost:3000/api/shop/users/1ec0b8ee-dbdc-48f6-ae5a-bfb99bee5e27 2 | -------------------------------------------------------------------------------- /08-add_domain_events_to_legacy/2-add_event_bus/1-without_events/etc/http/shop/user-PUT.http: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/08-add_domain_events_to_legacy/2-add_event_bus/1-without_events/etc/http/shop/user-PUT.http -------------------------------------------------------------------------------- /08-add_domain_events_to_legacy/2-add_event_bus/1-without_events/jest.config.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/08-add_domain_events_to_legacy/2-add_event_bus/1-without_events/jest.config.js -------------------------------------------------------------------------------- /08-add_domain_events_to_legacy/2-add_event_bus/1-without_events/next.config.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/08-add_domain_events_to_legacy/2-add_event_bus/1-without_events/next.config.js -------------------------------------------------------------------------------- /08-add_domain_events_to_legacy/2-add_event_bus/1-without_events/package-lock.json: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/08-add_domain_events_to_legacy/2-add_event_bus/1-without_events/package-lock.json -------------------------------------------------------------------------------- /08-add_domain_events_to_legacy/2-add_event_bus/1-without_events/package.json: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/08-add_domain_events_to_legacy/2-add_event_bus/1-without_events/package.json -------------------------------------------------------------------------------- /08-add_domain_events_to_legacy/2-add_event_bus/1-without_events/postcss.config.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/08-add_domain_events_to_legacy/2-add_event_bus/1-without_events/postcss.config.js -------------------------------------------------------------------------------- /08-add_domain_events_to_legacy/2-add_event_bus/1-without_events/public/codely.svg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/08-add_domain_events_to_legacy/2-add_event_bus/1-without_events/public/codely.svg -------------------------------------------------------------------------------- /08-add_domain_events_to_legacy/2-add_event_bus/1-without_events/src/contexts/retention/user/application/create/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /08-add_domain_events_to_legacy/2-add_event_bus/1-without_events/src/contexts/shared/domain/Collection.ts: -------------------------------------------------------------------------------- 1 | export abstract class Collection { 2 | constructor(public readonly value: T[]) {} 3 | } 4 | -------------------------------------------------------------------------------- /08-add_domain_events_to_legacy/2-add_event_bus/1-without_events/tailwind.config.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/08-add_domain_events_to_legacy/2-add_event_bus/1-without_events/tailwind.config.ts -------------------------------------------------------------------------------- /08-add_domain_events_to_legacy/2-add_event_bus/1-without_events/tsconfig.json: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/08-add_domain_events_to_legacy/2-add_event_bus/1-without_events/tsconfig.json -------------------------------------------------------------------------------- /09-change_data_capture/2-add_change_data_capture/.env: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/09-change_data_capture/2-add_change_data_capture/.env -------------------------------------------------------------------------------- /09-change_data_capture/2-add_change_data_capture/.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | custom: https://bit.ly/CodelyTvPro 2 | -------------------------------------------------------------------------------- /09-change_data_capture/2-add_change_data_capture/.github/workflows/ci.yml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/09-change_data_capture/2-add_change_data_capture/.github/workflows/ci.yml -------------------------------------------------------------------------------- /09-change_data_capture/2-add_change_data_capture/.github/workflows/labeler.yml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/09-change_data_capture/2-add_change_data_capture/.github/workflows/labeler.yml -------------------------------------------------------------------------------- /09-change_data_capture/2-add_change_data_capture/.gitignore: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/09-change_data_capture/2-add_change_data_capture/.gitignore -------------------------------------------------------------------------------- /09-change_data_capture/2-add_change_data_capture/Dockerfile: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/09-change_data_capture/2-add_change_data_capture/Dockerfile -------------------------------------------------------------------------------- /09-change_data_capture/2-add_change_data_capture/Makefile: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/09-change_data_capture/2-add_change_data_capture/Makefile -------------------------------------------------------------------------------- /09-change_data_capture/2-add_change_data_capture/README.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/09-change_data_capture/2-add_change_data_capture/README.md -------------------------------------------------------------------------------- /09-change_data_capture/2-add_change_data_capture/apps/backoffice/backend/bin/console: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/09-change_data_capture/2-add_change_data_capture/apps/backoffice/backend/bin/console -------------------------------------------------------------------------------- /09-change_data_capture/2-add_change_data_capture/apps/backoffice/backend/config/bundles.php: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/09-change_data_capture/2-add_change_data_capture/apps/backoffice/backend/config/bundles.php -------------------------------------------------------------------------------- /09-change_data_capture/2-add_change_data_capture/apps/backoffice/backend/config/services.yaml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/09-change_data_capture/2-add_change_data_capture/apps/backoffice/backend/config/services.yaml -------------------------------------------------------------------------------- /09-change_data_capture/2-add_change_data_capture/apps/backoffice/backend/public/index.php: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/09-change_data_capture/2-add_change_data_capture/apps/backoffice/backend/public/index.php -------------------------------------------------------------------------------- /09-change_data_capture/2-add_change_data_capture/apps/backoffice/frontend/bin/console: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/09-change_data_capture/2-add_change_data_capture/apps/backoffice/frontend/bin/console -------------------------------------------------------------------------------- /09-change_data_capture/2-add_change_data_capture/apps/backoffice/frontend/config/bundles.php: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/09-change_data_capture/2-add_change_data_capture/apps/backoffice/frontend/config/bundles.php -------------------------------------------------------------------------------- /09-change_data_capture/2-add_change_data_capture/apps/backoffice/frontend/config/services.yaml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/09-change_data_capture/2-add_change_data_capture/apps/backoffice/frontend/config/services.yaml -------------------------------------------------------------------------------- /09-change_data_capture/2-add_change_data_capture/apps/backoffice/frontend/public/images/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/09-change_data_capture/2-add_change_data_capture/apps/backoffice/frontend/public/images/logo.png -------------------------------------------------------------------------------- /09-change_data_capture/2-add_change_data_capture/apps/backoffice/frontend/public/index.php: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/09-change_data_capture/2-add_change_data_capture/apps/backoffice/frontend/public/index.php -------------------------------------------------------------------------------- /09-change_data_capture/2-add_change_data_capture/apps/bootstrap.php: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/09-change_data_capture/2-add_change_data_capture/apps/bootstrap.php -------------------------------------------------------------------------------- /09-change_data_capture/2-add_change_data_capture/apps/mooc/backend/bin/console: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/09-change_data_capture/2-add_change_data_capture/apps/mooc/backend/bin/console -------------------------------------------------------------------------------- /09-change_data_capture/2-add_change_data_capture/apps/mooc/backend/config/bundles.php: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/09-change_data_capture/2-add_change_data_capture/apps/mooc/backend/config/bundles.php -------------------------------------------------------------------------------- /09-change_data_capture/2-add_change_data_capture/apps/mooc/backend/config/routes/courses.yaml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/09-change_data_capture/2-add_change_data_capture/apps/mooc/backend/config/routes/courses.yaml -------------------------------------------------------------------------------- /09-change_data_capture/2-add_change_data_capture/apps/mooc/backend/config/routes/metrics.yaml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/09-change_data_capture/2-add_change_data_capture/apps/mooc/backend/config/routes/metrics.yaml -------------------------------------------------------------------------------- /09-change_data_capture/2-add_change_data_capture/apps/mooc/backend/config/services.yaml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/09-change_data_capture/2-add_change_data_capture/apps/mooc/backend/config/services.yaml -------------------------------------------------------------------------------- /09-change_data_capture/2-add_change_data_capture/apps/mooc/backend/config/services_test.yaml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/09-change_data_capture/2-add_change_data_capture/apps/mooc/backend/config/services_test.yaml -------------------------------------------------------------------------------- /09-change_data_capture/2-add_change_data_capture/apps/mooc/backend/public/index.php: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/09-change_data_capture/2-add_change_data_capture/apps/mooc/backend/public/index.php -------------------------------------------------------------------------------- /09-change_data_capture/2-add_change_data_capture/apps/mooc/backend/src/MoocBackendKernel.php: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/09-change_data_capture/2-add_change_data_capture/apps/mooc/backend/src/MoocBackendKernel.php -------------------------------------------------------------------------------- /09-change_data_capture/2-add_change_data_capture/apps/mooc/backend/tests/mooc_backend.yml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/09-change_data_capture/2-add_change_data_capture/apps/mooc/backend/tests/mooc_backend.yml -------------------------------------------------------------------------------- /09-change_data_capture/2-add_change_data_capture/apps/mooc/frontend/src/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /09-change_data_capture/2-add_change_data_capture/behat.yml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/09-change_data_capture/2-add_change_data_capture/behat.yml -------------------------------------------------------------------------------- /09-change_data_capture/2-add_change_data_capture/composer.json: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/09-change_data_capture/2-add_change_data_capture/composer.json -------------------------------------------------------------------------------- /09-change_data_capture/2-add_change_data_capture/composer.lock: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/09-change_data_capture/2-add_change_data_capture/composer.lock -------------------------------------------------------------------------------- /09-change_data_capture/2-add_change_data_capture/docker-compose.yml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/09-change_data_capture/2-add_change_data_capture/docker-compose.yml -------------------------------------------------------------------------------- /09-change_data_capture/2-add_change_data_capture/ecs.php: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/09-change_data_capture/2-add_change_data_capture/ecs.php -------------------------------------------------------------------------------- /09-change_data_capture/2-add_change_data_capture/etc/databases/backoffice/courses.json: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/09-change_data_capture/2-add_change_data_capture/etc/databases/backoffice/courses.json -------------------------------------------------------------------------------- /09-change_data_capture/2-add_change_data_capture/etc/databases/mooc.sql: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/09-change_data_capture/2-add_change_data_capture/etc/databases/mooc.sql -------------------------------------------------------------------------------- /09-change_data_capture/2-add_change_data_capture/etc/endpoints/backoffice_frontend.http: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/09-change_data_capture/2-add_change_data_capture/etc/endpoints/backoffice_frontend.http -------------------------------------------------------------------------------- /09-change_data_capture/2-add_change_data_capture/etc/endpoints/mooc_backend.http: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/09-change_data_capture/2-add_change_data_capture/etc/endpoints/mooc_backend.http -------------------------------------------------------------------------------- /09-change_data_capture/2-add_change_data_capture/etc/infrastructure/php/conf.d/apcu.ini: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/09-change_data_capture/2-add_change_data_capture/etc/infrastructure/php/conf.d/apcu.ini -------------------------------------------------------------------------------- /09-change_data_capture/2-add_change_data_capture/etc/infrastructure/php/conf.d/opcache.ini: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/09-change_data_capture/2-add_change_data_capture/etc/infrastructure/php/conf.d/opcache.ini -------------------------------------------------------------------------------- /09-change_data_capture/2-add_change_data_capture/etc/infrastructure/php/conf.d/xdebug.ini: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/09-change_data_capture/2-add_change_data_capture/etc/infrastructure/php/conf.d/xdebug.ini -------------------------------------------------------------------------------- /09-change_data_capture/2-add_change_data_capture/etc/infrastructure/php/php.ini: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/09-change_data_capture/2-add_change_data_capture/etc/infrastructure/php/php.ini -------------------------------------------------------------------------------- /09-change_data_capture/2-add_change_data_capture/etc/prometheus/prometheus.yml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/09-change_data_capture/2-add_change_data_capture/etc/prometheus/prometheus.yml -------------------------------------------------------------------------------- /09-change_data_capture/2-add_change_data_capture/phpmd.xml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/09-change_data_capture/2-add_change_data_capture/phpmd.xml -------------------------------------------------------------------------------- /09-change_data_capture/2-add_change_data_capture/phpstan.neon: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/09-change_data_capture/2-add_change_data_capture/phpstan.neon -------------------------------------------------------------------------------- /09-change_data_capture/2-add_change_data_capture/phpunit.xml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/09-change_data_capture/2-add_change_data_capture/phpunit.xml -------------------------------------------------------------------------------- /09-change_data_capture/2-add_change_data_capture/psalm.xml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/09-change_data_capture/2-add_change_data_capture/psalm.xml -------------------------------------------------------------------------------- /09-change_data_capture/2-add_change_data_capture/rector.php: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/09-change_data_capture/2-add_change_data_capture/rector.php -------------------------------------------------------------------------------- /09-change_data_capture/2-add_change_data_capture/src/Backoffice/Auth/Domain/AuthPassword.php: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/09-change_data_capture/2-add_change_data_capture/src/Backoffice/Auth/Domain/AuthPassword.php -------------------------------------------------------------------------------- /09-change_data_capture/2-add_change_data_capture/src/Backoffice/Auth/Domain/AuthRepository.php: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/09-change_data_capture/2-add_change_data_capture/src/Backoffice/Auth/Domain/AuthRepository.php -------------------------------------------------------------------------------- /09-change_data_capture/2-add_change_data_capture/src/Backoffice/Auth/Domain/AuthUser.php: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/09-change_data_capture/2-add_change_data_capture/src/Backoffice/Auth/Domain/AuthUser.php -------------------------------------------------------------------------------- /09-change_data_capture/2-add_change_data_capture/src/Backoffice/Auth/Domain/AuthUsername.php: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/09-change_data_capture/2-add_change_data_capture/src/Backoffice/Auth/Domain/AuthUsername.php -------------------------------------------------------------------------------- /09-change_data_capture/2-add_change_data_capture/src/Mooc/Courses/Domain/Course.php: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/09-change_data_capture/2-add_change_data_capture/src/Mooc/Courses/Domain/Course.php -------------------------------------------------------------------------------- /09-change_data_capture/2-add_change_data_capture/src/Mooc/Courses/Domain/CourseDuration.php: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/09-change_data_capture/2-add_change_data_capture/src/Mooc/Courses/Domain/CourseDuration.php -------------------------------------------------------------------------------- /09-change_data_capture/2-add_change_data_capture/src/Mooc/Courses/Domain/CourseName.php: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/09-change_data_capture/2-add_change_data_capture/src/Mooc/Courses/Domain/CourseName.php -------------------------------------------------------------------------------- /09-change_data_capture/2-add_change_data_capture/src/Mooc/Courses/Domain/CourseNotExist.php: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/09-change_data_capture/2-add_change_data_capture/src/Mooc/Courses/Domain/CourseNotExist.php -------------------------------------------------------------------------------- /09-change_data_capture/2-add_change_data_capture/src/Mooc/Courses/Domain/CourseRepository.php: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/09-change_data_capture/2-add_change_data_capture/src/Mooc/Courses/Domain/CourseRepository.php -------------------------------------------------------------------------------- /09-change_data_capture/2-add_change_data_capture/src/Mooc/Notifications/Application/SendNewCommentReplyEmail/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /09-change_data_capture/2-add_change_data_capture/src/Mooc/Notifications/Application/SendNewCommentReplyPush/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /09-change_data_capture/2-add_change_data_capture/src/Mooc/Notifications/Application/SendResetPasswordEmail/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /09-change_data_capture/2-add_change_data_capture/src/Mooc/Shared/Domain/Courses/CourseId.php: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/09-change_data_capture/2-add_change_data_capture/src/Mooc/Shared/Domain/Courses/CourseId.php -------------------------------------------------------------------------------- /09-change_data_capture/2-add_change_data_capture/src/Mooc/Shared/Domain/Videos/VideoUrl.php: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/09-change_data_capture/2-add_change_data_capture/src/Mooc/Shared/Domain/Videos/VideoUrl.php -------------------------------------------------------------------------------- /09-change_data_capture/2-add_change_data_capture/src/Mooc/Videos/Domain/Video.php: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/09-change_data_capture/2-add_change_data_capture/src/Mooc/Videos/Domain/Video.php -------------------------------------------------------------------------------- /09-change_data_capture/2-add_change_data_capture/src/Mooc/Videos/Domain/VideoFinder.php: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/09-change_data_capture/2-add_change_data_capture/src/Mooc/Videos/Domain/VideoFinder.php -------------------------------------------------------------------------------- /09-change_data_capture/2-add_change_data_capture/src/Mooc/Videos/Domain/VideoId.php: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/09-change_data_capture/2-add_change_data_capture/src/Mooc/Videos/Domain/VideoId.php -------------------------------------------------------------------------------- /09-change_data_capture/2-add_change_data_capture/src/Mooc/Videos/Domain/VideoNotFound.php: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/09-change_data_capture/2-add_change_data_capture/src/Mooc/Videos/Domain/VideoNotFound.php -------------------------------------------------------------------------------- /09-change_data_capture/2-add_change_data_capture/src/Mooc/Videos/Domain/VideoRepository.php: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/09-change_data_capture/2-add_change_data_capture/src/Mooc/Videos/Domain/VideoRepository.php -------------------------------------------------------------------------------- /09-change_data_capture/2-add_change_data_capture/src/Mooc/Videos/Domain/VideoTitle.php: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/09-change_data_capture/2-add_change_data_capture/src/Mooc/Videos/Domain/VideoTitle.php -------------------------------------------------------------------------------- /09-change_data_capture/2-add_change_data_capture/src/Mooc/Videos/Domain/VideoType.php: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/09-change_data_capture/2-add_change_data_capture/src/Mooc/Videos/Domain/VideoType.php -------------------------------------------------------------------------------- /09-change_data_capture/2-add_change_data_capture/src/Mooc/Videos/Domain/Videos.php: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/09-change_data_capture/2-add_change_data_capture/src/Mooc/Videos/Domain/Videos.php -------------------------------------------------------------------------------- /09-change_data_capture/2-add_change_data_capture/src/Retention/Campaign/Application/NewCourseAvailable/Schedule/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /09-change_data_capture/2-add_change_data_capture/src/Retention/Campaign/Application/NewCourseAvailable/Trigger/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /09-change_data_capture/2-add_change_data_capture/src/Retention/Campaign/Application/WelcomeUser/Trigger/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /09-change_data_capture/2-add_change_data_capture/src/Retention/Campaign/Domain/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /09-change_data_capture/2-add_change_data_capture/src/Retention/Campaign/Infrastructure/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /09-change_data_capture/2-add_change_data_capture/src/Retention/Email/Application/SendNewCourseAvailable/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /09-change_data_capture/2-add_change_data_capture/src/Retention/Email/Application/SendWelcomeUser/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /09-change_data_capture/2-add_change_data_capture/src/Retention/Email/Domain/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /09-change_data_capture/2-add_change_data_capture/src/Retention/Email/Infrastructure/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /09-change_data_capture/2-add_change_data_capture/src/Retention/Push/Application/SendNewCourseAvailable/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /09-change_data_capture/2-add_change_data_capture/src/Retention/Push/Domain/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /09-change_data_capture/2-add_change_data_capture/src/Retention/Push/Infrastructure/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /09-change_data_capture/2-add_change_data_capture/src/Retention/Sms/Application/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /09-change_data_capture/2-add_change_data_capture/src/Retention/Sms/Domain/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /09-change_data_capture/2-add_change_data_capture/src/Retention/Sms/Infrastructure/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /09-change_data_capture/2-add_change_data_capture/src/Shared/Domain/Aggregate/AggregateRoot.php: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/09-change_data_capture/2-add_change_data_capture/src/Shared/Domain/Aggregate/AggregateRoot.php -------------------------------------------------------------------------------- /09-change_data_capture/2-add_change_data_capture/src/Shared/Domain/Assert.php: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/09-change_data_capture/2-add_change_data_capture/src/Shared/Domain/Assert.php -------------------------------------------------------------------------------- /09-change_data_capture/2-add_change_data_capture/src/Shared/Domain/Bus/Command/Command.php: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/09-change_data_capture/2-add_change_data_capture/src/Shared/Domain/Bus/Command/Command.php -------------------------------------------------------------------------------- /09-change_data_capture/2-add_change_data_capture/src/Shared/Domain/Bus/Command/CommandBus.php: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/09-change_data_capture/2-add_change_data_capture/src/Shared/Domain/Bus/Command/CommandBus.php -------------------------------------------------------------------------------- /09-change_data_capture/2-add_change_data_capture/src/Shared/Domain/Bus/Event/DomainEvent.php: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/09-change_data_capture/2-add_change_data_capture/src/Shared/Domain/Bus/Event/DomainEvent.php -------------------------------------------------------------------------------- /09-change_data_capture/2-add_change_data_capture/src/Shared/Domain/Bus/Event/EventBus.php: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/09-change_data_capture/2-add_change_data_capture/src/Shared/Domain/Bus/Event/EventBus.php -------------------------------------------------------------------------------- /09-change_data_capture/2-add_change_data_capture/src/Shared/Domain/Bus/Query/Query.php: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/09-change_data_capture/2-add_change_data_capture/src/Shared/Domain/Bus/Query/Query.php -------------------------------------------------------------------------------- /09-change_data_capture/2-add_change_data_capture/src/Shared/Domain/Bus/Query/QueryBus.php: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/09-change_data_capture/2-add_change_data_capture/src/Shared/Domain/Bus/Query/QueryBus.php -------------------------------------------------------------------------------- /09-change_data_capture/2-add_change_data_capture/src/Shared/Domain/Bus/Query/QueryHandler.php: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/09-change_data_capture/2-add_change_data_capture/src/Shared/Domain/Bus/Query/QueryHandler.php -------------------------------------------------------------------------------- /09-change_data_capture/2-add_change_data_capture/src/Shared/Domain/Bus/Query/Response.php: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/09-change_data_capture/2-add_change_data_capture/src/Shared/Domain/Bus/Query/Response.php -------------------------------------------------------------------------------- /09-change_data_capture/2-add_change_data_capture/src/Shared/Domain/Collection.php: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/09-change_data_capture/2-add_change_data_capture/src/Shared/Domain/Collection.php -------------------------------------------------------------------------------- /09-change_data_capture/2-add_change_data_capture/src/Shared/Domain/Criteria/Criteria.php: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/09-change_data_capture/2-add_change_data_capture/src/Shared/Domain/Criteria/Criteria.php -------------------------------------------------------------------------------- /09-change_data_capture/2-add_change_data_capture/src/Shared/Domain/Criteria/Filter.php: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/09-change_data_capture/2-add_change_data_capture/src/Shared/Domain/Criteria/Filter.php -------------------------------------------------------------------------------- /09-change_data_capture/2-add_change_data_capture/src/Shared/Domain/Criteria/FilterField.php: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/09-change_data_capture/2-add_change_data_capture/src/Shared/Domain/Criteria/FilterField.php -------------------------------------------------------------------------------- /09-change_data_capture/2-add_change_data_capture/src/Shared/Domain/Criteria/FilterOperator.php: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/09-change_data_capture/2-add_change_data_capture/src/Shared/Domain/Criteria/FilterOperator.php -------------------------------------------------------------------------------- /09-change_data_capture/2-add_change_data_capture/src/Shared/Domain/Criteria/FilterValue.php: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/09-change_data_capture/2-add_change_data_capture/src/Shared/Domain/Criteria/FilterValue.php -------------------------------------------------------------------------------- /09-change_data_capture/2-add_change_data_capture/src/Shared/Domain/Criteria/Filters.php: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/09-change_data_capture/2-add_change_data_capture/src/Shared/Domain/Criteria/Filters.php -------------------------------------------------------------------------------- /09-change_data_capture/2-add_change_data_capture/src/Shared/Domain/Criteria/Order.php: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/09-change_data_capture/2-add_change_data_capture/src/Shared/Domain/Criteria/Order.php -------------------------------------------------------------------------------- /09-change_data_capture/2-add_change_data_capture/src/Shared/Domain/Criteria/OrderBy.php: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/09-change_data_capture/2-add_change_data_capture/src/Shared/Domain/Criteria/OrderBy.php -------------------------------------------------------------------------------- /09-change_data_capture/2-add_change_data_capture/src/Shared/Domain/Criteria/OrderType.php: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/09-change_data_capture/2-add_change_data_capture/src/Shared/Domain/Criteria/OrderType.php -------------------------------------------------------------------------------- /09-change_data_capture/2-add_change_data_capture/src/Shared/Domain/DomainError.php: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/09-change_data_capture/2-add_change_data_capture/src/Shared/Domain/DomainError.php -------------------------------------------------------------------------------- /09-change_data_capture/2-add_change_data_capture/src/Shared/Domain/Logger.php: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/09-change_data_capture/2-add_change_data_capture/src/Shared/Domain/Logger.php -------------------------------------------------------------------------------- /09-change_data_capture/2-add_change_data_capture/src/Shared/Domain/Monitoring.php: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/09-change_data_capture/2-add_change_data_capture/src/Shared/Domain/Monitoring.php -------------------------------------------------------------------------------- /09-change_data_capture/2-add_change_data_capture/src/Shared/Domain/RandomNumberGenerator.php: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/09-change_data_capture/2-add_change_data_capture/src/Shared/Domain/RandomNumberGenerator.php -------------------------------------------------------------------------------- /09-change_data_capture/2-add_change_data_capture/src/Shared/Domain/Second.php: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/09-change_data_capture/2-add_change_data_capture/src/Shared/Domain/Second.php -------------------------------------------------------------------------------- /09-change_data_capture/2-add_change_data_capture/src/Shared/Domain/SecondsInterval.php: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/09-change_data_capture/2-add_change_data_capture/src/Shared/Domain/SecondsInterval.php -------------------------------------------------------------------------------- /09-change_data_capture/2-add_change_data_capture/src/Shared/Domain/Utils.php: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/09-change_data_capture/2-add_change_data_capture/src/Shared/Domain/Utils.php -------------------------------------------------------------------------------- /09-change_data_capture/2-add_change_data_capture/src/Shared/Domain/UuidGenerator.php: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/09-change_data_capture/2-add_change_data_capture/src/Shared/Domain/UuidGenerator.php -------------------------------------------------------------------------------- /09-change_data_capture/2-add_change_data_capture/src/Shared/Domain/ValueObject/SimpleUuid.php: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/09-change_data_capture/2-add_change_data_capture/src/Shared/Domain/ValueObject/SimpleUuid.php -------------------------------------------------------------------------------- /09-change_data_capture/2-add_change_data_capture/src/Shared/Domain/ValueObject/Uuid.php: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/09-change_data_capture/2-add_change_data_capture/src/Shared/Domain/ValueObject/Uuid.php -------------------------------------------------------------------------------- /09-change_data_capture/2-add_change_data_capture/tests/Backoffice/Auth/Domain/AuthUserMother.php: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/09-change_data_capture/2-add_change_data_capture/tests/Backoffice/Auth/Domain/AuthUserMother.php -------------------------------------------------------------------------------- /09-change_data_capture/2-add_change_data_capture/tests/Mooc/Courses/Domain/CourseIdMother.php: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/09-change_data_capture/2-add_change_data_capture/tests/Mooc/Courses/Domain/CourseIdMother.php -------------------------------------------------------------------------------- /09-change_data_capture/2-add_change_data_capture/tests/Mooc/Courses/Domain/CourseMother.php: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/09-change_data_capture/2-add_change_data_capture/tests/Mooc/Courses/Domain/CourseMother.php -------------------------------------------------------------------------------- /09-change_data_capture/2-add_change_data_capture/tests/Mooc/Courses/Domain/CourseNameMother.php: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/09-change_data_capture/2-add_change_data_capture/tests/Mooc/Courses/Domain/CourseNameMother.php -------------------------------------------------------------------------------- /09-change_data_capture/2-add_change_data_capture/tests/Mooc/MoocArchitectureTest.php: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/09-change_data_capture/2-add_change_data_capture/tests/Mooc/MoocArchitectureTest.php -------------------------------------------------------------------------------- /09-change_data_capture/2-add_change_data_capture/tests/Mooc/Shared/Domain/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /09-change_data_capture/2-add_change_data_capture/tests/Mooc/Videos/Application/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /09-change_data_capture/2-add_change_data_capture/tests/Mooc/Videos/Domain/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /09-change_data_capture/2-add_change_data_capture/tests/Mooc/Videos/Infrastructure/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /09-change_data_capture/2-add_change_data_capture/tests/Shared/Domain/Criteria/CriteriaMother.php: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/09-change_data_capture/2-add_change_data_capture/tests/Shared/Domain/Criteria/CriteriaMother.php -------------------------------------------------------------------------------- /09-change_data_capture/2-add_change_data_capture/tests/Shared/Domain/Criteria/FilterMother.php: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/09-change_data_capture/2-add_change_data_capture/tests/Shared/Domain/Criteria/FilterMother.php -------------------------------------------------------------------------------- /09-change_data_capture/2-add_change_data_capture/tests/Shared/Domain/Criteria/FiltersMother.php: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/09-change_data_capture/2-add_change_data_capture/tests/Shared/Domain/Criteria/FiltersMother.php -------------------------------------------------------------------------------- /09-change_data_capture/2-add_change_data_capture/tests/Shared/Domain/Criteria/OrderByMother.php: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/09-change_data_capture/2-add_change_data_capture/tests/Shared/Domain/Criteria/OrderByMother.php -------------------------------------------------------------------------------- /09-change_data_capture/2-add_change_data_capture/tests/Shared/Domain/Criteria/OrderMother.php: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/09-change_data_capture/2-add_change_data_capture/tests/Shared/Domain/Criteria/OrderMother.php -------------------------------------------------------------------------------- /09-change_data_capture/2-add_change_data_capture/tests/Shared/Domain/DuplicatorMother.php: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/09-change_data_capture/2-add_change_data_capture/tests/Shared/Domain/DuplicatorMother.php -------------------------------------------------------------------------------- /09-change_data_capture/2-add_change_data_capture/tests/Shared/Domain/IntegerMother.php: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/09-change_data_capture/2-add_change_data_capture/tests/Shared/Domain/IntegerMother.php -------------------------------------------------------------------------------- /09-change_data_capture/2-add_change_data_capture/tests/Shared/Domain/MotherCreator.php: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/09-change_data_capture/2-add_change_data_capture/tests/Shared/Domain/MotherCreator.php -------------------------------------------------------------------------------- /09-change_data_capture/2-add_change_data_capture/tests/Shared/Domain/RandomElementPicker.php: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/09-change_data_capture/2-add_change_data_capture/tests/Shared/Domain/RandomElementPicker.php -------------------------------------------------------------------------------- /09-change_data_capture/2-add_change_data_capture/tests/Shared/Domain/Repeater.php: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/09-change_data_capture/2-add_change_data_capture/tests/Shared/Domain/Repeater.php -------------------------------------------------------------------------------- /09-change_data_capture/2-add_change_data_capture/tests/Shared/Domain/TestUtils.php: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/09-change_data_capture/2-add_change_data_capture/tests/Shared/Domain/TestUtils.php -------------------------------------------------------------------------------- /09-change_data_capture/2-add_change_data_capture/tests/Shared/Domain/UuidMother.php: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/09-change_data_capture/2-add_change_data_capture/tests/Shared/Domain/UuidMother.php -------------------------------------------------------------------------------- /09-change_data_capture/2-add_change_data_capture/tests/Shared/Domain/WordMother.php: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/09-change_data_capture/2-add_change_data_capture/tests/Shared/Domain/WordMother.php -------------------------------------------------------------------------------- /09-change_data_capture/2-add_change_data_capture/tests/Shared/Infrastructure/Mink/MinkHelper.php: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/09-change_data_capture/2-add_change_data_capture/tests/Shared/Infrastructure/Mink/MinkHelper.php -------------------------------------------------------------------------------- /09-change_data_capture/2-add_change_data_capture/tests/Shared/SharedArchitectureTest.php: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/09-change_data_capture/2-add_change_data_capture/tests/Shared/SharedArchitectureTest.php -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/LICENSE -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/domain_modeling-domain_events-course/HEAD/README.md --------------------------------------------------------------------------------