예제 #1
0
        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()));
                }
            }
        }