public virtual async Task <IActionResult> Update(string id, [FromBody] TUpdateDto dto)
        {
            if (dto is IDtoWithId)
            {
                IDtoWithId dtoWithId = dto as IDtoWithId;
                if (dto == null || id.ToString() != dtoWithId.Id.ToString())
                {
                    return(ApiErrorMessage(Messages.RequestInvalid));
                }
            }

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

            var cts = TaskHelper.CreateNewCancellationTokenSource();

            //var exists = await Service.ExistsAsync(cts.Token, id);

            //if (!exists)
            //{
            //    return ApiNotFoundErrorMessage(Messages.NotFound);
            //}

            var result = await Service.UpdateGraphAsync(id, dto, Username, cts.Token);

            if (result.IsFailure)
            {
                return(ValidationErrors(result));
            }
            //return ApiSuccessMessage(Messages.UpdateSuccessful, dto.Id);
            //return Success(dto);
            return(NoContent());
        }
        public virtual async Task <IActionResult> Create([FromBody] TCreateDto dto)
        {
            if (dto == null)
            {
                return(ApiErrorMessage(Messages.RequestInvalid));
            }

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

            var cts = TaskHelper.CreateNewCancellationTokenSource();

            var result = await Service.CreateAsync(dto, User.Identity.Name, cts.Token);

            if (result.IsFailure)
            {
                return(ValidationErrors(result));
            }
            var createdDto = result.Value;

            //return CreatedAtRoute("", new { id = createdDto.Id }, createdDto);

            //return ApiSuccessMessage(Messages.AddSuccessful, createdDto.Id);
            //return Success(createdDto);

            if (createdDto is IDtoWithId)
            {
                IDtoWithId dtoWithId = dto as IDtoWithId;
                return(CreatedAtAction(nameof(Create), new { id = dtoWithId.Id }, createdDto));
            }
            else
            {
                return(Ok(createdDto));
            }
        }