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)); } } }
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); //} }
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); } }
// 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}';");