示例#1
0
        public async Task <JsonResult> DeleteDetailClass([FromBody] ClassDetailDto dto)
        {
            WebApiSimpleResponse <ClassDetail> res;

            try
            {
                if (dto == null)
                {
                    throw new Exception("Entity not found");
                }

                var detailClassEntity = _classDetailRepository.GetAll().FirstOrDefault(x => x.Id == dto.ClassDetailId);
                if (detailClassEntity == null)
                {
                    throw new Exception("Invalid detail class is selected");
                }

                var studentsInClass = _classDetailStudentRepository.GetAll()
                                      .Where(x => x.ClassDetailId == dto.ClassDetailId);
                if (studentsInClass.Count() > 0)
                {
                    throw new Exception("The given class has some students");
                }

                await _classDetailRepository.Delete(new ClassDetail
                {
                    Id = dto.ClassDetailId
                });

                res = new WebApiSimpleResponse <ClassDetail>
                {
                    Result  = detailClassEntity,
                    Message = ResponseMessage.OperationSucceeded.GetDescription()
                };
            }
            catch (Exception ex)
            {
                Logger.ErrorException(ex.Message, ex);
                res = new WebApiSimpleResponse <ClassDetail>
                {
                    ErrorFlag = true,
                    Message   = ResponseMessage.OperationFailed.GetDescription()
                };
            }

            return(new JsonResult(res));
        }
示例#2
0
        public async Task <JsonResult> SaveDetailClass([FromBody] ClassDetailDto dto)
        {
            WebApiSimpleResponse <ClassDetail> res;

            try
            {
                if (dto == null)
                {
                    throw new Exception("Entity not found");
                }

                var masterClassEntity = _classMasterRepository.GetAll().FirstOrDefault(x => x.Id == dto.ClassMasterId);
                if (masterClassEntity == null)
                {
                    throw new Exception("Master class not found");
                }

                var detailClassEntity = await _classDetailRepository.Insert(new ClassDetail
                {
                    ClassMasterId    = dto.ClassMasterId,
                    CreationDate     = DateTime.Now,
                    ModificationDate = DateTime.Now
                });

                res = new WebApiSimpleResponse <ClassDetail>
                {
                    Result  = detailClassEntity,
                    Message = ResponseMessage.OperationSucceeded.GetDescription()
                };
            }
            catch (Exception ex)
            {
                Logger.ErrorException(ex.Message, ex);
                res = new WebApiSimpleResponse <ClassDetail>
                {
                    ErrorFlag = true,
                    Message   = ResponseMessage.OperationFailed.GetDescription()
                };
            }

            return(new JsonResult(res));
        }
示例#3
0
        public async Task DeleteStudent()
        {
            var options = new DbContextOptionsBuilder <BackendTestDbContext>()
                          .UseInMemoryDatabase(databaseName: "UpdateStudentDatabase")
                          .Options;

            var savedMasterClass = new ClassMaster();
            var savedDetailClass = new ClassDetail();

            #region SaveMasterClass

            using (var context = new BackendTestDbContext(options))
            {
                var classMasterRepository        = new ClassMasterRepository(context);
                var classDetailRepository        = new ClassDetailRepository(context);
                var studentRepository            = new StudentRepository(context);
                var classDetailStudentRepository = new ClassDetailStudentRepository(context);
                var classController = new ClassController(classMasterRepository, classDetailRepository,
                                                          studentRepository, classDetailStudentRepository);

                var toBeSavedEntity = new ClassMasterDto
                {
                    Classname   = "Computer Engineering",
                    Location    = "Some where",
                    TeacherName = "Dr. Demberg"
                };

                var rawJson = await classController.SaveMasterClass(toBeSavedEntity);

                var res = (WebApiSimpleResponse <ClassMaster>)rawJson.Value;
                savedMasterClass = res.Result;

                Assert.IsFalse(res.ErrorFlag);
            }

            #endregion

            #region SaveDetailClass

            using (var context = new BackendTestDbContext(options))
            {
                var classMasterRepository        = new ClassMasterRepository(context);
                var classDetailRepository        = new ClassDetailRepository(context);
                var studentRepository            = new StudentRepository(context);
                var classDetailStudentRepository = new ClassDetailStudentRepository(context);
                var classController = new ClassController(classMasterRepository, classDetailRepository,
                                                          studentRepository, classDetailStudentRepository);

                var toBeSavedEntity = new ClassDetailDto
                {
                    ClassMasterId = savedMasterClass.Id
                };

                var rawJson = await classController.SaveDetailClass(toBeSavedEntity);

                var res = (WebApiSimpleResponse <ClassDetail>)rawJson.Value;
                savedDetailClass = res.Result;

                Assert.IsFalse(res.ErrorFlag);
            }

            #endregion


            var student = new Student();

            #region SaveStudent

            using (var context = new BackendTestDbContext(options))
            {
                var _studentRepository            = new StudentRepository(context);
                var _classDetailStudentRepository = new ClassDetailStudentRepository(context);
                var studentController             = new StudentController(_studentRepository, _classDetailStudentRepository);

                var toBeSavedStudent = new StudentDto
                {
                    FirstName = "John",
                    LastName  = "Smith",
                    Gpa       = (decimal)15.2,
                    Age       = 20
                };

                var rawJsonRes1 = await studentController.SaveStudent(toBeSavedStudent);

                student = ((WebApiSimpleResponse <Student>)rawJsonRes1.Value).Result;
                Assert.IsFalse(((WebApiSimpleResponse <Student>)rawJsonRes1.Value).ErrorFlag);
            }

            #endregion

            #region AddStudentToDetailClass

            using (var context = new BackendTestDbContext(options))
            {
                var classMasterRepository        = new ClassMasterRepository(context);
                var classDetailRepository        = new ClassDetailRepository(context);
                var studentRepository            = new StudentRepository(context);
                var classDetailStudentRepository = new ClassDetailStudentRepository(context);
                var classController = new ClassController(classMasterRepository, classDetailRepository,
                                                          studentRepository, classDetailStudentRepository);

                var toBeSavedEntity = new ClassDetailDto
                {
                    ClassDetailId = savedDetailClass.Id,
                    StudentDtos   = new List <StudentDto>
                    {
                        new StudentDto
                        {
                            Id = student.Id
                        }
                    }
                };

                var rawJson = await classController.AddStudentsToDetailClass(toBeSavedEntity);

                var res = (WebApiSimpleResponse <ClassDetailStudent>)rawJson.Value;

                Assert.IsFalse(res.ErrorFlag);
            }

            #endregion

            #region DeleteWithNullValue

            using (var context = new BackendTestDbContext(options))
            {
                var _studentRepository            = new StudentRepository(context);
                var _classDetailStudentRepository = new ClassDetailStudentRepository(context);
                var studentController             = new StudentController(_studentRepository, _classDetailStudentRepository);

                var rawJsonDelete = await studentController.DeleteStudent(null);

                var deleteStudentRes = (WebApiSimpleResponse <Student>)rawJsonDelete.Value;
                Assert.IsTrue(deleteStudentRes.ErrorFlag);
            }

            #endregion

            #region DeleteAStudentEnrolledInAClass

            using (var context = new BackendTestDbContext(options))
            {
                var _studentRepository            = new StudentRepository(context);
                var _classDetailStudentRepository = new ClassDetailStudentRepository(context);
                var studentController             = new StudentController(_studentRepository, _classDetailStudentRepository);

                var toBeDeletedStudent = new StudentDto
                {
                    Id = student.Id,
                };

                var rawJsonDelete = await studentController.DeleteStudent(toBeDeletedStudent);

                var deleteStudentRes = (WebApiSimpleResponse <Student>)rawJsonDelete.Value;
                Assert.IsTrue(deleteStudentRes.ErrorFlag);
            }

            #endregion

            #region RemoveStudentFromDetailClass

            using (var context = new BackendTestDbContext(options))
            {
                var classMasterRepository        = new ClassMasterRepository(context);
                var classDetailRepository        = new ClassDetailRepository(context);
                var studentRepository            = new StudentRepository(context);
                var classDetailStudentRepository = new ClassDetailStudentRepository(context);
                var classController = new ClassController(classMasterRepository, classDetailRepository,
                                                          studentRepository, classDetailStudentRepository);

                var toBeSavedEntity = new ClassDetailDto
                {
                    ClassDetailId = savedDetailClass.Id,
                    StudentDtos   = new List <StudentDto>
                    {
                        new StudentDto
                        {
                            Id = student.Id
                        }
                    }
                };

                var rawJson = await classController.RemoveStudentsFromDetailClass(toBeSavedEntity);

                var res = (WebApiSimpleResponse <ClassMasterDto>)rawJson.Value;

                Assert.IsFalse(res.ErrorFlag);
            }

            #endregion

            #region NiceStudentDelete

            using (var context = new BackendTestDbContext(options))
            {
                var _studentRepository            = new StudentRepository(context);
                var _classDetailStudentRepository = new ClassDetailStudentRepository(context);
                var studentController             = new StudentController(_studentRepository, _classDetailStudentRepository);

                var toBeDeletedStudent = new StudentDto
                {
                    Id = student.Id,
                };

                var rawJsonDelete = await studentController.DeleteStudent(toBeDeletedStudent);

                var deleteStudentRes = (WebApiSimpleResponse <Student>)rawJsonDelete.Value;
                Assert.IsFalse(deleteStudentRes.ErrorFlag);

                var rawJsonGetStudentById = studentController.GetStudentById(toBeDeletedStudent.Id);
                var getStudentByIdRes     = (WebApiSimpleResponse <StudentDto>)rawJsonGetStudentById.Value;

                Assert.IsTrue(getStudentByIdRes.ErrorFlag);
            }

            #endregion

            #region InvalidId

            using (var context = new BackendTestDbContext(options))
            {
                var _studentRepository            = new StudentRepository(context);
                var _classDetailStudentRepository = new ClassDetailStudentRepository(context);
                var studentController             = new StudentController(_studentRepository, _classDetailStudentRepository);

                var toBeDeletedStudent = new StudentDto
                {
                    Id = student.Id,
                };

                var rawJsonDelete = await studentController.DeleteStudent(toBeDeletedStudent);

                var deleteStudentRes = (WebApiSimpleResponse <Student>)rawJsonDelete.Value;
                Assert.IsTrue(deleteStudentRes.ErrorFlag);
            }

            #endregion
        }
示例#4
0
        public async Task <JsonResult> RemoveStudentsFromDetailClass([FromBody] ClassDetailDto dto)
        {
            WebApiSimpleResponse <ClassMasterDto> res;

            try
            {
                if (dto == null)
                {
                    throw new Exception("Entity not found");
                }

                var detailClassEntity = _classDetailRepository.GetAll().FirstOrDefault(x => x.Id == dto.ClassDetailId);
                if (detailClassEntity == null)
                {
                    throw new Exception("Detail class not found");
                }

                if (dto.StudentDtos == null || dto.StudentDtos.Count <= 0)
                {
                    throw new Exception("No student is selcted!");
                }

                var toBeRemovedEntities = new List <ClassDetailStudent>();
                foreach (var studentDto in dto.StudentDtos)
                {
                    var studentEntity = _studentRepository.GetAll().FirstOrDefault(x => x.Id == studentDto.Id);
                    if (studentEntity == null)
                    {
                        throw new Exception("Student not found");
                    }

                    var detailClassStudentEntity = _classDetailStudentRepository.GetAll()
                                                   .FirstOrDefault(x => x.ClassDetailId == detailClassEntity.Id && x.StudentId == studentDto.Id);
                    if (detailClassStudentEntity == null)
                    {
                        throw new Exception("The given student is not registered in the given class");
                    }

                    toBeRemovedEntities.Add(detailClassStudentEntity);
                }

                foreach (var classDetailStudent in toBeRemovedEntities)
                {
                    await _classDetailStudentRepository.Delete(classDetailStudent);
                }

                res = new WebApiSimpleResponse <ClassMasterDto>
                {
                    Message = ResponseMessage.OperationSucceeded.GetDescription()
                };
            }
            catch (Exception ex)
            {
                Logger.ErrorException(ex.Message, ex);
                res = new WebApiSimpleResponse <ClassMasterDto>
                {
                    ErrorFlag = true,
                    Message   = ResponseMessage.OperationFailed.GetDescription()
                };
            }

            return(new JsonResult(res));
        }
示例#5
0
        public async Task <JsonResult> AddStudentsToDetailClass([FromBody] ClassDetailDto dto)
        {
            WebApiSimpleResponse <ClassDetailStudent> res;

            try
            {
                if (dto == null)
                {
                    throw new Exception("Entity not found");
                }

                if (dto.StudentDtos == null || dto.StudentDtos.Count <= 0)
                {
                    throw new Exception("No student is selcted!");
                }

                var detailClassEntity = _classDetailRepository.GetAll().FirstOrDefault(x => x.Id == dto.ClassDetailId);
                if (detailClassEntity == null)
                {
                    throw new Exception("Detail class not found");
                }

                var detailClassStudents = _classDetailStudentRepository.GetAll().Where(x => x.ClassDetailId == dto.ClassDetailId);

                var toBeSavedEntities = new List <ClassDetailStudent>();
                var newStudents       = new List <Student>();
                foreach (var studentDto in dto.StudentDtos)
                {
                    var studentEntity = _studentRepository.GetAll().FirstOrDefault(x => x.Id == studentDto.Id);
                    if (studentEntity == null)
                    {
                        throw new Exception("Student not found");
                    }

                    var detailClassStudentEntity =
                        detailClassStudents.FirstOrDefault(x => x.StudentId == studentDto.Id);
                    if (detailClassStudentEntity != null)
                    {
                        throw new Exception("The given student is already registered in the given class");
                    }

                    var doesStudentWithSameSurnameExist =
                        detailClassStudents.Count(x => x.Student.LastName == studentEntity.LastName);
                    if (doesStudentWithSameSurnameExist > 0)
                    {
                        throw new Exception("Students with duplicate surnames in the same class!");
                    }

                    var toBeSavedDuplicateSurname =
                        newStudents.FirstOrDefault(x => x.LastName == studentEntity.LastName);
                    if (toBeSavedDuplicateSurname != null)
                    {
                        throw new Exception("Students with duplicate surnames in the same class!");
                    }

                    toBeSavedEntities.Add(new ClassDetailStudent
                    {
                        StudentId        = studentDto.Id,
                        ClassDetailId    = detailClassEntity.Id,
                        CreationDate     = DateTime.Now,
                        ModificationDate = DateTime.Now
                    });

                    newStudents.Add(studentEntity);
                }

                foreach (var classDetailStudent in toBeSavedEntities)
                {
                    await _classDetailStudentRepository.Insert(classDetailStudent);
                }

                res = new WebApiSimpleResponse <ClassDetailStudent>
                {
                    Message = ResponseMessage.OperationSucceeded.GetDescription()
                };
            }
            catch (Exception ex)
            {
                Logger.ErrorException(ex.Message, ex);
                res = new WebApiSimpleResponse <ClassDetailStudent>
                {
                    ErrorFlag = true,
                    Message   = ResponseMessage.OperationFailed.GetDescription()
                };
            }

            return(new JsonResult(res));
        }
示例#6
0
        public JsonResult GetDetailClass(int masterClassId)
        {
            WebApiSimpleResponse <ClassDetailDto> res;

            try
            {
                var classMasterEntity = _classMasterRepository.GetAll().FirstOrDefault(x => x.Id == masterClassId);
                if (classMasterEntity == null)
                {
                    var ex = new Exception("Class not found");
                    throw ex;
                }

                var classDetailEntity = _classDetailRepository.GetAll().FirstOrDefault(x => x.ClassMasterId == masterClassId);
                if (classDetailEntity == null)
                {
                    var ex = new Exception("Class not found");
                    throw ex;
                }

                var classDetailStudentEntity = _classDetailStudentRepository.GetAll()
                                               .Where(x => x.ClassDetailId == classDetailEntity.Id).Select(x => x.Student).ToList();


                var lst = new ClassDetailDto
                {
                    ClassDetailId = classDetailEntity.Id,
                    ClassName     = classMasterEntity.ClassName,
                    ClassMasterId = classMasterEntity.Id,
                    StudentDtos   = new List <StudentDto>()
                };

                if (classDetailStudentEntity.Count > 0)
                {
                    foreach (var classDetailStudent in classDetailStudentEntity)
                    {
                        lst.StudentDtos.Add(new StudentDto
                        {
                            Id        = classDetailStudent.Id,
                            LastName  = classDetailStudent.LastName,
                            FirstName = classDetailStudent.FirstName,
                            Gpa       = classDetailStudent.Gpa,
                            Age       = classDetailStudent.Age
                        });
                    }
                }

                res = new WebApiSimpleResponse <ClassDetailDto>
                {
                    Result  = lst,
                    Message = ResponseMessage.OperationSucceeded.GetDescription()
                };
            }
            catch (Exception ex)
            {
                Logger.ErrorException(ex.Message, ex);
                res = new WebApiSimpleResponse <ClassDetailDto>
                {
                    ErrorFlag = true,
                    Message   = ResponseMessage.OperationFailed.GetDescription()
                };
            }

            return(new JsonResult(res));
        }