From 8466e40ef9a3ad381745ee4fcf2143138d0821f1 Mon Sep 17 00:00:00 2001
From: Meyer <jmm23@inf.ufpr.br>
Date: Fri, 22 Nov 2024 11:08:25 -0300
Subject: [PATCH] adicionando topicos da estrutura

---
 source/pages/arquitetura.md | 337 ++++++++++++++++++++++++++++++++++++
 source/pages/tutorial.md    |   1 +
 2 files changed, 338 insertions(+)
 create mode 100644 source/pages/arquitetura.md
 create mode 100644 source/pages/tutorial.md

diff --git a/source/pages/arquitetura.md b/source/pages/arquitetura.md
new file mode 100644
index 0000000..8d8a83d
--- /dev/null
+++ b/source/pages/arquitetura.md
@@ -0,0 +1,337 @@
+
+# Estrutura
+
+  ## Frontend
+  ### Descrição
+  #### Desenvolvimento
+  #### Produção
+  #### Docker
+  #### CI/CD
+    No contexto do frontend, o CI/CD é um processo automatizado que garante a qualidade do código e a eficiência do desenvolvimento por meio de ferramentas integradas para testes, linting, e validações de build. Durante a Integração Contínua (CI), cada commit ou pull request aciona verificações como execução de testes automatizados com frameworks como Jest ou Cypress, análise de código com ESLint para identificar violações de estilo e boas práticas, e validação do build para garantir que o projeto pode ser compilado corretamente, detectando problemas de dependências ou configurações incorretas. Esse processo assegura que o código esteja funcional, seguindo os padrões estabelecidos e pronto para ser entregue com confiança aos usuários.
+  ### Páginas
+    - Login: Tela para entrar na plataforma;
+    - Cadastro: O cadastro da plataforma serve para criar novos usuários;
+    - Home: A home da plataforma serve como o ponto central de acesso às funcionalidades principais, apresentando uma interface organizada e intuitiva para facilitar a navegação. Ela é composta por diferentes seções que permitem aos usuários acessar tabelas, realizar inserções e gerenciar os dados do sistema;
+    - Tabelas: Telas que mostram em tabelas as entidades do laboratório, como bolsistas, professores e documentos; 
+    - Inserção: Tela para inserir as entidades da plataforma;
+    - Dashboard Processo Seletivo: Tela que mostra todos os processos seletivos, tanto ativos quanto finalizados e permite acesso à tela de detalhes do processo seletivo;
+    - Detalhes do Processo Seletivo: Tela que mostra participantes e suas submissões nos processos seletivo. Permite também apagar dados sensíveis após finalização do processo seletivo;
+    - Detalhes do Projeto: Tela que mostra detalhes do projeto, como integrantes, além de permitir inserção e remoção de integrantes do projeto. 
+    - Detalhes de Entidade: Tela que mostra detalhes da entidade;
+    - Edição de Entidade: Tela para editar entidades da plataforma, apenas acessível para usuários com permissão de administrador;
+    - Processo Seletivo: Tela onde os participantes do Processo Seletivo submetem sua aplicação.
+  ### Tecnologias
+
+  ## Backend
+  ### Descrição
+  #### Desenvolvimento
+  #### Produção
+  #### Docker
+  ### Rotas
+
+  ### Testes
+  #### Jest + Supertest
+    No contexto do backend, o CI/CD é um processo automatizado que assegura a qualidade do código e a eficiência do desenvolvimento por meio de ferramentas integradas para testes, linting e implantação. Durante a Integração Contínua (CI), cada commit ou pull request dispara verificações como execução de testes automatizados, análise de código com ESLint e checagem de tipagem usando o compilador TypeScript (tsc), garantindo que o código segue padrões e está livre de erros.
+  #### Fluxo dos testes
+    No fluxo de testes do backend, cada entidade é testada de forma isolada, garantindo que os testes sejam independentes e focados exclusivamente na funcionalidade de cada rota ou serviço. Para realizar a maioria dos testes, inicialmente é criado um usuário temporário no banco de dados, que serve como base para autenticação. Esse usuário gera um token de acesso, que é utilizado para autenticar as requisições às rotas protegidas durante os testes.
+    
+    Cada teste simula interações reais com o sistema, como requisições HTTP para criação, leitura, atualização e exclusão de dados, sempre utilizando esse token. Após a execução de cada teste, as alterações realizadas no banco de dados (como a criação do usuário, tokens ou entidades relacionadas) são removidas automaticamente para garantir que o estado inicial do sistema seja restaurado, prevenindo interferências em outros testes. Isso permite que o ambiente de testes seja sempre previsível, consistente e confiável.
+  #### CI/CD
+    No contexto do backend, o CI/CD é um processo automatizado que assegura a qualidade do código e a eficiência do desenvolvimento por meio de ferramentas integradas para testes, linting e implantação. Durante a Integração Contínua (CI), cada commit ou pull request dispara verificações como execução de testes automatizados, análise de código com ESLint e checagem de tipagem usando o compilador TypeScript (tsc), garantindo que o código segue padrões e está livre de erros.
+
+  ### Tecnolgias
+  O backend é desenvolvido utilizando Node.js, uma plataforma de execução de JavaScript no lado do servidor, construída sobre o mecanismo V8, o mesmo usado pelo Google Chrome para interpretar JavaScript. Para melhorar a organização e a segurança do código, utilizamos TypeScript, que adiciona tipagem estática ao JavaScript, facilitando a detecção de erros e tornando o desenvolvimento mais escalável. As rotas e a lógica de negócio são estruturadas com o Express, um framework minimalista que simplifica a criação de servidores HTTP e a gestão de rotas, middlewares e controladores. Essa combinação de tecnologias permite criar uma aplicação backend modular, segura e de alta performance, atendendo às necessidades do projeto de forma eficiente.
+  
+  ## Banco de Dados
+  ### SQL
+    ```console
+    BEGIN;
+
+    -- TABELAS DE ENTIDADES
+
+    CREATE TABLE students(
+        id SERIAL, 
+        name TEXT,
+        init_date DATE, -- data de ingresso no c3sl
+        gender TEXT,
+        skin_color TEXT, -- cor
+        ethnicity TEXT, -- etnia
+        grr TEXT UNIQUE,
+        semester INT,
+        avg_fml_income INT, -- renda média familiar do bolsista (valor)
+        email TEXT,
+        "createdAt" DATE,
+        "updatedAt" DATE,
+        PRIMARY KEY (id)
+    );
+
+    CREATE TABLE professor(
+        id SERIAL, 
+        name TEXT,
+        init_date DATE, -- data de ingresso no c3sl
+        gender TEXT,
+        skin_color TEXT, -- cor
+        ethnicity TEXT, -- etnia
+        registration TEXT UNIQUE, -- número de registro de funcionário
+        email TEXT,
+        "createdAt" DATE,
+        "updatedAt" DATE,
+        PRIMARY KEY (id)
+    );
+
+    CREATE TABLE technician(
+        id SERIAL, 
+        name TEXT,
+        init_date DATE, -- data de ingresso no c3sl
+        gender TEXT,
+        skin_color TEXT, -- cor
+        ethnicity TEXT, -- etnia
+        registration TEXT UNIQUE,
+        email TEXT,
+        "createdAt" DATE,
+        "updatedAt" DATE,
+        PRIMARY KEY (id)
+    );
+
+    CREATE TABLE clt( 
+        id SERIAL, 
+        name TEXT,
+        init_date DATE, -- data de ingresso no c3sl
+        gender TEXT,
+        skin_color TEXT,
+        ethnicity TEXT,
+        education_degree TEXT, -- escolaridade
+        is_student BOOLEAN, 
+        email TEXT,
+        "createdAt" DATE,
+        "updatedAt" DATE,
+        PRIMARY KEY (id)
+    );
+
+    CREATE TABLE scholarship_type( -- tipo de bolsa
+        id SERIAL,
+        type TEXT, -- tipo de bolsa (bacharelado, mestrado, doutorado)
+        category TEXT, -- categoria da bolsa (1-inicial; 2-2o ano C3SL; 3-3o ano curso; ...)
+        amount INT, -- valor da bolsa
+        is_national BOOLEAN, -- booleano
+        "createdAt" DATE,
+        "updatedAt" DATE,
+        PRIMARY KEY (id)
+    );
+
+    CREATE TABLE projects( 
+        id SERIAL,
+        name TEXT UNIQUE,
+        starting_date DATE, -- data de início do projeto
+        ending_date DATE, -- data de finalização do projeto. Valor nulo caso o projeto esteja em andamento
+        status TEXT,
+        "createdAt" DATE,
+        "updatedAt" DATE,
+        PRIMARY KEY (id)
+    );
+
+    CREATE TABLE documents( -- tabela de documentos (guardados no S3)
+        id SERIAL,
+        name TEXT UNIQUE,
+        type TEXT, -- tipo de documento (relatório, formulário, ...) 
+        bucket_key TEXT UNIQUE, --nome/chave do arquivo no bucket
+        "createdAt" DATE,
+        "updatedAt" DATE,
+        PRIMARY KEY (id)
+    );-- data de ingresso no c3sl
+
+    CREATE TABLE IF NOT EXISTS user_system ( 
+        id SERIAL,
+        name TEXT UNIQUE,
+        email TEXT UNIQUE,
+        password TEXT, 
+        is_active BOOLEAN, -- booleano que define se o usuário está ativo
+        register_date DATE, -- data em que o cadastro foi feito
+        "isEmailVerified" BOOLEAN,
+        verification_date DATE,
+        "createdAt" DATE,
+        "updatedAt" DATE,
+        last_login DATE,
+        PRIMARY KEY (id)
+    );
+
+    CREATE TABLE permissions (
+        id SERIAL,
+        name TEXT UNIQUE, -- nome da permissão do usuário
+        "createdAt" DATE,
+        "updatedAt" DATE,
+        PRIMARY KEY (id)
+    );
+
+    -- TABELAS DE RELAÇÃO
+
+    CREATE TABLE student_project_participation ( -- relaciona as tabelas student e projects
+        id SERIAL,
+        project_id INT,
+        student_id INT,
+        "createdAt" DATE,
+        "updatedAt" DATE,
+        FOREIGN KEY (student_id) REFERENCES students(id) ON DELETE CASCADE,
+        FOREIGN KEY (project_id) REFERENCES projects(id) ON DELETE CASCADE,
+        PRIMARY KEY (id)
+    );
+
+    CREATE TABLE professor_project_participation ( -- relaciona as tabelas professor e projects
+        id SERIAL,
+        project_id INT,
+        professor_id INT,
+        "createdAt" DATE,
+        "updatedAt" DATE,
+        FOREIGN KEY (professor_id) REFERENCES professor(id) ON DELETE CASCADE,
+        FOREIGN KEY (project_id) REFERENCES projects(id) ON DELETE CASCADE,
+        PRIMARY KEY (id)
+    );
+
+    CREATE TABLE technician_project_participation ( -- relaciona as tabelas technician e projects
+        id SERIAL,
+        project_id INT,
+        technician_id INT,
+        "createdAt" DATE,
+        "updatedAt" DATE,
+        FOREIGN KEY (technician_id) REFERENCES technician(id) ON DELETE CASCADE,
+        FOREIGN KEY (project_id) REFERENCES projects(id) ON DELETE CASCADE,
+        PRIMARY KEY (id)
+    );
+
+    CREATE TABLE clt_project_participation ( -- relaciona as tabelas clt e projects
+        id SERIAL,
+        project_id INT,
+        clt_id INT,
+        "createdAt" DATE,
+        "updatedAt" DATE,
+        FOREIGN KEY (clt_id) REFERENCES clt(id) ON DELETE CASCADE,
+        FOREIGN KEY (project_id) REFERENCES projects(id) ON DELETE CASCADE,
+        PRIMARY KEY (id)
+    );
+
+    CREATE TABLE student_scholarships ( -- relaciona as tabelas student e scholarship_type
+        id SERIAL,
+        student_id INT,
+        scholarship_type_id INT,
+        "createdAt" DATE,
+        "updatedAt" DATE,
+        FOREIGN KEY (student_id) REFERENCES students(id) ON DELETE CASCADE,
+        FOREIGN KEY (scholarship_type_id) REFERENCES scholarship_type(id) ON DELETE CASCADE,
+        PRIMARY KEY (id)
+    );
+
+
+    CREATE TABLE document_relations ( -- relaciona as tabelas document e projects
+        id SERIAL,
+        project_id INT,
+        document_id INT,
+        "createdAt" DATE,
+        "updatedAt" DATE,
+        FOREIGN KEY (project_id) REFERENCES projects(id),
+        FOREIGN KEY (document_id) REFERENCES documents(id),
+        PRIMARY KEY (id)
+    );
+
+    CREATE TABLE user_permissions ( -- relaciona as tabelas user_system e permissions
+        id SERIAL, 
+        id_permission INT,
+        id_system_user INT,
+        "createdAt" DATE,
+        "updatedAt" DATE,
+        PRIMARY KEY (id),
+        FOREIGN KEY (id_permission) REFERENCES permissions (id) ON DELETE CASCADE,
+        FOREIGN KEY (id_system_user) REFERENCES user_system (id) ON DELETE CASCADE
+    );
+
+    CREATE TABLE ps_form ( 
+        id SERIAL,
+        was_transfered BOOLEAN,
+        is_email_verified BOOLEAN,
+        name TEXT,
+        grr TEXT,
+        email TEXT,
+        is_ufpr BOOLEAN,
+        course TEXT,
+        is_bcc BOOLEAN,
+        done_prog1 BOOLEAN,
+        done_prog2 BOOLEAN,
+        done_alg1 BOOLEAN,
+        done_bd BOOLEAN,
+        done_redes2 BOOLEAN,
+        done_ihc BOOLEAN,
+        semester INT,
+        rg TEXT,
+        motivation_letter TEXT,
+        academic_background TEXT,
+        curriculo TEXT,
+        declaracao_nao_beneficiario TEXT,
+        notes TEXT,
+        ethnicity TEXT,
+        skin_color TEXT,
+        avg_fml_income INT,
+        gender TEXT,
+        "createdAt" DATE,
+        "updatedAt" DATE,
+        PRIMARY KEY (id)
+    );
+
+    CREATE TABLE ps (
+        id SERIAL,
+        name TEXT UNIQUE,
+        edital TEXT,
+        starting_date DATE, 
+        ending_date DATE, 
+        "createdAt" DATE,
+        "updatedAt" DATE,
+        PRIMARY KEY (id)
+    );
+
+    CREATE TABLE ps_relation ( 
+        id SERIAL,
+        participant_id INT,
+        ps_id INT, 
+        "createdAt" DATE,
+        "updatedAt" DATE,
+        FOREIGN KEY (participant_id) REFERENCES ps_form(id) ON DELETE CASCADE,
+        FOREIGN KEY (ps_id) REFERENCES ps(id) ON DELETE CASCADE, 
+        PRIMARY KEY (id)
+    );
+
+    CREATE TABLE partners (
+        id SERIAL,
+        name TEXT UNIQUE,
+        "createdAt" DATE,
+        "updatedAt" DATE,
+        PRIMARY KEY (id)
+    );
+
+    CREATE TABLE partners_project (
+        id SERIAL,
+        partner_id INT,
+        project_id INT,
+        "createdAt" DATE,
+        "updatedAt" DATE,
+        FOREIGN KEY (partner_id) REFERENCES partners(id) ON DELETE CASCADE,
+        FOREIGN KEY (project_id) REFERENCES projects(id) ON DELETE CASCADE,
+        PRIMARY KEY (id)
+    );
+
+    CREATE TABLE partner_student (
+        id SERIAL,
+        partner_id INT,
+        student_id INT,
+        "createdAt" DATE,
+        "updatedAt" DATE,
+        FOREIGN KEY (partner_id) REFERENCES partners(id) ON DELETE CASCADE,
+        FOREIGN KEY (student_id) REFERENCES students(id) ON DELETE CASCADE,
+        PRIMARY KEY (id)
+    );
+
+    COMMIT;
+    ```
+  ### Migrações
+  ### Tecnologias
+  #### PostgreSQL
+    O PostgreSQL é um sistema de gerenciamento de banco de dados relacional (SGBD) de código aberto, altamente robusto e escalável. Ele suporta SQL (Structured Query Language) e oferece recursos avançados, como:
+  #### Sequelize
+    O Sequelize é uma biblioteca ORM (Object-Relational Mapping) para Node.js, que permite interagir com bancos de dados relacionais, como PostgreSQL, MySQL, MariaDB, SQLite e SQL Server, utilizando código JavaScript. Ele abstrai a complexidade de escrever queries SQL diretamente, oferecendo uma interface simples para realizar operações no banco, além de garantir maior segurança contra SQL Injection ao utilizar placeholders e manipulação parametrizada de dados em suas consultas.
diff --git a/source/pages/tutorial.md b/source/pages/tutorial.md
new file mode 100644
index 0000000..203501d
--- /dev/null
+++ b/source/pages/tutorial.md
@@ -0,0 +1 @@
+# Tutorial
\ No newline at end of file
-- 
GitLab