public async Task <IActionResult> InvokeAsync(ActionContext context, RegionCreate create)
        {
            RegionEntity parentEntity = null;

            if (string.IsNullOrEmpty(create.ParentId))
            {
                parentEntity = await _coreDbContext.GetRegionByIdAsync(Constants.RootRegionId);
            }
            else
            {
                parentEntity = await _coreDbContext.GetRegionByIdAsync(create.ParentId);

                if (parentEntity == null)
                {
                    return(BadRequest(context, nameof(RegionCreate.ParentId), "Parent region not found"));
                }

                var parentLevel = parentEntity.GetLevel();
                if (parentLevel >= 5)
                {
                    return(BadRequest(context, nameof(RegionCreate.ParentId), "Max level region reached"));
                }
            }

            var entity = _regionMapper.MapToEntity(create);

            entity.ParentId = parentEntity.Id;

            var existingEntity = _coreDbContext.GetRegionByIdAsync(entity.Id);

            if (existingEntity != null)
            {
                return(BadRequest(
                           context,
                           $"{nameof(RegionCreate.ParentId)}+{nameof(RegionCreate.Name)}",
                           $"Region with id {entity.Id} already exists"));
            }

            await _coreDbContext.Regions.AddAsync(entity);

            await _coreDbContext.SaveChangesAsync();

            return(new CreatedAtActionResult(
                       "Get",
                       "Regions",
                       entity.Id,
                       _regionMapper.MapToResult(entity)));
        }