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)); }
public async Task DeleteAsync(AgendaTrack agendaTrack) { _agendaTracks.Remove(agendaTrack); await _context.SaveChangesAsync(); }
public async Task UpdateAsync(AgendaTrack agendaTrack) => await _context.SaveChangesAsync();
public async Task AddAsync(AgendaTrack agendaTrack) { await _agendaTracks.AddAsync(agendaTrack); await _context.SaveChangesAsync(); }