예제 #1
0
        public async Task <Response> Handle(CriarTicket request, CancellationToken cancellationToken)
        {
            if (request == null)
            {
                return(new Response(false, "Informe todos os dados para criar um novo ticket", request));
            }

            Usuario criador = await _repositorioUsuario.CarregarObjetoPeloID(request.CriadorId);

            Projeto projeto = await _repositorioProjeto.CarregarObjetoPeloID(request.ProjetoId);

            Categoria categoria = await _repositorioCategoria.CarregarObjetoPeloID(request.CategoriaId);

            #region VALIDACOES DE CRIADOR/PROJETO/CATEGORIA

            if (criador == null)
            {
                //return new Response(false, "Usuário criador do ticket não encontrado", request);
                AddNotification("Criador do Ticket", "Usuário criador do ticket não foi encontrado");
            }

            if (projeto == null)
            {
                //return new Response(false, "Projeto referenciado a este ticket não foi encontrado", request);
                AddNotification("Projeto", "Projeto referenciado a este ticket não foi encontrado");
            }

            if (categoria == null)
            {
                //return new Response(false, "Categoria não encontrada", request);
                AddNotification("Categoria", "Categoria não encontrada");
            }

            #endregion

            if (Invalid)
            {
                return(new Response(false, "Verifique os erros e tente novamente", Notifications));
            }

            Ticket ticket = new Ticket(request.Titulo, request.Descricao, criador, projeto, categoria);

            if (request.Notas != null)
            {
                List <AdicionarNota> notas = request.Notas;

                foreach (var n in notas)
                {
                    ticket.AdicionarNota(new Nota(n.Titulo, n.Descricao, ticket, criador));
                }
            }

            if (request.Anexos != null)
            {
                List <AdicionarAnexo> anexos = request.Anexos;

                foreach (var a in anexos)
                {
                    ticket.AdicionarAnexo(new Anexo(a.Descricao, a.URL, ticket));
                }
            }

            if (ticket.Invalid)
            {
                return(new Response(false, "Ticket inválido", ticket.Notifications));
            }

            _repositorioTicket.Adicionar(ticket);
            await _notificarNovoTicket.Novo(projeto, criador, ticket);

            Response result = new Response(true, "Ticket criado com sucesso!", null);
            return(await Task.FromResult(result));
        }