Exemple #1
0
        public async Task <ActionResult <EstablishmentDto> > CreateEstablishment([CustomizeValidator(Skip = true)] CreateEstablishmentDto createEstablishmentDto,
                                                                                 [FromServices] CreateEstablishmentValidator validator)
        {
            if (createEstablishmentDto is null)
            {
                throw new ArgumentNullException(nameof(createEstablishmentDto));
            }

            if (validator is null)
            {
                throw new ArgumentNullException(nameof(validator));
            }

            // Manual validation because ASP.NET’s validation pipeline is not asynchronous
            var validationResult = await validator.ValidateAsync(createEstablishmentDto);

            validationResult.AddToModelState(ModelState, null);

            if (!ModelState.IsValid)
            {
                return(ValidationProblem(ModelState));
            }

            var currentUserId = Guid.Parse(User.FindFirst(ClaimTypes.NameIdentifier).Value);

            try
            {
                var establishmentToReturn = await _establishmentService.Create(createEstablishmentDto, currentUserId);

                return(CreatedAtAction(nameof(GetById), new { establishmentId = establishmentToReturn.Id }, establishmentToReturn));
            }
            catch (EstablishmentServiceException ex)
            {
                return(new JsonResult(new { ex.Message })
                {
                    StatusCode = StatusCodes.Status500InternalServerError
                });
            }
        }