Exemplo n.º 1
0
 public async Task ReceiveSeriesReviewCreated(SeriesReviewCreatedEvent reviewEvent)
 {
     // Csak akkor hozom létre ha korábban még nem jött létre (idempotens feldolgozás)
     if (!await _context.SeriesReview.AnyAsync(review =>
                                               review.ReviewerId == reviewEvent.ReviewerId &&
                                               review.SeriesId == reviewEvent.SeriesId))
     {
         var review = _mapper.Map <SeriesReview>(reviewEvent);
         _context.SeriesReview.Add(review);
         await _context.SaveChangesAsync();
     }
 }
Exemplo n.º 2
0
        public async Task ReceiveSeriesReviewCreated(SeriesReviewCreatedEvent reviewEvent)
        {
            _logger.LogInformation($"Received event of type {nameof(SeriesReviewCreatedEvent)}" +
                                   $" with Id: {reviewEvent.EventId}");

            if (!await _messageTracker.HasProcessed(reviewEvent.EventId))
            {
                _logger.LogInformation($"Processing event of type {nameof(SeriesReviewCreatedEvent)}" +
                                       $" with Id: {reviewEvent.EventId}");

                using (var transaction = await _context.Database.BeginTransactionAsync())
                {
                    try
                    {
                        var review = _mapper.Map <SeriesReview>(reviewEvent);
                        _context.SeriesReview.Add(review);
                        await _context.SaveChangesAsync();

                        await _messageTracker.MarkAsProcessed(reviewEvent.EventId);

                        await transaction.CommitAsync();

                        _logger.LogInformation($"Successfully processed event of type {nameof(SeriesReviewCreatedEvent)}" +
                                               $" with Id: {reviewEvent.EventId}");
                    }
                    catch (Exception e)
                    {
                        await transaction.RollbackAsync();

                        _logger.LogError(e, $"Unexpected error while processing event of type {nameof(SeriesReviewCreatedEvent)}" +
                                         $" EventId: {reviewEvent.EventId} SeriesId:{reviewEvent.SeriesId} Reviewerd:{reviewEvent.ReviewerId}");
                    }
                }
            }
            else
            {
                _logger.LogWarning($"We have already processed event with Id: {reviewEvent.EventId}" +
                                   $", so we dont do anything");
            }
        }