示例#1
0
        public IEnumerable Handle(CreateSchedule command)
        {
            // TODO: Do we allow multiple schedules for
            var agRoot = ScheduleFactory.CreateSchedule(command);

            DomainRepository.AddSchedule(agRoot);

            return(new object[] { ScheduleFactory.EventFactory.ScheduleCreated(agRoot) });
            // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
            // NOTE: Don't use yield return, as it can cause silent failures in execution
            //yield return ScheduleFactory.EventFactory.ScheduleCreated(agRoot);
        }
示例#2
0
        public IEnumerable Handle(AddCourse command)
        {
            Course course = ScheduleFactory.CreateCourse(command);
            var    agRoot = DomainRepository.GetSchedule(command.ScheduleId);

            // TODO: Any rules about duplicate courses scheduled?
            agRoot.AddCourse(course);

            DomainRepository.UpdateSchedule(agRoot);

            yield return(ScheduleFactory.EventFactory.CourseAddedToSchedule());
        }
示例#3
0
        public IEnumerable Handle(ScheduleRoom command)
        {
            ClassRoom classRoom = ScheduleFactory.CreateClassRoom(command.RoomNumber, command.Day, command.StartTime, command.EndTime);
            var       agRoot    = DomainRepository.GetSchedule(command.ScheduleId);

            // TODO: Rules about start and end times
            //          - All courses start at hh:15 and end at hh+:10
            //          - In blocks of 1, 2, 3, or 4 hours only
            //          - Fits in the standard work schedule (7AM to 11PM Mon-Fri, 7AM to 5PM Sat)
            // TODO: Rules about over-laps
            //          - Time overlaps in schedule
            // TODO: Rules about course
            //          - Too many hours slotted
            //          - Course happens only once per day
            agRoot.ScheduleRoom(command.CourseId, classRoom);

            DomainRepository.UpdateSchedule(agRoot);

            yield return(ScheduleFactory.EventFactory.RoomScheduledForCourse());
        }