Ejemplo n.º 1
0
        public async Task <Response> Handle(EditarTicket request, CancellationToken cancellationToken)
        {
            if (request == null)
            {
                return(new Response(false, "Informe os dados do ticket que deseja alterar", request));
            }

            Usuario usuario = await _repositorioUsuario.CarregarObjetoPeloID(request.UsuarioId);

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

            Ticket ticket = await _repositorioTicket.CarregarObjetoPeloID(request.IdTicket);

            AddNotifications(new Contract()
                             .Requires()
                             .IsNotNull(usuario, "Usuario", "Usuário não foi encontrado")
                             .IsNotNull(categoria, "Categoria", "Categoria não encontrada")
                             .IsNotNull(ticket, "Ticket", "Ticket não encontrado")
                             );

            switch (request.Prioridade)
            {
            case 1:
                ticket.AlterarPrioridade(PrioridadeEnum.Baixo);
                break;

            case 2:
                ticket.AlterarPrioridade(PrioridadeEnum.Normal);
                break;

            case 3:
                ticket.AlterarPrioridade(PrioridadeEnum.Alto);
                break;

            case 4:
                ticket.AlterarPrioridade(PrioridadeEnum.Urgente);
                break;

            default:
                AddNotification("Prioridade", "Tipos de prioridades: 1=Baixo | 2=Normal | 3=Alto | 4=Urgente");
                break;
            }

            switch (request.Status)
            {
            case 1:
                ticket.AlterarStatus(StatusEnum.Aberto);
                break;

            case 2:
                ticket.AlterarStatus(StatusEnum.EmAndamento);
                break;

            case 3:
                ticket.AlterarStatus(StatusEnum.Concluido);
                break;

            case 4:
                ticket.AlterarStatus(StatusEnum.Cancelado);
                break;

            default:
                AddNotification("Status", "Tipos de status: 1=Aberto | 2=Em andamento | 3=Concluído | 4=Cancelado");
                break;
            }

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

            ticket.Editar(request.Titulo, request.Descricao, categoria);

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

            _repositorioTicket.Editar(ticket);
            Response result = new Response(true, "Ticket alterado com sucesso!", null);

            return(await Task.FromResult(result));
        }