/// <summary> /// Inserta una nueva entidad profesor /// </summary> /// <param name="entity"> /// La entidad profesor a guardar /// </param> /// <exception cref="DniDuplicateEntryException"> /// Lanza DniDuplicateEntryException si ya existe /// un profesor con el mismo dni /// </exception> /// <returns> /// Retorna la entidad profesor guardada /// con su Id generado /// </returns> public async Task <TeacherEntity> Save(TeacherEntity entity) { try { await _dbContext.TeacherEntities.AddAsync(entity); await _dbContext.SaveChangesAsync(); _logger.LogInformation("El profesor se ha guardado correctamente"); } catch (DbUpdateException ex) { if (ex.InnerException.Message.Contains("UQ_dni")) { _logger.LogWarning("El profesor no se ha actualizado " + "porque su dni ya existe en la base de datos"); throw new DniDuplicateEntryException(); } //Por cualquier otra razon lanzo la excepción else { throw ex; } } return(entity); }
/// <summary> /// Inserta una nueva entidad asignatura /// </summary> /// <param name="subjectEntity"> /// La entidad asignatura a guardar /// </param> /// <exception cref="SubjectNameDuplicateEntryException"> /// Lanza SubjectNameDuplicateEntryException si el nombre de la /// asignatura ya existe /// </exception> /// <returns> /// Retorna la entidad asignatura guardada /// con el id generado /// </returns> public async Task <SubjectEntity> Save(SubjectEntity subjectEntity) { try { await _dbContext.SubjectEntities.AddAsync(subjectEntity); await _dbContext.SaveChangesAsync(); _logger.LogInformation("Asignatura guardada correctamente"); } catch (DbUpdateException ex) { if (ex.InnerException.Message.Contains("UQ_subject_name")) { _logger.LogWarning("La asignatura no se ha guardado porque " + "su nombre ya existe"); throw new SubjectNameDuplicateEntryException(); } //Cualquier otra razón, lanzo la excepción else { throw ex; } } return(subjectEntity); }
/// <summary> /// Agrega una nueva asignatura a un curso /// llamando un procedimiento de la base de datos que: /// - inserta la relacion entre la asignatura y el curso /// - inserta las relaciones entre la asignatura y cada alumno /// que cursa el curso /// </summary> /// <param name="courseId"> /// El id del curso /// </param> /// <param name="subjectId"> /// El id de la asignatura /// </param> /// <exception cref="CourseSubjectDuplicateEntryException"> /// Lanza CourseSubjectDuplicateEntryException si se intenta /// insertar una relacion entre el curso y la asignatura que /// ya existe. /// </exception> /// <returns> /// Retorna true /// </returns> public async Task <bool> AssignSubject(int courseId, int subjectId) { var course_id = new MySqlParameter("@courseId", courseId); var subject_id = new MySqlParameter("@subjectId", subjectId); try { _dbContext.Database.ExecuteSqlRaw("call add_subject_to_course(@subjectId,@courseId)", subject_id, course_id); await _dbContext.SaveChangesAsync(); _logger.LogInformation("La asignatura ha sido agregada al curso"); } catch (DbUpdateException ex) { //Si la base de datos lamza un error Unique Constraint si se asigna a un //curso una asignatura que ya tiene asignada if (ex.InnerException.Message.Contains("UQ_course_subject")) { _logger.LogWarning("Error: se ha intentado agregar a a un curso " + "una asignatura que ya tiene"); throw new CourseSubjectDuplicateEntryException(); } //Por cualquier otra razón, se lanza la excepción else { throw ex; } } return(true); }
/// <summary> /// Inserta una nueva ebtidad alumno /// </summary> /// <param name="studentEntity"></param> /// <exception cref="DniDuplicateEntryException"> /// Lanza DniDuplicateEntryException si el dni del alumno ya existe /// </exception> /// <returns> /// Retorna la entidad alumno guardada con su id generado /// </returns> public async Task <StudentEntity> Save(StudentEntity studentEntity) { try { await _dbContext.StudentEntities.AddAsync(studentEntity); await _dbContext.SaveChangesAsync(); _logger.LogInformation("Alumno guardado en la base de datos."); } catch (DbUpdateException ex) { if (ex.InnerException.Message.Contains("UQ_dni")) { _logger.LogWarning("El alumno no se ha guardado " + "porque su dni ya existe en la base de datos"); throw new DniDuplicateEntryException(); } //Por cualquier otra razon lanzo la excepción else { throw ex; } } return(studentEntity); }
/// <summary> /// Cancela la vigencia de una clase llamando a un /// procedimiento de la base de datos que: /// -cancela la clase estableciendo el valor false al /// campo "isCurrent" /// -Borra todas las relaciones entre los alumnos y la clase /// </summary> /// <param name="schoolClassEntity"> /// El id de la clase /// </param> /// <returns>< /// Retorna true /// /returns> public async Task <bool> Cancel(int schoolClassId) { var id = new MySqlParameter("@schoolClassId", schoolClassId); _dbContext.Database.ExecuteSqlRaw("call cancel_school_class(@schoolClassId)", id); await _dbContext.SaveChangesAsync(); return(true); }
/// <summary> /// Actualiza una entidad ciclo /// </summary> /// <param name="cycleId"> /// El id del ciclo /// </param> /// <exception cref="CycleNameDuplicateEntryException"> /// Lanza GradeNameDuplicateEntryException /// si el nombre del ciclo ya existe en la base de datos /// </exception> /// <returns> /// Retorna true /// </returns> public async Task <bool> Update(CycleEntity cycleEntity) { CycleEntity c = await this.Get(cycleEntity.Id); try { c.Name = cycleEntity.Name; c.ShiftEntity = cycleEntity.ShiftEntity; await _dbContext.SaveChangesAsync(); _logger.LogInformation("El ciclo se ha actualizado correctamente"); } catch (DbUpdateException ex) { //Si la base de datos lamza un error Unique Constraint por el campo "name" if (ex.InnerException.Message.Contains("UQ_cycle_name")) { _logger.LogWarning("Error: El ciclo no se ha actualizado " + "porque su nombre ya existe"); throw new CycleNameDuplicateEntryException(); } //Por cualquier otra razón, se lanza la excepción else { throw ex; } } return(true); }
/// <summary> /// Guarda varias ausencias en la base de datos /// con un bucle que llama un procedimiento que comprueba /// si la ausencia ya existe, en tal caso /// la borra si es cancelada o la modifica si es de otro tipo. /// En el caso de que la ausencia no existe, inserta una nueva. /// El procedimiento tambien dispara un trigger que actualiza las /// ausencias y retrasos totales del alumno. /// </summary> /// <param name="absenceEntities"></param> /// <returns> /// Retorna true /// </returns> public async Task <bool> Save(List <AbsenceEntity> absenceEntities) { absenceEntities.ForEach(a => { var schoolClassId = new MySqlParameter("@schoolClassId", a.SchoolClassId); var studentId = new MySqlParameter("@studentId", a.StudentId); var type = new MySqlParameter("@type", a.Type); _dbContext.Database.ExecuteSqlRaw("call insert_absence(@schoolClassId,@studentId,@type)", schoolClassId, studentId, type); }); await _dbContext.SaveChangesAsync(); _logger.LogInformation("Ausencias guardas en la base de datos"); return(true); }