Example #1
0
        public IActionResult PromoteStudents(PromoteStudentsDTO promoteStudents)
        {
            var studies = _studentsDbContext.Studies
                          .Include(x => x.Enrollments)
                          .FirstOrDefault(x => x.Name == promoteStudents.Studies);

            if (studies == null)
            {
                return(NotFound($"Nie znaleziono kierunku studiow {promoteStudents.Studies}"));
            }

            if (studies.Enrollments.All(x => x.Semester != promoteStudents.Semester))
            {
                return(NotFound($"Nie znaleziono semestru {promoteStudents.Semester}"));
            }

            // sprawdź czy istnieje enrollment dla następnego semestru
            var nextSemesterEnrollment = studies.Enrollments
                                         .OrderByDescending(x => x.StartDate)
                                         .FirstOrDefault(x => x.Semester == promoteStudents.Semester + 1);

            if (nextSemesterEnrollment == null)
            {
                // tworzymy nowy enrollment z semestrem + 1
                nextSemesterEnrollment = new ModelsEf.Enrollment()
                {
                    IdEnrollment = _studentsDbContext.Enrollment.Max(x => x.IdEnrollment) + 1,
                    Studies      = studies,
                    StartDate    = DateTime.Now,
                    Semester     = promoteStudents.Semester + 1
                };

                _studentsDbContext.Enrollment.Add(nextSemesterEnrollment);
            }

            // promujemy studentow
            var studentsToPromote = _studentsDbContext.Student
                                    .Where(x => x.Enrollment.Studies == studies && x.Enrollment.Semester == promoteStudents.Semester)
                                    .ToList();

            foreach (var student in studentsToPromote)
            {
                student.Enrollment = nextSemesterEnrollment;
            }

            _studentsDbContext.SaveChanges();

            return(Created("", nextSemesterEnrollment));
        }
Example #2
0
        public IActionResult CreateStudent(CreateStudentDTO createStudentDto)
        {
            var studies = _studentsDbContext.Studies
                          .Include(x => x.Enrollments)
                          .FirstOrDefault(x => x.Name == createStudentDto.Studies);

            if (studies == null)
            {
                return(BadRequest($"Nie znaleziono kierunku studiow {createStudentDto.Studies}"));
            }

            if (_studentsDbContext.Student.Any(x => x.IndexNumber == createStudentDto.IndexNumber))
            {
                return(BadRequest($"Istnieje juz student z numerem indeksu {createStudentDto.IndexNumber}"));
            }

            var enrollment = studies.Enrollments.OrderByDescending(x => x.StartDate)
                             .FirstOrDefault(x => x.Semester == 1);

            if (enrollment == null)
            {
                enrollment = new ModelsEf.Enrollment()
                {
                    IdEnrollment = _studentsDbContext.Enrollment.Max(x => x.IdEnrollment) + 1,
                    Studies      = studies,
                    StartDate    = DateTime.Now,
                    Semester     = 1
                };

                _studentsDbContext.Enrollment.Add(enrollment);
            }

            var password = PasswordHelper.HashPassword(createStudentDto.Password);
            var student  = new Student()
            {
                IndexNumber  = createStudentDto.IndexNumber,
                Password     = password.PasswordHash,
                PasswordSalt = password.Salt,
                LastName     = createStudentDto.LastName,
                FirstName    = createStudentDto.FirstName,
                BirthDate    = createStudentDto.BirthDate,
                Enrollment   = enrollment
            };

            _studentsDbContext.Student.Add(student);
            _studentsDbContext.SaveChanges();

            return(Created("", enrollment));
        }