Exemplo n.º 1
0
        public static AgendaTrackDto AsDto(this AgendaTrack agendaTrack)
        {
            var agendaTrackDto = new AgendaTrackDto
            {
                Id           = agendaTrack.Id,
                ConferenceId = agendaTrack.ConferenceId,
                Name         = agendaTrack.Name
            };

            var regularSlots = agendaTrack.Slots.OfType <RegularAgendaSlot>()
                               .Select(rs => (object)rs.AsDto());

            var placeholderSlots = agendaTrack.Slots.OfType <PlaceholderAgendaSlot>()
                                   .Select(ps => (object)new PlaceholderAgendaSlotDto
            {
                Id          = ps.Id,
                From        = ps.From,
                To          = ps.To,
                Type        = AgendaSlotType.Placeholder,
                Placeholder = ps.Placeholder
            });

            var slots = new List <object>();

            slots.AddRange(regularSlots);
            slots.AddRange(placeholderSlots);

            agendaTrackDto.Slots = slots;

            return(agendaTrackDto);
        }
        public async Task AssignAgendaItemAsync(AgendaTrack agendaTrack, EntityId agendaSlotId, EntityId agendaItemId)
        {
            var agendaTracks = await _agendaTracksRepository.BrowseAsync(agendaTrack.ConferenceId);

            var slotToAssign = agendaTrack.Slots.OfType <RegularAgendaSlot>().SingleOrDefault(s => s.Id == agendaSlotId);

            if (slotToAssign is null)
            {
                throw new AgendaSlotNotFoundException(agendaSlotId);
            }

            var agendaItem = await _agendaItemsRepository.GetAsync((Guid)agendaItemId);

            if (agendaItem is null)
            {
                throw new AgendaItemNotFoundException((Guid)agendaItemId);
            }

            var speakerIds    = agendaItem.Speakers.Select(s => new SpeakerId(s.Id));
            var speakersItems = await _agendaItemsRepository.BrowseAsync(speakerIds);

            var speakersItemIds = speakersItems.Select(si => (Guid)si.Id).ToList();

            var hasCollidingSpeakerSlots = agendaTracks
                                           .SelectMany(at => at.Slots)
                                           .OfType <RegularAgendaSlot>()
                                           .Any(s => speakersItemIds.Contains(s.Id) && s.From <slotToAssign.To && slotToAssign.From> s.To);

            if (hasCollidingSpeakerSlots)
            {
                throw new CollidingSpeakerAgendaSlotsException(agendaSlotId, agendaItemId);
            }

            agendaTrack.ChangeSlotAgendaItem(agendaSlotId, agendaItem);
        }
        public async Task HandleAsync(CreateAgendaTrack command)
        {
            if (await _repository.ExistsAsync(command.Id))
            {
                throw new AgendaTrackAlreadyExistsException(command.Id);
            }

            var agendaTrack = AgendaTrack.Create(command.Id, command.ConferenceId, command.Name);

            await _repository.AddAsync(agendaTrack);

            await _messageBroker.PublishAsync(new AgendaTrackCreated(agendaTrack.Id));
        }
Exemplo n.º 4
0
 public async Task DeleteAsync(AgendaTrack agendaTrack)
 {
     _agendaTracks.Remove(agendaTrack);
     await _context.SaveChangesAsync();
 }
Exemplo n.º 5
0
 public async Task UpdateAsync(AgendaTrack agendaTrack)
 => await _context.SaveChangesAsync();
Exemplo n.º 6
0
        public async Task AddAsync(AgendaTrack agendaTrack)
        {
            await _agendaTracks.AddAsync(agendaTrack);

            await _context.SaveChangesAsync();
        }