public async Task <IActionResult> Create([FromBody] ApiGeoTaskCreateCommand task)
        {
            try
            {
                var currentPrincipal = HttpContext.User;
                var currentUserName  = currentPrincipal?.Identity?.Name;
                using var logScope = Logger.BeginScope("{User}", currentUserName);
                Logger.LogInformation(ApiLogEvent.ApiRequest,
                                      "Get Create Task Command {Command}", task.ToDictionary());

                var query  = task.ToAppGeoTaskCreateCommand(currentPrincipal);
                var result = await Mediator.Send(query).ConfigureAwait(false);

                if (result is null || !result.Success)
                {
                    Logger.LogWarning(ApiLogEvent.ApiErrorResponse,
                                      "Create Task Command error response. Error={Error}.",
                                      result?.Errors);
                    return(BadRequest());
                }
                return(CreatedAtAction(nameof(Get), new { id = result.Id }, result.Id));
            }
            catch (Exception ex)
                when(Logger.WriteScopeWhenException(ApiLogEvent.ApiErrorResponse, ex))
                {
                    return(BadRequest());
                }
        }
        public static GeoTaskCreateCommand ToAppGeoTaskCreateCommand
            (this ApiGeoTaskCreateCommand from,
            ClaimsPrincipal currentPrincipal)
        {
            if (from is null)
            {
                return(null);
            }

            var to = new GeoTaskCreateCommand
            {
                Description        = from.Description,
                PlanFinishAt       = from.PlanFinishAt,
                PlanStartAt        = from.PlanStartAt,
                ProjectId          = from.ProjectId,
                ResponsibleActorId = from.ResponsibleActorId,
                Title            = from.Title,
                CurrentPrincipal = currentPrincipal,
            };

            to.AssistentActorsIds.AddRange(from.AssistentActorsIds);
            to.GeosIds.AddRange(from.GeosIds);
            to.ObserverActorsIds.AddRange(from.ObserverActorsIds);

            return(to);
        }
Пример #3
0
        public async Task CreateReturnsCreatedAtActionWhenSuccessAnswerAsync()
        {
            // Arrange
            var query = new ApiGeoTaskCreateCommand()
            {
                Title = "Test GeoTask"
            };
            var newId    = "0000000000000000";
            var mediator = new Mock <IMediator>();

            mediator.Setup(x => x.Send(It.IsAny <GeoTaskCreateCommand>(),
                                       It.IsAny <CancellationToken>()))
            .ReturnsAsync(
                new CreateResult(newId))
            .Verifiable("Query was not sent.");
            var controller = BuildController(mediator);

            // Act
            var answer = await controller.Create(query);

            // Assert
            Assert.IsType <CreatedAtActionResult>(answer);
            Assert.Equal(newId, ((CreatedAtActionResult)answer).Value);
            mediator.Verify(x => x.Send(It.IsAny <GeoTaskCreateCommand>(),
                                        It.IsAny <CancellationToken>()));
        }
        public static Dictionary <string, object> ToDictionary
            (this ApiGeoTaskCreateCommand from)
        {
            if (from is null)
            {
                return(null);
            }

            return(new Dictionary <string, object>
            {
                { "AssistentActorsIds",
                  string.Join(',', from.AssistentActorsIds) },
                { "Description", from.Description },
                { "GeosIds", string.Join(',', from.GeosIds) },
                { "ObserverActorsIds",
                  string.Join(',', from.ObserverActorsIds) },
                { "PlanFinishAt", from.PlanFinishAt },
                { "PlanStartAt", from.PlanStartAt },
                { "ProjectId", from.ProjectId },
                { "ResponsibleActorId", from.ResponsibleActorId },
                { "Title", from.Title },
            });
        }
Пример #5
0
        public async Task CreateReturnsBadResultWhenNotSuccessAnswerAsync()
        {
            // Arrange
            var query = new ApiGeoTaskCreateCommand()
            {
                Title = "Test GeoTask"
            };
            var mediator = new Mock <IMediator>();

            mediator.Setup(x => x.Send(It.IsAny <GeoTaskCreateCommand>(),
                                       It.IsAny <CancellationToken>()))
            .ReturnsAsync(
                new CreateResult(new string[] { "Error" }))
            .Verifiable("Query was not sent.");
            var controller = BuildController(mediator);

            // Act
            var answer = await controller.Create(query);

            // Assert
            Assert.IsType <BadRequestResult>(answer);
            mediator.Verify(x => x.Send(It.IsAny <GeoTaskCreateCommand>(),
                                        It.IsAny <CancellationToken>()));
        }