예제 #1
0
 public IActionResult UpdateStudent([FromQuery] string Ind, [FromBody] Student stud)
 {
     try
     {
         var output = _context.Student.Where(st => st.IndexNumber.Equals(Ind)).FirstOrDefault();
         output.FirstName    = stud.FirstName;
         output.LastName     = stud.LastName;
         output.BirthDate    = stud.BirthDate;
         output.IdEnrollment = stud.IdEnrollment;
         if (stud.Password != null)
         {
             output.Password = PasswordHasherService.GenerateSaltedHash(stud.Password, output.Salt);
         }
         _context.SaveChanges();
         return(Ok("Successfuly edited student!"));
     }catch (NullReferenceException ex)
     {
         return(BadRequest("No student found"));
     }
 }
예제 #2
0
        public EnrollResponse EnrollStudent(EnrollRequest request)
        {
            EnrollResponse enrollResponse = new EnrollResponse();

            using (var client = new SqlConnection("Data Source = db-mssql.pjwstk.edu.pl; Initial Catalog = s16796; Integrated Security = True"))
            {
                using (var command = new SqlCommand())
                {
                    command.Connection = client;
                    client.Open();
                    var transaction = client.BeginTransaction();
                    command.Transaction = transaction;
                    command.CommandText = "Select IdStudy FROM Studies where Name=@name";
                    command.Parameters.AddWithValue("name", request.Studies);
                    var dr = command.ExecuteReader();
                    if (!dr.Read())
                    {
                        dr.Close();
                        transaction.Rollback();
                        throw new ArgumentException("No studies found with that name");
                    }
                    else
                    {
                        enrollResponse.IdStudies = Convert.ToInt32(dr["IdStudy"].ToString());
                        enrollResponse.Semester  = 1;
                        enrollResponse.Studies   = request.Studies;
                    }
                    dr.Close();
                    command.Parameters.Clear();
                    command.CommandText = "SELECT IdEnrollment, StartDate FROM Enrollment WHERE semester = 1 AND IdStudy = @id order by StartDate desc";
                    command.Parameters.AddWithValue("id", enrollResponse.IdStudies);
                    dr = command.ExecuteReader();
                    if (dr.Read())
                    {
                        enrollResponse.IdEnrollment = Convert.ToInt32(dr["IdEnrollment"].ToString());
                        enrollResponse.StartDate    = Convert.ToDateTime(dr["StartDate"]);
                    }
                    else
                    {
                        //enrollment nie istnieje!
                        dr.Close();
                        command.CommandText = "INSERT INTO Enrollment(IdEnrollment, Semester, IdStudy, StartDate) OUTPUT Inserted.IdEnrollment VALUES((SELECT MAX(IdEnrollment) FROM Enrollment) + 1, 1, @id, @startdate)";
                        command.Parameters.AddWithValue("startdate", DateTime.Now);
                        dr = command.ExecuteReader();
                        dr.Read();
                        enrollResponse.IdEnrollment = Convert.ToInt32(dr["IdEnrollment"].ToString());
                        enrollResponse.StartDate    = DateTime.Now.Date;
                    }

                    dr.Close();
                    var studentsalt = GetSalt(32);
                    command.Parameters.Clear();
                    command.CommandText = "INSERT INTO Student(IndexNumber, FirstName, LastName, BirthDate, IdEnrollment, Password, Salt) VALUES(@index, @first, @last, @birth, @enrollment, @Password, @Salt)";
                    command.Parameters.AddWithValue("index", request.IndexNumber);
                    command.Parameters.AddWithValue("first", request.FirstName);
                    command.Parameters.AddWithValue("last", request.LastName);
                    command.Parameters.AddWithValue("birth", DateTime.ParseExact(request.BirthDate, "dd.MM.yyyy", null));
                    command.Parameters.AddWithValue("enrollment", enrollResponse.IdEnrollment);
                    command.Parameters.AddWithValue("Password", PasswordHasherService.GenerateSaltedHash(request.Password, studentsalt));
                    command.Parameters.AddWithValue("Salt", studentsalt);

                    try
                    {
                        dr = command.ExecuteReader();
                        enrollResponse.IndexNumber = request.IndexNumber;
                    }
                    catch (Exception exc)
                    {
                        Console.WriteLine(exc);
                        dr.Close();
                        transaction.Rollback();
                        throw new ArgumentException("This index already exists");
                    }

                    dr.Close();
                    transaction.Commit();
                    return(enrollResponse);
                }
            }
        }
예제 #3
0
        public EnrollResponse EnrollStudent(EnrollRequest request, s16796Context context)
        {
            EnrollResponse enrollResponse = new EnrollResponse();

            context.Database.BeginTransaction();

            var test = context.Student.Where(student => student.IndexNumber.Equals(request.IndexNumber)).FirstOrDefault();

            if (test != null)
            {
                throw new ArgumentException("Index taken!");
            }
            enrollResponse.IndexNumber = request.IndexNumber;

            try
            {
                enrollResponse.IdStudies = context.Studies.Where(studies => studies.Name.Equals(request.Studies)).Select(studies => studies.IdStudy).FirstOrDefault();
            }catch (InvalidOperationException ex)
            {
                context.Database.RollbackTransaction();
                throw new ArgumentException("No studies found with that name");
            }
            enrollResponse.Semester = 1;
            enrollResponse.Studies  = request.Studies;

            try
            {
                var output = context.Enrollment.Where(enroll => enroll.Semester == 1 && enroll.IdStudy == enrollResponse.IdStudies).Select(enr => new
                {
                    IdEnrollment = enr.IdEnrollment,
                    StartDate    = enr.StartDate
                }).First();
                enrollResponse.IdEnrollment = output.IdEnrollment;
                enrollResponse.StartDate    = output.StartDate;
            }catch (InvalidOperationException ex)
            {
                enrollResponse.IdEnrollment = context.Enrollment.Max(enr => enr.IdEnrollment) + 1;
                enrollResponse.StartDate    = DateTime.Now.Date;
                var enrollmentadd = new Enrollment()
                {
                    IdEnrollment = enrollResponse.IdEnrollment,
                    Semester     = 1,
                    IdStudy      = enrollResponse.IdStudies,
                    StartDate    = enrollResponse.StartDate
                };
                context.Enrollment.Add(enrollmentadd);
            }

            var studentsalt = GetSalt(32);

            var nowystudent = new Student()
            {
                IndexNumber  = request.IndexNumber,
                FirstName    = request.FirstName,
                LastName     = request.LastName,
                BirthDate    = DateTime.ParseExact(request.BirthDate, "dd.MM.yyyy", null),
                IdEnrollment = enrollResponse.IdEnrollment,
                Password     = PasswordHasherService.GenerateSaltedHash(request.Password, studentsalt),
                Salt         = studentsalt
            };

            context.Student.Add(nowystudent);
            context.SaveChanges();
            context.Database.CommitTransaction();

            return(enrollResponse);
        }