Alohomora - Portaria Virtual

Arquitetura

Versão 1.0

Histórico de Revisão

Data Versão Descrição Autor
26/09/2019 1.0 Criação da primeira versão do documento Paulo Batista, Rodrigo Lima, Victor Gonçalves
01/10/2019 1.1 Revisão de erros ortográficos e sintaxe João Luis Baraky, Victor Jorge Gonçalves
06/10/2019 1.2 Incremento de uma explicação básica do que é significa MVT Rodrigo Lima, João Luis Baraky
07/10/2019 1.2 Adição dos objetivos, diagramas de pacotes e relações e melhoria no topico 5 João Luis Baraky, Rodrigo Lima
30/10/2019 1.3 Revisão do documento Mateus Nóbrega
09/11/2019 1.3 Adição de alguns diagrama e atualização de outros Matheus Nóbrega, Paulo Batista

Sumário

1. Introdução \ 1.1 Objetivo \ 1.2 Escopo \ 1.3 Definições, Acrônimos e Abreviações \ 1.4 Referências

2. Representação da Arquitetura \ 2.1 Django \ 2.1.1 MVT\ 2.2 GraphQL \ 2.2.1 Graphene-Python \ 2.2.2 Graphene-Django

3. Objetivos e Restrições da Arquitetura \ 3.1 Objetivos \ 3.2 Restrições

4. Visão de Casos de Uso \

5. Visão Lógica \ 5.1 Visão Geral \ 5.2 Diagrama de Relações \ 5.2.1 Responsabilidades por etapa \ 5.3 Diagrama de pacotes 6. Visão de implementação \ 6.1 Diagrama das models

7. Qualidade

1. Introdução

1.1 Objetivo

Este documento pretende mostrar a arquitetura utilizada da portaria virtual Alohomora, mostrar aos envolvidos cada parte da aplicação e transmitir aos interessados as decisões arquiteturais que foram tomadas.

1.2 Escopo

Este documento fornece uma visão da arquitetura do Alohomora, um sistema de portaria virtual. Alohomora é um projeto realizado para as disciplinas Métodos de Desenvolvimento de Software (MDS) e Engenharia de Produto de Software (EPS), do curso de Engenharia de Software da Faculdade UnB Gama (FGA) da Universidade de Brasília (UnB).

1.3 Definições, Acrônimos e Abreviações

Acrônimo/Abreviação Definição
API Application Programming Interface
MDS Métodos de Desenvolvimento de Software
EPS Engenharia de Produto de Software
MVT Model, View, Template

1.4 Referências

Sistema de Registro em Curso - Documento de Arquitetura de Software; Disponível em: http://mds.cultura.gov.br/extend.formal_resources/guidances/examples/resources/sadoc_v1.htm. Acesso em: 26 de setembro de 2019.

PATROCÍNIO, Sofia; GOUVEIA, Micaella; PEREIRA, Samuel; TAIRA, Luis; MUNIZ, Amanda. Chatbot Gaia: Arquitetura. Disponível em: https://github.com/fga-eps-mds/2019.1-Gaia/blob/master/docs/projeto/DocArquitetura.md. Acesso em: 26 de setembro de 2019.

Padrões Arquiteturais MVC X Arquitetura do Django; Disponível em: https://github.com/fga-eps-mds/A-Disciplina/wiki/Padr%C3%B5es-Arquiteturais---MVC-X-Arquitetura-do-Django. Acesso em: 05 de outubro de 2019.

HIROSHI, Lucas; MARQUES, Guilherme; RODRIGUES, Natália; BORGES, Felipe; NÓBREGA, Mateus. ReceitaMais - Documento de Arquitetura. Disponível em: https://github.com/fga-eps-mds/2017.2-Receita-Mais/wiki/Documento-de-Arquitetura. Acesso em: 30 de outubro de 2019.

GraphQL vs REST: Overview; Disponível em: https://phil.tech/api/2017/01/24/graphql-vs-rest-overview/. Acesso em: 30 de outubro de 2019.

Why use GraphQL, good and bad reasons. Disponível em: https://honest.engineering/posts/why-use-graphql-good-and-bad-reasons. Acesso em 30 de outubro de 2019.

2. Representação da Arquitetura

2.1 Django

Django é uma framework web escrita em Python que encoraja o desenvolvimento rápido e organizado. A framework enfatiza a reusabilidade e conectividade de componentes, assim, diminuindo a quantidade de código e facilitando a criação de sistemas mais complexos. No Django, é utilizada a arquitetura Model-View-Template (MVT), que é uma variação da arquitetura Model-View-Controller (MVC).

2.1.1 MVT

  • Model - É a parte que define o banco de dados, suas classes e como elas se comportam, métodos para manipulação do banco de dados e as validações aplicáveis (regras de negócio).
  • View - É a ponte de comunicação entre a Model e a Template. É nela que há o tratamento de informações recebidas e o retorno para o usuário.
  • Template - É a parte da interface do usuário. Contém as informações enviadas pela View e define como serão apresentadas essas informações, além de comunicar para ela as informações enviadas pelo usuário.

2.2 GraphQL

GraphQL é uma linguagem de busca e de manipulação de dados para APIs que permite o usuário estruturar os dados que ele necessita. A linguagem oferece uma flexibilidade e uma maior facilidade em lidar com APIs mais complexas do que outras soluções. A gama de funcionalidades contribui na eficiência e velocidade no desenvolvimento de aplicações.

2.2.1 Graphene

Graphene Python é uma biblioteca que oferece as ferramentas necessárias para implementar uma API GraphQL em Python. Ela permite que os dados que o seu serviço providenciará sejam definidos usando código Python.

2.3 Telegram

Telegram é uma aplicação multiplataforma de troca de mensagens instantâneas baseada na nuvem. Focada em segurança e performance, permite que o usuário envie texto, imagens, fotos, mensagens de áudios e arquivos de qualquer tipo. Ele também providencia uma API para que desenvolvedores possam implementar bots que interajam com usuários.

3. Objetivos e Restrições da Arquitetura

3.1 Objetivos

  • O sistema deve garantir a privacidade dos dados inseridos no banco de dados
  • Deve ser possível estruturar o condomínio (blocos e apartamentos) e cadastrar moradores manualmente;
  • Fornecer a funcionalidade de autenticação de usuário, morador e visitante, via voz;
  • É necessário ter uma comunicação com o morador com o intuito de notificar a chegada de um visitante;
  • O morador deverá ter o poder se permitir ou não a entrada de um visitante que o referencia.

3.2 Restrições

  • O hardware deve estar conectado a internet.
  • O sistema deve estar integrado ao banco de dados para a autenticação dos usuários.
  • O sistema deve estar integrado a um bot no Telegram para interação com os usuários.
  • Os usuários moradores devem ter o aplicativo Telegram instalado e internet para a comunicação com o sistema via bot.
  • O hardware deve ter um microfone para a gravação de voz, pois precisa-se da voz para a autenticação.

4, Visão de Casos de Uso

Os casos de uso relevantes para a arquitetura são:

  • Falar uma frase
  • Analisar a voz
  • Aceitar morador
  • Abrir porta
  • Aceitar visitante
  • Notificar o morador da chegada do visitante
  • Avisar a chegada
  • Gerenciar apartamentos
  • Gerenciar usuários
  • Ver entradas dos moradores e vistantes

Diagrama_casos_de_uso

5. Visão Lógica

5.1 Visão Geral

A portaria virtual Alohomora está sendo construída em Django, utilizando da ferramenta de busca GraphQL, integrada com Graphene-Django. O objetivo principal ao usar o Django é ter uma organização que facilite o trabalho e a adaptação do grupo. O GraphQL fornece velocidade na busca de dados e eficiência.

5.2 Diagrama de Relações

Diagrama_Relações

O morador interage com o AlohoBot para requisitar ou modificar alguma informação, e interage também com o interfone para fazer a autenticação por voz. Nos quais requisitam algum tipo de ação do sistema, assim a API processa a ação requirida. O graphQL a partir das mutations e queries, é o responsável por buscar e modificar as informações através da comunicação com a model, esta que se comunica com o banco de dados, e retorna o resultado para o bot ou interfone.

5.2.1 Responsabilidades por etapa

A etapa de comunicação do usuário com o AlohoBot deve conter não apenas classes responsáveis pelos componentes gráficos e visuais, mas também deve guardar as informações do usuário no banco de dados. Dessa forma, o código do bot está desacoplado com o da API.

No AlohoBot vai ser feito uma request para o GraphQL buscar ou modificar as informações no banco de dados, pois no GraphQL é necessário que seja definido no corpo do JSON se a requisição desejada estará performando uma query ou uma mutation. A partir disso, já é possível retornar para o cliente as informações.

No AlohoBot ou interfone, a voz do usuário será convertida e passada para o algoritmo FastDTW, implementada dentro da API e ela retornará se a voz realmente pertence ao usuário ou não.

5.3 Diagrama de Pacotes

Diagrama_Pacotes

6. Visão de implementação

6.1 Diagrama das models

Diagrama_de_classes Diagrama_de_classes

7. Qualidade

  • Utilização de algorítimos otimizados para autenticação de usuário pelas voz.
  • Utilização de boas práticas no desenvolvimento do projeto.
  • Utilização de ferramentas que garantem velocidade e produtividade, como o GraphQL e Django.
  • Facilidade para integração com outras bibliotecas e serviços.
  • Fornecer um produto final o mais eficiente e otimizado possível.