Ejemplo n.º 1
0
        /// <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);
            }
        }
Ejemplo n.º 2
0
        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());
        }