/// <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);
        }
Example #2
0
 /// <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)
         });
     }
 }
Example #3
0
        /// <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);
        }