public Task Handle(RegisterNewPalestraCommand message, CancellationToken cancellationToken)
        {
            if (!message.IsValid())
            {
                NotifyValidationErrors(message);
                return(Task.CompletedTask);
            }

            var palestra = new Palestra(Guid.NewGuid(), message.Titulo, message.Descricao, message.Data, message.PalestranteId);

            var existingPalestra = _palestraRepository.GetByTitulo(palestra.Titulo);

            if (existingPalestra != null && existingPalestra.Id != palestra.Id && existingPalestra.Data == palestra.Data)
            {
                Bus.RaiseEvent(new DomainNotification(message.MessageType, "Palestra já cadastrada!"));
                return(Task.CompletedTask);
            }

            var existingConflictPalestras = _palestraRepository.GetConflitctPalestranteDate(message.Data, message.PalestranteId);

            if (existingConflictPalestras != null)
            {
                Bus.RaiseEvent(new DomainNotification(message.MessageType, "Palestrante já possui palestra para essa data!"));
                return(Task.CompletedTask);
            }

            _palestraRepository.Add(palestra);

            if (Commit())
            {
                Bus.RaiseEvent(new PalestraRegisteredEvent(palestra.Id, palestra.Titulo, palestra.Descricao, palestra.Data, palestra.PalestranteId));
            }

            return(Task.CompletedTask);
        }
示例#2
0
        public IActionResult Create([FromBody] Palestra palestra)
        {
            if (palestra == null)
            {
                return(BadRequest());
            }

            _palestraRepositorio.Add(palestra);

            return(CreatedAtRoute("GetPalestra", new { id = palestra.IdPalestra }, palestra));
        }
示例#3
0
        public async Task <PalestraDto> Handle(CriarPalestraCommand request, CancellationToken cancellationToken)
        {
            var palestra = new Palestra(request.Tema, request.Titulo, request.DataInicial,
                                        request.Duracao, request.Local, request.OrganizadorEmail, _colisaoLocalChecker);

            await _repository.Add(palestra);

            await _unitOfWork.Commit(cancellationToken);

            // Seria dataInicial - 7 dias ou algo assim, mas coloquei daqui a 2 minutos p/ testes
            _lembreteOrganizadorScheduler.Schedule(palestra.Id, DateTimeOffset.Now + TimeSpan.FromMinutes(2));

            return(new PalestraDto(palestra.Id.Value));
        }