public async Task <IActionResult> ConfirmResource([FromRoute] int openingId) { if (openingId == 0) { var error = new BadRequestException($"The given opening {openingId} is invalid"); return(StatusCode(StatusCodes.Status400BadRequest, new CustomException <BadRequestException>(error).GetException())); } try { Position position = await positionsRepository.GetAPosition(openingId); if (position == null) { var error = new NotFoundException($"Invalid positionId {openingId}."); return(StatusCode(StatusCodes.Status404NotFound, new CustomException <NotFoundException>(error).GetException())); } if (position.ResourceId == null || position.ResourceId == "") { var error = new BadRequestException($"Position {position.Id} does not have a resource assigned."); return(StatusCode(StatusCodes.Status400BadRequest, new CustomException <BadRequestException>(error).GetException())); } position.IsConfirmed = true; var updatedPosition = await positionsRepository.UpdateAPosition(position); IEnumerable <Position> positionsOfUser = await positionsRepository.GetAllPositionsOfUser(position.ResourceId); IEnumerable <OutOfOffice> outOfOfficesOfUser = await outOfOfficeRepository.GetAllOutOfOfficeForUser(position.ResourceId); var utilization = await utilizationRepository.CalculateUtilizationOfUser(positionsOfUser, outOfOfficesOfUser); await usersRepository.UpdateUtilizationOfUser(utilization, position.ResourceId); RequestProjectAssign response = new RequestProjectAssign { OpeningId = openingId, UserID = position.ResourceId, ConfirmedUtilization = utilization }; return(StatusCode(StatusCodes.Status200OK, response)); } catch (Exception err) { var errMessage = $"Source: {err.Source}\n Message: {err.Message}\n StackTrace: {err.StackTrace}\n"; if (err is SqlException) { var error = new InternalServerException(errMessage); return(StatusCode(StatusCodes.Status500InternalServerError, new CustomException <InternalServerException>(error).GetException())); } else { var error = new BadRequestException(errMessage); return(StatusCode(StatusCodes.Status400BadRequest, new CustomException <BadRequestException>(error).GetException())); } } }
public async Task <IActionResult> GetAUser(string userId) { try { var user = await usersRepository.GetAUserResource(userId); if (user == null) { var error = new NotFoundException($"No users with userId '{userId}' found"); return(StatusCode(StatusCodes.Status404NotFound, new CustomException <NotFoundException>(error).GetException())); } var userSummary = mapper.Map <UserResource, UserSummary>(user); var projects = await projectsRepository.GetAllProjectResourcesOfUser(userId); var positionsResource = await positionsRepository.GetPositionsOfUser(userId); var positions = mapper.Map <IEnumerable <PositionResource>, IEnumerable <PositionSummary> >(positionsResource); var disciplines = await disciplinesRepository.GetUserDisciplines(userId); var skills = await skillsRepository.GetUserSkills(userId); var outOfOffice = await outOfOfficeRepository.GetAllOutOfOfficeForUser(userId); IEnumerable <ResourceDisciplineResource> disciplineResources = Enumerable.Empty <ResourceDisciplineResource>(); foreach (var discipline in disciplines) { var discSkills = skills.Where(x => x.ResourceDisciplineName == discipline.Name); var disc = new ResourceDisciplineResource { DisciplineID = discipline.DisciplineId, Discipline = discipline.Name, YearsOfExp = discipline.YearsOfExperience, Skills = discSkills.Select(x => x.Name).ToHashSet() }; disciplineResources = disciplineResources.Append(disc); } var userProfile = new UserProfile { UserSummary = userSummary, Availability = mapper.Map <IEnumerable <OutOfOffice>, IEnumerable <OutOfOfficeResource> >(outOfOffice), CurrentProjects = mapper.Map <IEnumerable <ProjectResource>, IEnumerable <ProjectSummary> >(projects), Disciplines = disciplineResources, Positions = positions }; var response = new OkResponse <UserProfile>(userProfile, "Everything is good"); return(StatusCode(StatusCodes.Status200OK, response)); } catch (Exception err) { var errMessage = $"Source: {err.Source}\n Message: {err.Message}\n StackTrace: {err.StackTrace}\n"; if (err is SqlException) { var error = new InternalServerException(errMessage); return(StatusCode(StatusCodes.Status500InternalServerError, new CustomException <InternalServerException>(error).GetException())); } else { var error = new BadRequestException(errMessage); return(StatusCode(StatusCodes.Status400BadRequest, new CustomException <BadRequestException>(error).GetException())); } } }