public IHttpActionResult UpdateTestStructure(int AdminId, TestStructure testStructure)
 {
     using (db_OnlineExaminationEntities db = new db_OnlineExaminationEntities())
     {
         TestStructure oldData = db.TestStructures /*.AsNoTracking()*/.Where(ts => ts.Id == testStructure.Id).FirstOrDefault();
         if (oldData == null || !oldData.IsCurrent)
         {
             return(NotFound());
         }
         oldData.SetProperties(AdminId: AdminId, IsCurrent: false /*, SetNumberOfQuestions: false*/);
         db.SaveChanges();
         testStructure.Id = 0;
         if (testStructure.SetProperties(AdminId: AdminId))
         {
             db.TestStructures.Add(testStructure);
             try
             {
                 db.SaveChanges();
             }
             catch (DbUpdateException)
             {
                 if (TestStructureExists(testStructure.Id))
                 {
                     return(Conflict());
                 }
                 else
                 {
                     throw;
                 }
             }
             return(Ok(testStructure));
         }
         return(BadRequest());
     }
 }
 public IHttpActionResult AddTestStructure(int AdminId, TestStructure testStructure)
 {
     using (db_OnlineExaminationEntities db = new db_OnlineExaminationEntities())
     {
         if (TestStructureExists(testStructure.Technology, testStructure.Level))
         {
             return(Ok(new TestStructure()));
         }
         if (testStructure.SetProperties(AdminId: AdminId))
         {
             db.TestStructures.Add(testStructure);
             try
             {
                 db.SaveChanges();
             }
             catch (DbUpdateException)
             {
                 if (TestStructureExists(testStructure.Id))
                 {
                     return(Conflict());
                 }
                 else
                 {
                     throw;
                 }
             }
             return(CreatedAtRoute("DefaultApi", new { id = testStructure.Id }, testStructure));
         }
         return(BadRequest());
     }
 }
 private bool TestStructureExists(string Technology, int Level)
 {
     using (db_OnlineExaminationEntities db = new db_OnlineExaminationEntities())
     {
         return(db.TestStructures.Count(t => t.Technology == Technology && t.Level == Level && t.IsCurrent == true) > 0);
     }
 }
 private bool TestStructureExists(int id)
 {
     using (db_OnlineExaminationEntities db = new db_OnlineExaminationEntities())
     {
         return(db.TestStructures.Count(t => t.Id == id) > 0);
     }
 }
 public List <TestStructure> GetAllTestStructures()
 {
     using (db_OnlineExaminationEntities db = new db_OnlineExaminationEntities())
     {
         //If Admin
         return(db.TestStructures.Where(ts => ts.IsCurrent == true).ToList());
     }
 }
 public IHttpActionResult DeleteTestStructure(int AdminId, int TestStructureId)
 {
     using (db_OnlineExaminationEntities db = new db_OnlineExaminationEntities())
     {
         TestStructure testStructure = db.TestStructures.Find(TestStructureId);
         if (testStructure == null || !testStructure.IsCurrent)
         {
             return(NotFound());
         }
         testStructure.SetProperties(AdminId: AdminId, IsCurrent: false /*, SetNumberOfQuestions: false*/);
         db.SaveChanges();
         return(Ok(testStructure));
     }
 }
 public List <TestStructure> GetTestOptions(int UserId)
 {
     using (db_OnlineExaminationEntities db = new db_OnlineExaminationEntities())
     {
         List <TestStructure> testOptions = db.TestStructures.Where(ts => ts.IsCurrent == true).ToList();
         List <Test>          userTests   = db.Tests.Where(t => t.UserId == UserId && t.TestStructure.IsCurrent == true &&
                                                           t.Result == true).ToList();
         foreach (Test test in userTests)
         {
             testOptions.Remove(test.TestStructure);
         }
         var testGroup = testOptions.GroupBy(t => t.Technology);
         foreach (var groupItem in testGroup)
         {
             foreach (TestStructure structure in groupItem)
             {
                 testOptions.Remove(testOptions.Find(t => t.Technology == structure.Technology && t.Level > structure.Level));
             }
         }
         return(testOptions);
     }
 }