private async Task <ProductChangedEvent> PrepareProductChangedEvent(ProductUpsert productUpsert, string correlationToken) { // Perform Lookup to get Genre and Artist Names var artistName = (await _artistRepository.GetById(productUpsert.ArtistId, correlationToken)).Name; var genreName = (await _genreRepository.GetById(productUpsert.GenreId, correlationToken)).Name; //// Provide fallback logic in the event we cannot fetch Artist or Genre name genreName ??= "Unknown Genre"; artistName ??= "Unknown Artist"; // Populate data in the event object var productChangedEvent = new ProductChangedEvent { Id = productUpsert.Id, Title = productUpsert.Title, ArtistName = artistName, GenreName = genreName, Price = productUpsert.Price, ReleaseDate = productUpsert.ReleaseDate ?? DateTime.UtcNow.Date, ParentalCaution = productUpsert.ParentalCaution, Upc = productUpsert.Upc, Cutout = productUpsert.Cutout }; productChangedEvent.CorrelationToken = correlationToken; return(productChangedEvent); }
public async Task Add(string correlationToken, Product product) { // Idempotent write check. Ensure insert with same correlation token has // not already happened. This would most likely do to a retry after the // product has been added. var targetAlbum = await _musicRepository.GetByIdWithIdempotencyCheck(product.Id, correlationToken); if (targetAlbum == null) { // Product has not been added yet await _musicRepository.Add(product); // Hack: Yet another transformation of same data. // Added to remove issue in new Core Serializer which doesn't allow circular references. var productUpsert = new ProductUpsert { Id = product.Id, ArtistId = product.ArtistId, GenreId = product.GenreId, Title = product.Title, ParentalCaution = product.ParentalCaution, Cutout = product.Cutout, Price = product.Price, ReleaseDate = product.ReleaseDate, Upc = product.Upc }; await _eventBusPublisher.Publish <ProductChangedEvent>( await PrepareProductChangedEvent(productUpsert, correlationToken)); } }
public async Task Update(string correlationToken, Product product) { await _musicRepository.Update(product); // Hack: Yet another transformation of same data. // Added to remove issue in new Core Serializer which doesn't allow circular references. var productUpsert = new ProductUpsert { Id = product.Id, ArtistId = product.ArtistId, GenreId = product.GenreId, Title = product.Title, ParentalCaution = product.ParentalCaution, Cutout = product.Cutout, Price = product.Price, ReleaseDate = product.ReleaseDate, Upc = product.Upc }; //************** Publish Event ************************* await _eventBusPublisher.Publish <ProductChangedEvent>( await PrepareProductChangedEvent(productUpsert, correlationToken)); }