protected IActionResult CreateResource <TCreateDto, TGetDto>(TCreateDto createDto)
            where TCreateDto : ICreateDto <TEntity>
            where TGetDto : IGetDto <TEntity>
        {
            if (createDto == null)
            {
                return(BadRequest(InvalidData()));
            }
            if (!ModelState.IsValid)
            {
                return(BadRequest(InvalidData())); // TODO: -- 400 missing required fields, consider mentioning which
            }
            var resource = Map <TEntity>(createDto);
            var result   = ResourceDataService.AreRelationshipsValid(resource);

            if (!result.IsValid)
            {
                return(NotFound(ParentNotFound(result.NotFoundParentId)));
            }
            ResourceDataService.Create(resource);
            ResourceDataService.SaveChanges();
            CreatedResource = resource;
            var resourceToReturn = Map <TGetDto>(resource);

            return(CreatedAtRoute(_getResourceRouteName, new { id = resourceToReturn.Id }, resourceToReturn));
        }
        //protected IActionResult GetResources<TGetDto>(BaseResourceParameters baseResourceParameters,
        //    FilterByIdsParameter<TIdentifier> filterByIdsParameters) where TGetDto : IGetDto<TEntity, TIdentifier>
        //{
        //    return Ok(Map<IEnumerable<TGetDto>>(ResourceDataService.GetManyFilter(baseResourceParameters, filterByIdsParameters)));
        //}

        protected IActionResult UpdateResource <TUpdateDto, TGetDto>(Guid id, TUpdateDto updateDto)
            where TUpdateDto : IUpdateDto <TEntity>
            where TGetDto : IGetDto <TEntity>
        {
            var resource = ResourceDataService.Get(id);

            if (resource == null)
            {
                return(NotFound(ResourceNotFound(id.ToString())));
            }
            if (!ModelState.IsValid)
            {
                return(BadRequest(InvalidData()));
            }
            Map(updateDto, resource);
            var result = ResourceDataService.AreRelationshipsValid(resource);

            if (!result.IsValid)
            {
                return(NotFound(ParentNotFound(result.NotFoundParentId)));
            }
            ResourceDataService.Update(resource);
            ResourceDataService.SaveChanges();
            return(Ok(Map <TGetDto>(resource)));
        }