コード例 #1
0
 public IActionResult PromoteStudents(PromoteStudentReq request)
 {
     try
     {
         return(Ok(iService.PromoteStudent(request)));
     }
     catch (MyException ex)
     {
         if (ex.Type == MyException.ExceptionType.BadRequest)
         {
             return(BadRequest(ex.Message));
         }
         else if (ex.Type == MyException.ExceptionType.EmptyParameter)
         {
             return(BadRequest(ex.Message));
         }
         else if (ex.Type == MyException.ExceptionType.NotFound)
         {
             return(NotFound(ex.Message));
         }
         else
         {
             return(StatusCode(500));
         }
     }
 }
コード例 #2
0
 public IActionResult PromoteStudent(PromoteStudentReq promotion)
 {
     //try
     //{
     return(Created("", _dbService.PromoteStudent(promotion)));
     //}
     //catch (Exception e)
     //{
     //    Console.WriteLine("Cos poszlo nie tak!!!");
     //    Console.WriteLine(e.StackTrace);
     //    return StatusCode(400);
     //}
 }
コード例 #3
0
ファイル: DBServiceMS.cs プロジェクト: s18734/Cwiczenie3ABDP
 public Models_Zadanie10.Enrollment PromoteStudent(PromoteStudentReq req)
 {
     using (var db = new s18734Context())
     {
         var enroll = db.Enrollment.Where(x => x.Semester == req.Semester)
                      .Join(db.Studies.Where(s => s.Name == req.Studies),
                            e => e.IdStudy, stud => stud.IdStudy,
                            (e, _) => e)
                      .SingleOrDefault();
         if (enroll == null)
         {
             throw new Exception();
         }
         db.Database.ExecuteSqlRaw($"exec procedura1 {req.Studies}, {req.Semester} ");
         enroll.Semester++;
         return(enroll);
     }
 }
コード例 #4
0
        // I typed all the C# code here instead of just calling the procedure.
        // Also, I added some news to this endpoint as well, like you can promote or depromote studens only if a semester you are depromoting to exists.
        // I will add some news again :)
        // If my code is to much and there is exists some useful compact approach, plase let me know.
        #region PromoteStudent(index)
        public List <PromoteStudentRes> PromoteStudent(PromoteStudentReq request)
        {
            // check if the passed paramters are not invalid or empty
            if (string.IsNullOrEmpty(request.Study) || request.OldSemester < 1 || request.NewSemester < 1)
            {
                throw new MyException(MyException.ExceptionType.EmptyParameter, "Please enter valid parameters!");
            }

            // find the IdStudy if the passed study field exists
            var _idStudy = iContext.Studies.Where(i => i.Name == request.Study)
                           .Select(i => i.IdStudy);

            if (_idStudy.Count() < 1)
            {
                throw new MyException(MyException.ExceptionType.NotFound, "This faculty field does not exist!");
            }

            // find the IdEnrollment with given IdStudy and OldSemester parameters
            var _oldSemesterIdEnrollment = iContext.Enrollment
                                           .Where(e => e.IdStudy == _idStudy.First() && e.Semester == request.OldSemester)
                                           .Select(i => i.IdEnrollment).First();

            if (_oldSemesterIdEnrollment < 1)
            {
                throw new MyException(MyException.ExceptionType.NotFound,
                                      $"Semester {request.OldSemester} of {request.Study} field does not exist!");
            }

            // find the idEnrollment with given IdStudy and NewSemester parameters
            var _newSemesterIdEnrollment = iContext.Enrollment
                                           .Where(e => e.IdStudy == _idStudy.First() && e.Semester == request.NewSemester)
                                           .Select(e => e.IdEnrollment).First();

            if (_newSemesterIdEnrollment < 1)
            {
                // if the newSemesterIdEnrollment does not exist, we will create a new enrollment for the promotion
                _newSemesterIdEnrollment = iContext.Enrollment.Max(e => e.IdEnrollment);
                _newSemesterIdEnrollment++;
                var newEnrollment = new Enrollment
                {
                    IdEnrollment = _newSemesterIdEnrollment,
                    Semester     = request.NewSemester,
                    IdStudy      = _idStudy.First(),
                    StartDate    = DateTime.Now
                };
                iContext.Enrollment.Add(newEnrollment);
            }

            // ===============================================================================
            // this is list of students who are being promoted. This is used a return response
            List <PromoteStudentRes> studentsPromoted = new List <PromoteStudentRes>();
            // ===============================================================================

            // getting Ids of all students was in old semester of given study field
            var studentsIDs = iContext.Student.Where(s => s.IdEnrollment == _oldSemesterIdEnrollment)
                              .Select(s => s.IndexNumber).ToList();

            // let's find those students from our DbSet<Student> and promote them
            foreach (var student in iContext.Student)
            {
                for (int i = 0; i < studentsIDs.Count(); i++)
                {
                    if (student.IndexNumber == studentsIDs.ElementAt(i))
                    {
                        studentsPromoted.Add(new PromoteStudentRes
                        {
                            FirstName   = student.FirstName,
                            LastName    = student.LastName,
                            Study       = request.Study,
                            OldSemester = request.OldSemester,
                            NewSemester = request.NewSemester
                        });
                        var res = iContext.Database
                                  .ExecuteSqlRaw(@$ "UPDATE Student SET IdEnrollment={_newSemesterIdEnrollment} 
                                                              WHERE IndexNumber = '{student.IndexNumber}';");