Ejemplo n.º 1
0
        /// <summary>Returns back the student information from their WVUP Id and email</summary>
        public async Task <PersonInfoDTO> GetPersonInfo(string identifier)
        {
            var person = await personRepo.Find(x => x.Email == identifier || x.Id.ToString() == identifier);

            var bannerInfo = await bannerApi.GetBannerInfo(identifier);

            var hasSchedule = await scheduleRepo.Exist(x => person is Person && x.SemesterCode == bannerInfo.TermCode && x.PersonId == person.Id);

            // if person has a schedule, just return their schedule
            if (person is Person && hasSchedule)
            {
                var schedule = scheduleRepo.GetAll(x => x.PersonId == person.Id).Select(x => x.Class);
                return(new PersonInfoDTO()
                {
                    Id = person.Id,
                    Email = person.Email,
                    FirstName = person.FirstName,
                    LastName = person.LastName,
                    PersonType = person.PersonType,
                    Schedule = schedule
                });
            }

            var newPerson = new Person()
            {
                Email      = bannerInfo.EmailAddress,
                FirstName  = bannerInfo.FirstName,
                LastName   = bannerInfo.LastName,
                Id         = bannerInfo.WVUPID,
                PersonType = bannerInfo.Teacher ? PersonType.Teacher : PersonType.Student
            };
            var savedPerson = await personRepo.CreateOrUpdate(x => x.Id == newPerson.Id, newPerson);

            var semester = new Semester()
            {
                Code = bannerInfo.TermCode
            };
            var savedSemester = await semesterRepo.CreateOrUpdate(x => x.Code == semester.Code, semester);

            // Done if person is a teacher
            if (savedPerson.PersonType == PersonType.Teacher)
            {
                return(new PersonInfoDTO()
                {
                    Id = savedPerson.Id,
                    Email = savedPerson.Email,
                    FirstName = savedPerson.FirstName,
                    LastName = savedPerson.LastName,
                    PersonType = savedPerson.PersonType
                });
            }
            var departments = bannerInfo.Courses.Select(x => x.Department).Select(x => new Department()
            {
                Code = x.Code,
                Name = x.Name
            });

            foreach (var d in departments)
            {
                await departmentRepo.CreateOrUpdate(x => x.Code == d.Code, d);
            }

            var courses = bannerInfo.Courses.Select(x => new Class()
            {
                CRN            = x.CRN,
                Name           = x.CourseName,
                ShortName      = x.ShortName,
                DepartmentCode = x.Department.Code
            });

            foreach (var c in courses)
            {
                await classRepo.CreateOrUpdate(x => x.CRN == c.CRN, c);

                await scheduleRepo.CreateOrUpdate(x => x.PersonId == savedPerson.Id &&
                                                  x.SemesterCode == bannerInfo.TermCode &&
                                                  x.ClassCRN == c.CRN, new Schedule()
                {
                    SemesterCode = bannerInfo.TermCode,
                    PersonId     = savedPerson.Id,
                    ClassCRN     = c.CRN
                });
            }

            return(new PersonInfoDTO()
            {
                Id = savedPerson.Id,
                Email = savedPerson.Email,
                FirstName = savedPerson.FirstName,
                LastName = savedPerson.LastName,
                PersonType = savedPerson.PersonType,
                Schedule = courses
            });
        }