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)); }