/// <summary> /// Inserta una nueva entidad clase /// Dispara un trigger que crea las relaciones entre los alumnos /// del curso que estan matriculados en la asignatura y la clase /// </summary> /// <param name="schoolClassEntity"></param> /// <returns> /// Retorna la entidad clase guardada con su id generado por la base de datos /// </returns> public async Task <SchoolClassEntity> Save(SchoolClassEntity schoolClassEntity) { await _dbContext.SchoolClassEntities.AddAsync(schoolClassEntity); await _dbContext.SaveChangesAsync(); _logger.LogInformation("Nueva clase guardada en la base de datos."); return(schoolClassEntity); }
/// <summary> /// Mapea un objeto SchoolClassEntity en un objeto SchoolClass /// incluyendo /// </summary> /// <param name="schoolClassEntity"></param> /// <returns></returns> public static SchoolClass Map(SchoolClassEntity schoolClassEntity) { if (schoolClassEntity is null) { return(null); } else { return(new SchoolClass() { Id = schoolClassEntity.Id, Day = (DayOfWeek)schoolClassEntity.Day, Subject = SubjectMapper.Map(schoolClassEntity.SubjectEntity), Schedule = ScheduleMapper.Map(schoolClassEntity.ScheduleEntity) }); } }
/// <summary> /// Crea una nueva clase /// </summary> /// <param name="schoolClass"> /// El objeto SchoolClass que contiene los datos de la clase /// </param> /// <exception cref="" /// <returns> /// Retorna el mismo objeto SchooClass con el id generado /// </returns> public async Task <SchoolClass> Save(SchoolClass schoolClass) { SchoolClassEntity schoolClassEntity = SchoolClassMapper.Map(schoolClass); //Comprueba primero que el mismo dia y a la misma hora, el profesor no esta dando //una clase de otra asignatura en otro curso SubjectEntity subjectEntity = await _subjectRepository .GetIncludingAssignedTeacher(schoolClassEntity.SubjectId); //Lanza excepcion si el profesor da otra clase bool isTeaching = await _schoolClassRepository .ExistsByTeacherDayAndSchedule( subjectEntity.Id, subjectEntity.TeacherEntity.Id, schoolClassEntity.Day, schoolClassEntity.ScheduleId); if (!isTeaching) { schoolClassEntity = await _schoolClassRepository.Save(schoolClassEntity); } else { string teacherFullName = subjectEntity.TeacherEntity.FirstName + " " + subjectEntity.TeacherEntity.LastName1 + " " + subjectEntity.TeacherEntity.LastName2; string message = "No puedes crear una clase de " + subjectEntity.Name + " a las " + schoolClass.Schedule.Start + " porque el profesor " + teacherFullName + " ya da otra clase."; throw new TeacherAlreadyTeachingException(message); } //Actualizo el id con el id retornado por el repositorio schoolClass.Id = schoolClassEntity.Id; return(schoolClass); }