public async Task <IActionResult> Post([FromRoute] string orgRoleId, [FromBody] ReportTemplateVM reportTemplateVM)
        {
            if (string.IsNullOrWhiteSpace(orgRoleId) || string.IsNullOrEmpty(orgRoleId))
            {
                return(StatusCode(StatusCodes.Status400BadRequest,
                                  new BadRequestError($"'{nameof(orgRoleId)}' cannot be null or whitespace")));
            }


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

            OrganizationRole organizationRole = organizationRoleService
                                                .Get <OrganizationRole>(orgRole => orgRole.Id == orgRoleId, asNoTracking: true);

            if (organizationRole == null)
            {
                return(StatusCode(StatusCodes.Status404NotFound, new NotFoundError($"OrganizationRole not found")));
            }

            User user = await GetCurrentUser();

            if (user == null)
            {
                return(StatusCode(StatusCodes.Status404NotFound,
                                  new NotFoundError("Current user not found")));
            }

            ReportTemplateDto reportTemplateDto = _typeAdapter.Adapt <ReportTemplateVM, ReportTemplateDto>(reportTemplateVM);

            var reportTemplateCreationDto = new ReportTemplateCreationDto
            {
                UserId            = user.Id,
                ReportTemplateDto = reportTemplateDto
            };

            ReportTemplate reportTemplate = reportTemplateService.Add(reportTemplateCreationDto);

            _unitOfWork.SaveChanges();

            return(CreatedAtAction(
                       actionName: nameof(Get),
                       routeValues: new
            {
                version = $"{HttpContext.GetRequestedApiVersion()}",
                orgRoleId = organizationRole.Id,
                templateId = reportTemplate.Id
            },
                       value: reportTemplate.Id));
        }
        public async Task <IActionResult> Get([FromRoute] string orgRoleId, [FromRoute] string templateId)
        {
            if (string.IsNullOrEmpty(templateId) || string.IsNullOrWhiteSpace(templateId))
            {
                return(StatusCode(StatusCodes.Status400BadRequest,
                                  new BadRequestError($"{nameof(templateId)}  cannot be null or empty")));
            }

            if (string.IsNullOrEmpty(orgRoleId) || string.IsNullOrWhiteSpace(orgRoleId))
            {
                StatusCode(StatusCodes.Status400BadRequest,
                           new BadRequestError($"{nameof(orgRoleId)}  cannot be null or empty"));
            }

            OrganizationRole organizationRole = organizationRoleService.Get <OrganizationRole>(
                orgRole => orgRole.Id == orgRoleId, asNoTracking: true);

            if (organizationRole == null)
            {
                return(StatusCode(StatusCodes.Status404NotFound, new NotFoundError("OrganizationRole not found")));
            }

            User user = await GetCurrentUser();

            if (user == null)
            {
                return(StatusCode(StatusCodes.Status404NotFound, new NotFoundError("current User not found")));
            }

            ReportTemplateVM reportTemplate = reportTemplateService.Get <ReportTemplateVM>(
                t => t.Id == templateId, asNoTracking: true);

            if (reportTemplate == null)
            {
                return(StatusCode(StatusCodes.Status404NotFound, new NotFoundError("template not found")));
            }

            return(StatusCode(StatusCodes.Status200OK, reportTemplate));
        }
        public async Task <IActionResult> Put([FromRoute] string OrgRoleId, [FromRoute] string templateId, [FromBody] ReportTemplateVM reportTemplateVM)
        {
            if (string.IsNullOrEmpty(OrgRoleId) || string.IsNullOrWhiteSpace(OrgRoleId))
            {
                return(StatusCode(StatusCodes.Status400BadRequest,
                                  new BadRequestError($"{nameof(OrgRoleId)} Parameter cant be null")));
            }

            if (string.IsNullOrEmpty(templateId) || string.IsNullOrWhiteSpace(templateId))
            {
                return(StatusCode(StatusCodes.Status400BadRequest,
                                  new BadRequestError($"{nameof(templateId)} Parameter cant be null")));
            }

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

            OrganizationRole organizationRole = organizationRoleService
                                                .Get <OrganizationRole>(orgRole => orgRole.Id == OrgRoleId);

            if (organizationRole == null)
            {
                return(StatusCode(StatusCodes.Status404NotFound,
                                  new NotFoundError($"OrganizationRole not found")));
            }

            User user = await GetCurrentUser();

            if (user == null)
            {
                return(StatusCode(StatusCodes.Status404NotFound, new NotFoundError("current User not found")));
            }

            ReportTemplateDto reportTemplateDto = _typeAdapter.Adapt <ReportTemplateVM, ReportTemplateDto>(reportTemplateVM);

            var reportTemplateUpdateDto = new ReportTemplateUpdateDto
            {
                UserId             = user.Id,
                ReportTemplateId   = templateId,
                ReportTemplatedDto = reportTemplateDto
            };

            try
            {
                reportTemplateService.Update(reportTemplateUpdateDto);

                if (_unitOfWork.SaveChanges() < 0)
                {
                    return(StatusCode(StatusCodes.Status400BadRequest,
                                      new BadRequestError("Error when trying to update a template")));
                }

                return(StatusCode(StatusCodes.Status200OK));
            }
            catch (InvalidOperationException ex)
            {
                return(StatusCode(StatusCodes.Status400BadRequest,
                                  new BadRequestError(ex.Message)));
            }
        }