• Nenhum resultado encontrado

3.2 ESPECIFICAÇÃO

3.2.2 Diagrama de classes

O diagrama de classes apresenta uma visão de como as classes estão estruturadas e relacionadas. Nesta seção são descritas as classes necessárias para o desenvolvimento desta aplicação, sendo que a aplicação está dividida em três partes, o front-end, aplicativo mobile e back-end.

3.2.2.1 Diagrama de classes do front-end

A Figura 8 retrata a estrutura de classes do front-end. A classe Gincana contém as propriedades utilizadas pela aplicação para representar uma gincana. A classe gincanaCtrl

controla a apresentação das gincanas existentes no sistema, permitindo também a sua ativação. A classe novoGincanaCtrl permite o cadastro e alteração de gincanas. A classe

monitorarGincanaCtrl disponibiliza a visualização do andamento da gincana, disponibilizando uma lista de tarefas por usuário, além de permitir o encerramento da gincana.

A classe gincanaAPI contém os métodos de comunicação com o back-end necessários para inserir, alterar, listar, monitorar e finalizar uma gincana. A classe Tarefa contém as propriedades utilizadas na aplicação para representar uma tarefa da gincana. A classe

tarefaGincanaCtrl permite a visualização das tarefas cadastradas. A classe

novoTarefaCtrl permite o cadastro e alteração das tarefas. A classe

dependenciaTarefaCtrl contém os métodos para visualizar e alterar a dependência entre as tarefas. A classe TarefaGrupo contém as propriedades utilizadas na aplicação para representar uma tarefa do grupo associada a um usuário. A classe avaliarRespostaCtrl

permite visualizar a resposta dada por um participante a tarefa e também permite sua avaliação com uma nota de zero a dez. A classe tarefaAPI contém os métodos de comunicação com o back-end necessários para inserir, alterar, vincular dependência e avaliar uma tarefa.

A classe Grupo contém as propriedades utilizadas na aplicação para representar um grupo da gincana. A classe gruposGincanaCtrl permite visualizar os grupos cadastrados. A classe novoGrupoCtrl é utilizado para cadastrar e alterar os grupos. A classe grupoAPI contém os métodos de comunicação com o back-end necessários para inserir e alterar os grupos. A classe config contém o endereço base para fazer as chamadas à API do back-end, além do endereço base do diretório de imagens no servidor.

30 Figura 8 - Diagrama de classes do fron-end

3.2.2.2 Diagrama de classes do aplicativo mobile

A Figura 9 retrata a estrutura de classes do aplicativo mobile. A classe

furbMobileCtrl é responsável por realizar o login do usuário através do Facebook, obtendo um token que será utilizado para realizar as chamadas à API do Facebook, tanto pelo aplicativo mobile quanto pela aplicação back-end. Esta classe também obtém o token do telefone que será utilizado para as Push Notifications integradas com o Ionic Platform. A classe Usuario contém as propriedades utilizadas pela aplicação para representar um usuário.

A classe usuarioAPI contém os métodos de comunicação com o back-end necessários para inserir, obter dados do usuário e obter uma lista de usuários sem tarefa. A classe Gincana

contém as propriedades utilizadas pela aplicação para representar uma gincana. A classe

gincanasCtrl permite a visualização de gincanas ativas, onde também é possível selecionar uma gincana para entrar. A classe GincanaAPI contém os métodos de comunicação com o back-end necessários para obter a lista de gincanas ativas e informações específicas de uma gincana. A classe Grupo contém as propriedades utilizadas pela aplicação para representar um grupo. A classe gruposCtrl disponibiliza a lista de grupos da gincana para o usuário escolher para entrar. A classe GrupoAPI contém os métodos de comunicação com o back-end necessários para obter a lista de grupos disponíveis para uma gincana, obter o grupo do usuário e vincular o usuário com um grupo. A classe TarefaGrupo e Tarefa contêm as

31 propriedades utilizadas na aplicação para representar uma tarefa do grupo associada a um usuário. A classe tarefasCtrl permite visualizar as tarefas associadas ao usuário. A classe

TarefaAPI contém os métodos de comunicação com o back-end necessários para obter a lista de tarefas associadas ao usuário, atribuir uma tarefa a um membro e responder as tarefas de pergunta, imagem, vídeo e geolocalização. A classe delegarTarefaCtrl permite ao líder do grupo associar uma tarefa para um usuário sem tarefas.

A classe resolverPerguntaCtrl permite informar uma resposta para uma tarefa do tipo pergunta. A classe resolverImagemCtrl faz acesso a câmera do aparelho para tirar uma foto e responder uma tarefa do tipo imagem. A classe resolverVideoCtrl permite o usuário procurar e selecionar um vídeo do site YouTube para responder uma tarefa do tipo vídeo. A classe resolverGeolocalizacaoCtrl permite ao usuário verificar sua posição atual, visualizar o objetivo da tarefa e responder a tarefa caso sua posição esteja dentro do raio do ponto central do objetivo da tarefa do tipo geolocalização. A classe Config contém o endereço base para fazer as chamadas à API do servidor back-end.

Figura 9 - Diagrama de classes do aplicativo mobile

32 3.2.2.3 Diagrama de classes do back-end

A Figura 10 apresenta o diagrama de pacotes do back-end da aplicação. O pacote API é a porta de entrada para a comunicação entre a aplicação mobile e front-end com o back-end.

Este pacote faz uso dos objetos do pacote DTO para transferência simplificada de dados e dos objetos do pacote Service para a invocação das regras de negócio. O pacote Service representa as classes que possuem as regras de negócio que atuam sobre os objetos dos pacotes DTO, MODEL e DAO. Os objetos do pacote DAO fazem a ligação do banco de dados com o restante da aplicação, disponibilizando métodos para inserir, alterar e retornar os dados. Os objetos do pacote MODEL representam a modelagem de tabelas e campos utilizados na aplicação. O pacote Trello API faz a integração com a ferramenta Trello. O pacote Ionic API faz a integração com a ferramenta Ionic Platform.

Figura 10 - Diagrama de classes da arquitetura do back-end

3.2.2.3.1 Diagrama de classes do pacote MODEL

A Figura 11 apresenta as classes que pertencem ao pacote MODEL. Estas classes contêm as informações necessárias para a persistência dos dados no banco de dados. Todas elas implementam a interface BaseEntityId, a qual possuem o campo id que é utilizado como chave primária. A classe Usuario possui o id do usuário e token do Facebook, e token de identificação para notificações push do Ionic Plataform. A classe Gincana possui os atributos

titulo, descricao e situacao, podendo estar não ativada, ativada e finalizada, além do

33 token utilizado para integração com o Trello, id e URL do quadro. A classe Grupo possui o nome do grupo, o usuário líder e o id da lista correspondente ao grupo no quadro da gincana no Trello. A classe Tarefa possui os atributos titulo, descricao e tipoTarefa, sendo que os tipos podem ser pergunta, imagem, vídeo e geolocalização. A classe Tarefa também representa a localização para as tarefas do tipo geolocalização, através dos atributos

latitude, longitude e raio. A classe DependenciaTarefa representa a ligação de uma tarefa com outra, sendo que uma tarefa só fica disponível para o participante da gincana caso não possua nenhuma tarefa requisito pendente. A classe UsuarioGrupo representa a ligação do usuário com um grupo da gincana, sendo que um usuário pode apenas participar de um grupo por gincana. A classe TarefaGrupo representa a tarefa associada ao grupo, com a indicação do usuário responsável pela tarefa. Também possui os atributos de resposta,

latitude e longitude quando a tarefa for do tipo geolocalização, nota, situacao podendo estar pendente, assumida, em avalição e completa, além da indicação do usuário associado a tarefa. A classe ResultadoGincana contém os atributos utilizados para representar o resultado do grupo na gincana. A classe possui os atributos de somaNotas, para indicar a soma das notas, quantidadeIntegrantes, representando a quantidade de participantes do grupo e colocacao, indicando a posição do grupo no placar final da gincana.

Figura 11 - Diagrama de classes do pacote MODEL

34 3.2.2.3.2 Diagrama de classes do pacote DAO

A Figura 12 apresenta as classes que pertencem ao pacote DAO. Estas classes disponibilizam métodos para acesso aos dados no banco de dados. A classe GenericDAO implementa métodos genéricos para adicionar, remover, buscar, atualizar e obter uma lista dos registros. Todas as classes DAO estendem dessa classe para reaproveitar os métodos de acesso simples. Cada DAO também possui os métodos create, que adiciona o registro caso seu id não exista, ou atualiza caso exista, update para atualizar o registro e recupera para obter a entidade pelo seu id. Além do método getEntityClass que retorna a classe da entidade base da classe DAO.

A classe GincanaDAO disponibiliza o método getListaGincanaAtiva que retorna uma lista de gincanas com a situação ativa. A classe GrupoDAO disponibiliza o método

getGruposFromGincana que retorna uma lista de grupos pertencentes a gincana. A classe

UsuarioDAO disponibiliza o método recuperaPorIdFacebook para recuperar o cadastro do usuário pelo seu id do Facebook. A classe TarefaDAO disponibiliza o método

getTarefasByIdGincana que retorna uma lista de tarefas pertencentes a gincana. A classe

DependenciaTarefaDAO disponibiliza o método excluirDependenciasTarefa que exclui todas a configuração de dependência e requisito de uma tarefa, e o método

obterTarefasDependentes que retorna uma lista de dependências da tarefa. A classe

TarefaGrupoDAO disponibiliza o método getTarefasFromGrupoByUsuario que retorna uma lista de tarefas que estejam disponíveis ao usuário, ou seja, que estejam associadas ao usuário, com a situação pendente ou assumida e não possuam nenhuma tarefa requisito com a situação pendente ou assumida. O método vincularTarefasComUsuarioLider associa todas as tarefas do grupo a um usuário. O método vincularTarefaComUsuario associa uma tarefa do grupo a um usuário e o método getTarefasByGincana retorna uma lista de tarefas de grupos associada a uma gincana. A classe UsuarioGrupoDAO possui o método

getUsuariosFromGrupo que retorna uma lista de usuários pertencentes a um grupo. O método getGrupoFromUsuario retorna o grupo associado a um usuário. O método

getUsuariosFromGrupoSemTarefa retorna uma lista de usuários do grupo que estão sem tarefas assumidas, excluindo o líder do grupo que possui todas as tarefas assumidas para poder delegar para outros usuários. O método getQuantidadeUsuariosPorGrupo retorna à quantidade de usuários que pertencem ao grupo. A classe ResultadoGincanaDAO

disponibiliza o método getListaByIdGincana que retorna a lista de resultados da gincana.

35 Figura 12 - Diagrama de classes do pacote DAO

3.2.2.3.3 Diagrama de classes do pacote DTO

A Figura 13 apresenta as classes que pertencem ao pacote DTO. Estas classes são utilizadas para facilitar a transferência de dados entre sistemas, onde os atributos das classes

MODEL podem ser expostos de uma outra forma para aplicações externas. Todas as classes possuem os getters e setters para os atributos correspondentes da classe MODEL. Os métodos

parse servem para converter um objeto DTO em objeto MODEL. Os métodos create fazem o inverso, ou seja, convertem objetos MODEL em DTO.

36 Figura 13 - Diagrama de classes do pacote DTO

3.2.2.3.4 Diagrama de classes do pacote Trello API

Para a integração com a ferramenta Trello, foi adaptada a biblioteca JTrello disponibilizada pelo usuário asommariva no serviço de hospedagem de projetos Bitbucket.

Foi adaptado para que o JTrello utilize o mesmo framework que o Furb Mobile Gincanas está utilizando para comunicação via web services RESTful. Assim, ao invés de utilizar o Jersey, foi alterado para que se utilize o RESTEasy. Também foi adicionado a opção de se poder criar um quadro público. O pacote Trello API está separado em três pacotes: Trello Model,

Trello Service e Trello Client. A Figura 14 apresenta o diagrama de classes do pacote

Trello Model. A classe Board foi utilizada para representar uma gincana. A classe Listas

foi utilizada para representar as equipes e o resultado final da gincana. A classe Card foi utilizada para representar as tarefas cumpridas por cada equipe.

37 Figura 14 - Diagrama de classes do pacote Trello Model

A Figura 15 mostra o diagrama de classes do pacote Trello Service. Todas as classes herdam da classe TrelloApiBase, que implementa os métodos de comunicação com a API do Trello. O método create da classe BoardService é utilizado para criar um quadro. É importante guardar o atributo id do quadro criado já que esse será necessário na criação das listas e cartões.

Figura 15 - Diagrama de classes do pacote Trello Service

A Figura 16 mostra o diagrama de classes do pacote Trello Client. As classes do pacote Service interagem com a classe JTrelloClient para obter o serviço necessário que trata cada assunto. É utilizado o método construtor que recebe o parâmetro authKey e

38

authToken, respectivamente a chave de API de desenvolvedor e o token de autorização do cliente.

Figura 16 - Diagrama de classes do pacote Trello Client

3.2.2.3.5 Diagrama de classes do pacote Ionic API

Para a integração com a ferramenta Ionic Platform, foi utilizada a classe Ionic disponibilizada pelo usuário slarsen no serviço de hospedagem de projetos GitHub. A Figura 17 apresenta o diagrama de classes do pacote Ionic API. O método construtor da classe

Ionic requer um token que identifica o aplicativo integrado com a ferramenta Ionic Platform.

Para enviar uma notificação push, é necessário fornecer ao método push um parâmetro

String em formato JSON com as informações de integração com o Ionic Platform, os tokens de usuários e o texto da notificação. Mais detalhes da implementação estão na seção 3.3.2.4.

Figura 17 - Diagrama de classes do pacote Ionic API

39 3.2.2.3.6 Diagrama de classes do pacote Service

A Figura 18 mostra as classes que pertencem ao pacote Service. Estas classes encapsulam as regras de negócio da aplicação. A classe IonicService comunica com a classe Ionic para enviar as notificações para os participantes da gincana. A classe

FacebookService comunica com a API restfb para transformar um token de curta duração em um de longa duração, e obter o nome e foto do Facebook do participante. A classe

TrelloService comunica com a API JTrello através da classe JTrelloCliente para manipular os quadros, listas e cartões da gincana. A classe UtilitarioService disponibiliza um método para salvar uma imagem no formato base64 no diretório configurado no atributo

DIRETORIO_IMAGENS.

Figura 18 - Diagrama de classes do pacote Service

3.2.2.3.7 Diagrama de classes do pacote API

A Figura 19 apresenta o diagrama de classes do pacote API. Os web services foram construídos no estilo arquitetural REST utilizado o framework RESTEasy. A classe

Application possui a anotação @ApplicationPath("/api") que indica para o RESTEasy qual a Uniform Resource Locator (URI) base. Uma gincana é cadastrada pelo método

cadastrarGincana da classe GincanaAPI. As tarefas são cadastradas pelo método

40

cadastrarTarefa da classe TarefaAPI. Os grupos são cadastrados no método

cadastrarGrupo da classe GrupoAPI. Após os cadastros, a gincana é ativada pelo método

ativarGincana da classe GincanaAPI. Os usuários são registrados e obtidos pelo método

obterCadastrarPorIdFacebook da classe UsuarioAPI, o qual cadastra um usuário novo caso o idFacebook fornecido seja desconhecido, ou devolve um existente caso o idFacebook

pertença a um cadastro existente. Após o usuário selecionar uma gincana ativa obtida pelo método listarGincanasAtivas da classe GincanaAPI, é verificado se o participante pertence a algum grupo através do método retornarGrupoUsuario da classe GrupoAPI. Caso esteja sem grupo, o usuário deve se vincular a um grupo da gincana através do método

vincularUsuarioGrupo da classe GrupoAPI. Nesse momento o participante assume o papel de líder, caso ele seja o primeiro integrante do grupo, ou assume o papel de membro caso o grupo já possua um líder.

O método obterDisponiveis da classe UsuarioAPI, é utilizado para obter a lista de membros que estão sem tarefas. Assim o líder pode associar a tarefa a um membro através do método associarComUsuario da classe TarefaAPI. Um membro resolve uma tarefa através do método resolver da classe TarefaAPI. Caso a tarefa seja uma imagem, é utilizado o método resolverImagem da mesma classe. O organizador da gincana avalia as tarefas pelo método avaliar da classe TarefaAPI. Ao final da gincana, o método finalizar da classe

GincanaAPI é utilizado para encerrar a gincana, calcular o resultado final, publicar o resultado no Trello e notificar todos os participantes a posição e quantidade de pontos do grupo na gincana.

41 Figura 19 - Diagrama de classes do pacote API

Documentos relacionados