From 71836ef53620f1b606e5bb456358191a16ee23cc Mon Sep 17 00:00:00 2001 From: DaviMatheus Date: Tue, 9 Jul 2024 15:11:12 -0300 Subject: [PATCH 1/4] doc(#16)Documento-arquitetura --- docs/organizacoes/documento_arquitetura.md | 100 +++++++++++++++++++++ docs/{planejamento => organizacoes}/eap.md | 0 mkdocs.yml | 3 +- 3 files changed, 102 insertions(+), 1 deletion(-) create mode 100644 docs/organizacoes/documento_arquitetura.md rename docs/{planejamento => organizacoes}/eap.md (100%) diff --git a/docs/organizacoes/documento_arquitetura.md b/docs/organizacoes/documento_arquitetura.md new file mode 100644 index 0000000..866e3dc --- /dev/null +++ b/docs/organizacoes/documento_arquitetura.md @@ -0,0 +1,100 @@ + +# Documento de Arquitetura + +## 1. Introdução + +Este documento tem como principal objetivo fornecer uma visão abrangente e estruturada da arquitetura do software Calculos. Utilizando diferentes visões arquiteturais, ele destaca diversos aspectos do sistema, proporcionando uma visão geral completa. A descrição abrange as principais decisões de design, componentes, módulos, interações e estrutura do software, facilitando assim o entendimento da arquitetura para os desenvolvedores. + + +### 1.1. Visão Geral +Este documento está estruturado da seguinte forma: +- Introdução +- Representação arquitetural +- Visão Lógica +- Referências bibliográficas +- Histórico de versão + +## 2. Representação Arquitetural + +### 2.1. Diagrama de Relações + + + +O estilo arquitetural de microsserviços consiste em uma abordagem onde a aplicação é composta por serviços menores, implementados de forma independente e com baixo acoplamento. Esses serviços, organizados por recursos de negócios, comunicam-se entre si normalmente por meio de APIs. + +A arquitetura de microsserviços acelera o desenvolvimento e facilita a escalabilidade da aplicação. Esse padrão será utilizado no Calculos, com cada microsserviço possuindo sua própria base de dados independente. + +### 2.2. Representação dos serviços + +#### 2.2.1. Gateway +O gateway é responsável por atuar como a interface entre o usuário e os demais serviços da aplicação, garantindo autenticação e autorização. Além disso, ele facilita a comunicação entre os serviços, servindo como ponto central para a gestão de requisições e respostas. No Caluculos, utilizaremos RabbitMQ para gerenciar a comunicação assíncrona entre os microsserviços, assegurando um fluxo de dados eficiente e confiável. + +#### 2.2.2. Usuário +O serviço de usuário é responsável pela gestão completa dos usuários da aplicação. Isso inclui o registro, autenticação, atualização de informações, gerenciamento de permissões e controle de acesso, garantindo uma experiência segura e personalizada para cada usuário. + +#### 2.2.3. Jornadas +O serviço de jornadas é responsável pela gestão das jornadas na aplicação. Isso inclui a criação, atualização e exclusão de jornadas, bem como a administração das inscrições dos clientes, permitindo que eles ingressem e participem das jornadas de forma eficiente e organizada. + +#### 2.2.4. Gamificação +O serviço de gamificação é responsável por gerenciar a progressão dos usuários nas trilhas, acompanhando o avanço passo a passo nos exercícios. Ele também administra o sistema de recompensas, incentivando a participação ativa dos usuários através de pontos, medalhas e outros incentivos, promovendo uma experiência mais envolvente e motivadora na aplicação. + +### 2.3. Tecnologias + +#### 2.3.1. NextJS +O Next.js é um framework de desenvolvimento baseado em React que permite a criação de interfaces de usuário robustas e escaláveis. Ele facilita a renderização no servidor, a geração de páginas estáticas e a integração com APIs, proporcionando uma experiência de desenvolvimento otimizada. Com Next.js, é possível criar UIs complexas de forma eficiente, garantindo alta performance e SEO aprimorado. O Next.js será utilizado no front-end. + + + +#### 2.3.2. NestJS +O NestJS é um framework de desenvolvimento baseado em Node.js que facilita a criação de aplicações escaláveis e eficientes. Ele utiliza uma arquitetura modular e orientada a objetos, permitindo a organização de código em módulos, controladores e serviços. Com suporte integrado para TypeScript, injeção de dependências e uma estrutura robusta para desenvolvimento de APIs e microsserviços, o NestJS é ideal para construir back-ends robustos e manuteníveis. O NestJS será utilizado no back-end. + +#### 2.3.3. PostgreSQL +O PostgreSQL é um sistema gerenciador de banco de dados relacional de código aberto conhecido pela sua robustez, confiabilidade e capacidade de lidar com cargas de trabalho complexas. Ele oferece suporte a uma ampla gama de recursos avançados, como tipos de dados personalizados, extensões, transações ACID-compliant e replicação, tornando-o ideal para aplicações que requerem integridade e escalabilidade. O PostgreSQL será utilizado para gerenciar as bases de dados dos serviços da aplicação, garantindo segurança, desempenho e flexibilidade. + +#### 2.3.4. Docker + +O Docker é uma plataforma de virtualização de contêineres que transformou a maneira como aplicações são desenvolvidas, empacotadas e implantadas. Ele proporciona aos desenvolvedores a capacidade de criar ambientes isolados e autossuficientes para suas aplicações, conhecidos como contêineres. Esses contêineres encapsulam não apenas o código da aplicação, mas também todas as dependências necessárias, como bibliotecas e configurações, garantindo consistência e portabilidade entre diferentes ambientes de desenvolvimento e produção. + + +#### 2.3.5. RabbitMQ + +O RabbitMQ é um sistema de mensageria de código aberto amplamente utilizado para facilitar a comunicação entre diferentes partes de uma aplicação distribuída. Ele funciona como um intermediário que permite que os diversos componentes do sistema troquem mensagens de forma assíncrona e confiável. O RabbitMQ suporta diversos padrões de mensageria, como filas, trocas e roteamento de mensagens, proporcionando flexibilidade na configuração e escalabilidade para aplicações que exigem comunicação distribuída. + + +## 3. Visão Lógica + +### 3.1. Diagrama de Pacotes + + + +#### 3.1.1 Introdução + +O Diagrama de Pacotes é uma representação estrutural usada para organizar as classes de um projeto em grupos lógicos chamados pacotes. Cada pacote agrupa elementos relacionados, como diagramas, classes e outros pacotes, oferecendo uma visão de alto nível especialmente útil em projetos e sistemas complexos. + +No nosso diagrama de pacotes, seguimos a arquitetura definida pelas diretrizes de microsserviços. O pacote principal representa o nosso sistema, dentro do qual encontramos a camada de front-end responsável por realizar requisições. Essas requisições são direcionadas para a camada de back-end, que por sua vez abriga nossos três microsserviços principais: UserService, JornadaService e GamificationService. Esses microsserviços interagem com o banco de dados para armazenamento e recuperação de dados. + +Ambos os Diagramas estão abaixo: + + + + + + +### 3.2. Diagrama de Implementação + + + +## 4. Referencências bibliográficas + +> [1] EQUIPE ALECTRION 2022-2. Documento de Arquitetura. Disponível em: https://fga-eps-mds.github.io/2022-2-Alectrion-DOC/#/./Documentos/arquitetura. Acesso em: 18 out. 2023. + +> [2] SOARES, João Pedro; ESTANISLAU, Matheus. Documento de Arquitetura. Disponível em: https://fga-eps-mds.github.io/2022-1-Alectrion-DOC/documentation/Documentos/documento-arquitetura.html. Acesso em: 18 out. 2023. + +## 5. Histórico de versão + +|**Data**|**Descrição**|**Autore(es)**| +|--------|-------------|--------------| +| 09/07/2023 | Criação do documento | Davi Matheus e Natanael Filho | + + + diff --git a/docs/planejamento/eap.md b/docs/organizacoes/eap.md similarity index 100% rename from docs/planejamento/eap.md rename to docs/organizacoes/eap.md diff --git a/mkdocs.yml b/mkdocs.yml index 38af498..44d523d 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -35,12 +35,13 @@ nav: - Sobre: 'index.md' - Organizações do Projeto: - Termo de Abertura do Projeto: 'organizacoes/tap.md' + - Documento de Arquitetura: 'organizacoes/documento_arquitetura.md' + - EAP: 'organizacoes/eap.md' - Planejamentos: - Quadro de disponibilidade: 'planejamento/quadro_de_disponibilidade.md' - Quadro de conhecimento e pareamento: 'planejamento/conhecimento_pareamento.md' - Agenda e Ritual da Equipe: 'planejamento/agenda_ritual.md' - Planejamento de Comunicação: 'planejamento/comunicacao.md' - - EAP: 'planejamento/eap.md' - Guias: - Guia de contribuição: 'guias/guia-contribuicao.md' - Código de conduta: 'guias/codigo-conduta.md' From 1280f4a63aa33ad2a0ce2dd48c4412312e995e49 Mon Sep 17 00:00:00 2001 From: DaviMatheus Date: Tue, 9 Jul 2024 15:40:03 -0300 Subject: [PATCH 2/4] atualizando_banco_dados --- docs/organizacoes/documento_arquitetura.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/docs/organizacoes/documento_arquitetura.md b/docs/organizacoes/documento_arquitetura.md index 866e3dc..e9debea 100644 --- a/docs/organizacoes/documento_arquitetura.md +++ b/docs/organizacoes/documento_arquitetura.md @@ -49,7 +49,7 @@ O Next.js é um framework de desenvolvimento baseado em React que permite a cria O NestJS é um framework de desenvolvimento baseado em Node.js que facilita a criação de aplicações escaláveis e eficientes. Ele utiliza uma arquitetura modular e orientada a objetos, permitindo a organização de código em módulos, controladores e serviços. Com suporte integrado para TypeScript, injeção de dependências e uma estrutura robusta para desenvolvimento de APIs e microsserviços, o NestJS é ideal para construir back-ends robustos e manuteníveis. O NestJS será utilizado no back-end. #### 2.3.3. PostgreSQL -O PostgreSQL é um sistema gerenciador de banco de dados relacional de código aberto conhecido pela sua robustez, confiabilidade e capacidade de lidar com cargas de trabalho complexas. Ele oferece suporte a uma ampla gama de recursos avançados, como tipos de dados personalizados, extensões, transações ACID-compliant e replicação, tornando-o ideal para aplicações que requerem integridade e escalabilidade. O PostgreSQL será utilizado para gerenciar as bases de dados dos serviços da aplicação, garantindo segurança, desempenho e flexibilidade. +O MongoDB é um banco de dados NoSQL de código aberto reconhecido pela sua flexibilidade e escalabilidade. Ele é projetado para lidar com grandes volumes de dados de forma eficiente e oferece esquemas dinâmicos, permitindo a modelagem de dados de maneira mais livre em comparação com bancos de dados relacionais. O MongoDB suporta operações de leitura e gravação de alto desempenho, distribuição automática de dados e consultas complexas usando sua linguagem de consulta avançada. Será utilizado para gerenciar as bases de dados dos serviços da aplicação, proporcionando agilidade, escalabilidade e suporte para aplicações que demandam grande flexibilidade no armazenamento e recuperação de dados. #### 2.3.4. Docker @@ -66,7 +66,6 @@ O RabbitMQ é um sistema de mensageria de código aberto amplamente utilizado pa ### 3.1. Diagrama de Pacotes - #### 3.1.1 Introdução O Diagrama de Pacotes é uma representação estrutural usada para organizar as classes de um projeto em grupos lógicos chamados pacotes. Cada pacote agrupa elementos relacionados, como diagramas, classes e outros pacotes, oferecendo uma visão de alto nível especialmente útil em projetos e sistemas complexos. From 75f680381a9a462df8e3a11a322c8ae6a19bbf37 Mon Sep 17 00:00:00 2001 From: DaviMatheus Date: Tue, 9 Jul 2024 15:40:34 -0300 Subject: [PATCH 3/4] fix_changes --- docs/organizacoes/documento_arquitetura.md | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/docs/organizacoes/documento_arquitetura.md b/docs/organizacoes/documento_arquitetura.md index e9debea..936e873 100644 --- a/docs/organizacoes/documento_arquitetura.md +++ b/docs/organizacoes/documento_arquitetura.md @@ -85,10 +85,9 @@ Ambos os Diagramas estão abaixo: ## 4. Referencências bibliográficas -> [1] EQUIPE ALECTRION 2022-2. Documento de Arquitetura. Disponível em: https://fga-eps-mds.github.io/2022-2-Alectrion-DOC/#/./Documentos/arquitetura. Acesso em: 18 out. 2023. - -> [2] SOARES, João Pedro; ESTANISLAU, Matheus. Documento de Arquitetura. Disponível em: https://fga-eps-mds.github.io/2022-1-Alectrion-DOC/documentation/Documentos/documento-arquitetura.html. Acesso em: 18 out. 2023. +> [1] EQUIPE ALECTRION 2022-2. Documento de Arquitetura. Disponível em: https://fga-eps-mds.github.io/2022-2-Alectrion-DOC/#/./Documentos/arquitetura. +> [2] SOARES, João Pedro; ESTANISLAU, Matheus. Documento de Arquitetura. Disponível em: https://fga-eps-mds.github.io/2022-1-Alectrion-DOC/documentation/Documentos/documento-arquitetura.html. ## 5. Histórico de versão |**Data**|**Descrição**|**Autore(es)**| From 99a1c115add3bc8a9e5f13e55bbfef3a61e4abeb Mon Sep 17 00:00:00 2001 From: Natanael Filho Date: Wed, 10 Jul 2024 19:01:21 -0300 Subject: [PATCH 4/4] doc(#16): Revisando documento de arquitetura --- docs/organizacoes/documento_arquitetura.md | 35 ++++++++++------------ 1 file changed, 16 insertions(+), 19 deletions(-) diff --git a/docs/organizacoes/documento_arquitetura.md b/docs/organizacoes/documento_arquitetura.md index 936e873..027a500 100644 --- a/docs/organizacoes/documento_arquitetura.md +++ b/docs/organizacoes/documento_arquitetura.md @@ -5,9 +5,10 @@ Este documento tem como principal objetivo fornecer uma visão abrangente e estruturada da arquitetura do software Calculos. Utilizando diferentes visões arquiteturais, ele destaca diversos aspectos do sistema, proporcionando uma visão geral completa. A descrição abrange as principais decisões de design, componentes, módulos, interações e estrutura do software, facilitando assim o entendimento da arquitetura para os desenvolvedores. - ### 1.1. Visão Geral + Este documento está estruturado da seguinte forma: + - Introdução - Representação arquitetural - Visão Lógica @@ -27,45 +28,47 @@ A arquitetura de microsserviços acelera o desenvolvimento e facilita a escalabi ### 2.2. Representação dos serviços #### 2.2.1. Gateway + O gateway é responsável por atuar como a interface entre o usuário e os demais serviços da aplicação, garantindo autenticação e autorização. Além disso, ele facilita a comunicação entre os serviços, servindo como ponto central para a gestão de requisições e respostas. No Caluculos, utilizaremos RabbitMQ para gerenciar a comunicação assíncrona entre os microsserviços, assegurando um fluxo de dados eficiente e confiável. #### 2.2.2. Usuário + O serviço de usuário é responsável pela gestão completa dos usuários da aplicação. Isso inclui o registro, autenticação, atualização de informações, gerenciamento de permissões e controle de acesso, garantindo uma experiência segura e personalizada para cada usuário. #### 2.2.3. Jornadas + O serviço de jornadas é responsável pela gestão das jornadas na aplicação. Isso inclui a criação, atualização e exclusão de jornadas, bem como a administração das inscrições dos clientes, permitindo que eles ingressem e participem das jornadas de forma eficiente e organizada. #### 2.2.4. Gamificação + O serviço de gamificação é responsável por gerenciar a progressão dos usuários nas trilhas, acompanhando o avanço passo a passo nos exercícios. Ele também administra o sistema de recompensas, incentivando a participação ativa dos usuários através de pontos, medalhas e outros incentivos, promovendo uma experiência mais envolvente e motivadora na aplicação. ### 2.3. Tecnologias #### 2.3.1. NextJS -O Next.js é um framework de desenvolvimento baseado em React que permite a criação de interfaces de usuário robustas e escaláveis. Ele facilita a renderização no servidor, a geração de páginas estáticas e a integração com APIs, proporcionando uma experiência de desenvolvimento otimizada. Com Next.js, é possível criar UIs complexas de forma eficiente, garantindo alta performance e SEO aprimorado. O Next.js será utilizado no front-end. - +O Next.js é um framework de desenvolvimento baseado em React que permite a criação de interfaces de usuário robustas e escaláveis. Ele facilita a renderização no servidor, a geração de páginas estáticas e a integração com APIs, proporcionando uma experiência de desenvolvimento otimizada. Com Next.js, é possível criar UIs complexas de forma eficiente, garantindo alta performance e SEO aprimorado. O Next.js será utilizado no front-end. #### 2.3.2. NestJS + O NestJS é um framework de desenvolvimento baseado em Node.js que facilita a criação de aplicações escaláveis e eficientes. Ele utiliza uma arquitetura modular e orientada a objetos, permitindo a organização de código em módulos, controladores e serviços. Com suporte integrado para TypeScript, injeção de dependências e uma estrutura robusta para desenvolvimento de APIs e microsserviços, o NestJS é ideal para construir back-ends robustos e manuteníveis. O NestJS será utilizado no back-end. -#### 2.3.3. PostgreSQL +#### 2.3.3. MongoDB + O MongoDB é um banco de dados NoSQL de código aberto reconhecido pela sua flexibilidade e escalabilidade. Ele é projetado para lidar com grandes volumes de dados de forma eficiente e oferece esquemas dinâmicos, permitindo a modelagem de dados de maneira mais livre em comparação com bancos de dados relacionais. O MongoDB suporta operações de leitura e gravação de alto desempenho, distribuição automática de dados e consultas complexas usando sua linguagem de consulta avançada. Será utilizado para gerenciar as bases de dados dos serviços da aplicação, proporcionando agilidade, escalabilidade e suporte para aplicações que demandam grande flexibilidade no armazenamento e recuperação de dados. #### 2.3.4. Docker O Docker é uma plataforma de virtualização de contêineres que transformou a maneira como aplicações são desenvolvidas, empacotadas e implantadas. Ele proporciona aos desenvolvedores a capacidade de criar ambientes isolados e autossuficientes para suas aplicações, conhecidos como contêineres. Esses contêineres encapsulam não apenas o código da aplicação, mas também todas as dependências necessárias, como bibliotecas e configurações, garantindo consistência e portabilidade entre diferentes ambientes de desenvolvimento e produção. - #### 2.3.5. RabbitMQ O RabbitMQ é um sistema de mensageria de código aberto amplamente utilizado para facilitar a comunicação entre diferentes partes de uma aplicação distribuída. Ele funciona como um intermediário que permite que os diversos componentes do sistema troquem mensagens de forma assíncrona e confiável. O RabbitMQ suporta diversos padrões de mensageria, como filas, trocas e roteamento de mensagens, proporcionando flexibilidade na configuração e escalabilidade para aplicações que exigem comunicação distribuída. - -## 3. Visão Lógica +## 3. Visão Lógica ### 3.1. Diagrama de Pacotes - #### 3.1.1 Introdução O Diagrama de Pacotes é uma representação estrutural usada para organizar as classes de um projeto em grupos lógicos chamados pacotes. Cada pacote agrupa elementos relacionados, como diagramas, classes e outros pacotes, oferecendo uma visão de alto nível especialmente útil em projetos e sistemas complexos. @@ -76,23 +79,17 @@ Ambos os Diagramas estão abaixo: - - - -### 3.2. Diagrama de Implementação +### 3.2. Diagrama de Implementação ## 4. Referencências bibliográficas -> [1] EQUIPE ALECTRION 2022-2. Documento de Arquitetura. Disponível em: https://fga-eps-mds.github.io/2022-2-Alectrion-DOC/#/./Documentos/arquitetura. - -> [2] SOARES, João Pedro; ESTANISLAU, Matheus. Documento de Arquitetura. Disponível em: https://fga-eps-mds.github.io/2022-1-Alectrion-DOC/documentation/Documentos/documento-arquitetura.html. +> [1] EQUIPE ALECTRION 2022-2. Documento de Arquitetura. Disponível em: https://fga-eps-mds.github.io/2022-2-Alectrion-DOC/#/./Documentos/arquitetura. +> [2] SOARES, João Pedro; ESTANISLAU, Matheus. Documento de Arquitetura. Disponível em: https://fga-eps-mds.github.io/2022-1-Alectrion-DOC/documentation/Documentos/documento-arquitetura.html. ## 5. Histórico de versão |**Data**|**Descrição**|**Autore(es)**| |--------|-------------|--------------| -| 09/07/2023 | Criação do documento | Davi Matheus e Natanael Filho | - - - +| 09/07/2023 | Criação do documento | Davi Matheus| +| 10/07/2023 | Revisao | Natanael Filho |