public async Task DeleteAllClassesByTimetableIdAsync(Timetable timetable, CancellationToken cancellationToken = default)
        {
            var classesList = await _dbContext
                              .Classes
                              .Where(m => m.TimetableId == timetable.TimetableId)
                              .ToListAsync(cancellationToken);

            foreach (var calendarClass in classesList)
            {
                await DeleteReservationsAsync(calendarClass, cancellationToken);

                _dbContext.Remove(calendarClass);
            }

            _ = await _dbContext.SaveChangesAsync(cancellationToken);
        }
        public async Task <CalendarClassDto> Handle(DeleteClassByIdCommand request, CancellationToken cancellationToken)
        {
            var classEntity = await _dbContext
                              .Classes
                              .SingleOrDefaultAsync(m => m.ClassId == request.ClassId, cancellationToken);

            _dbContext.Remove(classEntity);
            _ = await _dbContext.SaveChangesAsync(cancellationToken);

            var deletedReservationsForClass = await _dbContext.Reservations
                                              .Where(x => x.ClassId == request.ClassId)
                                              .ToListAsync(cancellationToken);

            foreach (var reservation in deletedReservationsForClass)
            {
                _ = _dbContext.Remove(reservation);
            }

            _ = _dbContext.SaveChangesAsync(cancellationToken);

            var classDto = classEntity.Adapt <CalendarClassDto>();

            return(classDto);
        }
        public async Task <ReservationDtoSetter> Handle(SignOutOfClassCommand request, CancellationToken cancellationToken)
        {
            var reservationEntity = await _dbContext
                                    .Reservations
                                    .SingleOrDefaultAsync(m => m.ReservationId == request.ReservationId, cancellationToken);

            _ = _dbContext.Remove(reservationEntity);
            _ = await _dbContext.SaveChangesAsync(cancellationToken);

            _signOutOfClassSender.DeleteReservation(reservationEntity.ReservationId);

            var reservationDto = reservationEntity.Adapt <ReservationDtoSetter>();

            return(reservationDto);
        }
        public async Task <TimetableDto> Handle(DeleteTimetableByIdCommand request, CancellationToken cancellationToken)
        {
            var timetableEntity = await _dbContext
                                  .Timetables
                                  .SingleOrDefaultAsync(m => m.TimetableId == request.TimetableId, cancellationToken);

            var classGenerator = new ClassGenerator(_dbContext);
            await classGenerator.DeleteAllClassesByTimetableIdAsync(timetableEntity, cancellationToken);

            _dbContext.Remove(timetableEntity);
            _ = await _dbContext.SaveChangesAsync(cancellationToken);

            var timetableDto = timetableEntity.Adapt <TimetableDto>();

            return(timetableDto);
        }
 public async Task RemoveEntrieAsync(CalendarEntrie entrie)
 {
     _dbContext.Remove(entrie);
     await _dbContext.SaveChangesAsync();
 }