/// <inheritdoc /> public Task <Unit> Handle(UpdateRangeRequest <T> request, CancellationToken cancellationToken, RequestHandlerDelegate <Unit> next) { if (request == default) { throw new ArgumentNullException(nameof(request)); } if (next == default) { throw new ArgumentNullException(nameof(next)); } if (!_options.UseScopedLogging) { return(Handle()); } using (request.Scope) { return(Handle()); } async Task <Unit> Handle() { var start = new UpdateRangeNotification <T>(request.KeyValuePairs, request.Logger); await _mediator.Publish(start, cancellationToken).ConfigureAwait(false); var response = await next().ConfigureAwait(false); var finish = new UpdateRangeNotification(request.Logger); await _mediator.Publish(finish, cancellationToken).ConfigureAwait(false); return(response); } }
public async Task <IActionResult> PutAssets( [SwaggerParameter("The Assets", Required = true), FromBody, Required] JsonElement element, CancellationToken cancellationToken) { if (element.ValueKind != JsonValueKind.Array) { ModelState.AddModelError(nameof(element), "Models must be an array"); return(BadRequest(ModelState)); } if (element.GetArrayLength() == 0) { ModelState.AddModelError(nameof(element), "Models cannot be empty"); return(BadRequest(ModelState)); } var models = element.EnumerateArray().Select(x => x.ToModel <Asset>()).ToList(); var userId = Guid.Parse(User.FindFirstValue(Sub)); models.ForEach(model => { model.UpdatedBy = userId; model.UpdatedDate = UtcNow; }); var keyValuePairs = models.ToDictionary(model => (Expression <Func <Asset, bool> >)(x => x.Id == model.Id)); var updateRequest = new UpdateRangeRequest <Asset>(nameof(MongoDB), keyValuePairs, _logger); await _mediator.Send(updateRequest, cancellationToken).ConfigureAwait(false); var notification = new UpdateRangeNotification <Asset, Guid>(models.ToDictionary(x => x.Id)); await _mediator.Publish(notification, cancellationToken).ConfigureAwait(false); return(NoContent()); }