Ir para o conteúdo

Documento de Arquitetura

Introdução

Este Documento de Arquitetura de Software tem como objetivo descrever os aspectos arquiteturais mais significativos da solução de software do projeto PUMA e documentar informações e decisões relevantes à arquitetura do projeto ao longo de seu desenvolvimento.

O PUMA tem como objetivo dar suporte ao curso de Engenharia de Produção da Universidade de Brasília, de maneira a possibilitar a seleção de grupos, cadastro de propostas de projetos, monitoramento de disciplinas e receber feedbacks dos stakeholders.

Visão Geral

Estrutura do Documento:

  • Introdução;
  • Visão Geral;
  • Definições, Acrônimos e Abreviações;
  • Relações;
  • Serviços;
  • Tecnologias;
  • Visão de Dados;

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

Sigla Significado
PUMA Plataforma Unificada de Metodologias Ativas
HTML Hypertext Markup Language (Linguagem de Marcação de Hipertexto)
HTTP Hypertext Transfer Protocol (Protocolo de Transferência de Hipertexto)
SQL Structured Query Language (Linguagem de Consulta Estruturada)
API Application Programming Interface (Interface de Programação de Aplicações)

Relações

Visão Geral da Arquitetura

A Figura 1 apresenta a visão geral da arquitetura do projeto, representando todos os microsserviços existentes e suas relações.

Arquitetura

Figura 1 - Diagrama de Visão Geral da Arquitetura

Serviços

Front End

O Front End é a Interface de comunicação entre o usuário e o sistema.

API Gateway

O API Gateway é utilizado como um mutex para a comunicação entre a interface de usuário e os outros micro-serviços. Dessa forma, ao receber uma requisição o gateway atua como uma ponte entre o front end e o serviço desejado. Atualmente, esse serviço é responsável por fazer o tratamento das requisições entre os microsserviços Project-Service e User-Service.

Project-Service

O serviço Project-Service foi planejado para lidar com todas as tarefas envolvendo projetos do sistema. Assim, o envio de propostas, o encaminhamento para o professor/disciplina adequada e as possíveis alterações nos projetos seriam todas tarefas para o Project-Service resolver.

User-Service

O User-Service é responsável por manter o controle de usuários, desde sua criação até o controle das rotas de acesso permitidas, criação de times dentre outros. Esse serviço é responsável por lidar com todas as operações que envolvem usuários no projeto Puma.

Notify-Service

O Notify-Service lida com as notificações de alerta para usuários, por e-mail ou por meio da própria plataforma.

Alocate-Service

O Alocate-Service é um serviço criado para possibilitar que seja feita, de forma automática, a relação entre uma proposta feita e a disciplina a qual ela deve ser alocada.

Tecnologias

Vue.js

Vue.js é um framework JavaScript de código-aberto que fornece um modelo de programação declarativo e baseado em componentes para auxiliar no desenvolvimento de interfaces de usuário.

Node.js

O Node.js é um ambiente de tempo de execução JavaScript de código aberto e multiplataforma que permite a execução de códigos JavaScript fora de um navegador web.

PostgreSQL

PostgreSQL é um sistema gerenciador de banco de dados objeto relacional de código aberto que usa e estende linguagem SQL.

Docker

O Docker é uma plataforma de código que facilita a criação e administração de ambientes isolados que permite entregar software em pacotes chamados contêineres.

O Docker Compose é uma ferramenta para definir e executar aplicativos Docker de vários contêineres. Com o Compose, é possível utilizar um arquivo YAML para a configuração dos serviços.

Visão de Dados

A atual modelagem dos dados é uma continuação das modelagens elaboradas nos semestres anteriores e poderá sofrer alterações ao longo do atual desenvolvimento.

A seguir, temos a visão de dados atualizada após a ultima entrega desenvolvida com todas as entidades, relacionamentos e tabelas para o projeto.

Modelo Entidade-Relacionamento

Entidades

  COMMON_USER
    STUDENT
    PROFESSOR
    JURIDICAL_AGENT
    PHYSICAL_AGENT
  USER_TYPE
  PROJECT
  SUBJECT
  CLASS
  FILE
  SUBAREA
  KNOWLEDGE_AREA
  POST

Atributos

  COMMON_USER (userId, fullName, email, passwordHash, phoneNumber, isAdmin)
  STUDENT (regNumber, userId, softSkills)
  PROFESSOR (regNumber, userId)
  JURIDICAL_AGENT (userId, cnpj, cep, companyName, socialReason)
  PHYSICAL_AGENT (userId, cpf)
  USER_TYPE (userTypeId, typeName, description)
  PROJECT (projectId, name, description (problem, expectedResult, knowledgeArea))
  SUBAREA (subAreaId, description)
  SUBJECT (subjectId, name, courseSyllabus)
  CLASS (classId, subjectTerm, code, regNumber, subjectId)
  FILE (fileId, projectId, filename, byteContent)
  POST (postId, title, hypertext, type, createdAt, author, thumbnail, deleted)

Relacionamentos

  COMMON_USER - submits - PROJECT
    Um usuário submete um ou mais projetos e um projeto é proposto por apenas um usuário.
    Cardinalidade: 1:N.

  STUDENT - participates - CLASS
    Um estudante participa de uma ou mais turmas e uma turma é participada por um ou mais alunos.
    Cardinalidade: N:M

  STUDENT - executes - PROJECT
    Um estudante executa um ou mais projetos e um projeto é executado por um ou mais alunos.
    Cardinalidade: N:M

  PROFESSOR - lectures - SUBJECT
    Um professor pode lecionar várias disciplinas e uma disciplina pode ser lecionada por vários professores.
    Cardinalidade: N:M.

  PROJECT - has - FILE
    Um projeto pode possuir vários arquivos e um arquivo pertence a somente um projeto.
    Cardinalidade: 1:N.

  SUBAREA - identifies - SUBJECT
    Uma sub-área pode identificar várias disciplinas e uma disciplina é identificada por uma ou mais sub-áreas.
    Cardinalidade: N:M.

  KNOWLEDGE_AREA - contains - SUBAREA
    Uma área do conhecimento pode conter várias subáreas e uma subárea é contida por somente uma área do conhecimento.
    Cardinalidade: N:M.

Diagrama Entidade-Relacionamento

DER

[Figura 2: Diagrama Entidade-Relacionamento](../assets/DER.png)

Diagrama Lógico de Dados

DLD

[Figura 3: Diagrama Lógico de Dados](../assets/DLD.png)

Esses diagramas apresentam o estado atualizado dos dados, onde foi evidenciada a entidade POST e acrecentado o USER_TYPE para generalizar os tipos de perfis de usuário. Todavia, esse processo de generalização dos perfis de usuário vão impactar diretamente todos os relacionamentos que as especializações de usuário fazem. Por esse motivo, o USER_TYPE não foi relacionado ao COMMON_USER. O outra entidade que precisa ser revisada a para se relacionar com as outras é o POST que já estava implementada.

Dicionario de Dados

PROJECT
Sigla Tipo Descrição
SB ENUM Utilizado quando a proposta é submetida.
RL ENUM Utilizado quando professor/administrador realoca a proposta para outra disciplina.
AL ENUM Utilizado quando a proposta não possui disciplina alocada (a disciplina adequada para a proposta não é conhecida pelo professor responsável).
AC ENUM Utilizado quando a proposta for aceita por um professor/administrador, porém ainda não incluída a nenhum semestre.
RC ENUM Utilizado quando a proposta for recusada por um professor/administrador.
IC ENUM Utilizado quando a proposta for incluída para o semestre de alguma disciplina.
EX ENUM Utilizado quando o(s) time(s) designado(s) inicia(m) o desenvolvimento do projeto.
EC ENUM Utilizado quando o desenvolvimento do projeto for concluído.

SEMESTER

Sigla Tipo Descrição
AD ENUM Para os semestres que estão em andamento.
CD ENUM Para os semestres concluídos.

POST

Sigla Tipo Descrição
ED ENUM Para publicação de editais.
NT ENUM Para publicação de notícias.
DP ENUM Para divulgar os melhores projetos.

Referências

About Node.js. Node JS. Disponível aqui. Acesso em: 30 nov. 2022.

About PostgreSQL. PostgreSQL. Disponível aqui. Acesso em: 30 nov. 2022.

Documento de Arquitetura. Documentação PUMA 2022-1. Disponível aqui. Acesso em: 05 dez. 2022.

GUEDES, Marylene. O que é o Docker e como ele funciona? TreinaWeb. Disponível aqui. Acesso em: 30 nov. 2022.

Introduction. Vue.js Guide. Disponível aqui. Acesso em: 30 nov. 2022.

Histórico de Revisão

Data Versão Modificação Autor
30/11/2022 0.1 Criação, estruturação do documento e introdução. Hérya
05/12/2022 0.2 Adição de visão geral, definições, serviços e referências. Hérya
06/12/2022 0.3 Adição de diagrama de arquitetura. Hérya
06/02/2023 1.0 Adição da visão de dados atualizada. Matheus