예제 #1
0
        public async Task <IActionResult> CreateTenant([FromServices] IConfiguration configuration, [FromBody] CreateTenantRequest request)
        {
            if (request is null)
            {
                return(BadRequest(new FailedTenantResponse
                {
                    Status = false,
                    Errors = new[] { "Request should have a valid data." }
                }));
            }

            //Checking all props have values
            if (PropertyHelper.IsAnyPropIsNull(request))
            {
                return(BadRequest(
                           new FailedTenantResponse
                {
                    Status = false,
                    Errors = new[] { $"Tenant properties can not be null." }
                }
                           ));
            }

            if (!ModelState.IsValid)
            {
                return(BadRequest(new FailedTenantResponse
                {
                    Status = false,
                    Errors = ModelState.Values.SelectMany(x => x.Errors.Select(xx => xx.ErrorMessage))
                }));
            }

            var createTenantResult = await _tenantService.CreateTenantAsync(request.CreateTenantRequestToCreateTenantDto());

            if (!createTenantResult.Status)
            {
                if (createTenantResult.ServerError)
                {
                    return(StatusCode(500));
                }

                return(BadRequest(new FailedTenantResponse
                {
                    Status = createTenantResult.Status,
                    Errors = createTenantResult.Errors
                }));
            }

            string itemUrl =
                $"{configuration["ApplicationHostAddress"]}/{ApiRoutes.TenantRoute.TenantV1}/{createTenantResult.Tenant.Id}";

            return(Created(
                       new Uri(itemUrl),
                       new SuccessTenantCreationResponse
            {
                Id = createTenantResult.Tenant.Id,
                Name = createTenantResult.Tenant.Name,
                Surname = createTenantResult.Tenant.Surname,
                PersonalCode = createTenantResult.Tenant.PersonalCode,
                DateOfBirth = createTenantResult.Tenant.DateOfBirth,
                PhoneNumber = createTenantResult.Tenant.PhoneNumber,
                Email = createTenantResult.Tenant.Email,
                Flat = createTenantResult.Tenant.Flat
            }));
        }