├── .env
├── .env.dev
├── .gitignore
├── DOCUMENTOS_DE_APOIO
├── PASSO_A_PASSO_ADICIONAR_UPLOAD_DE_IMAGENS_AO_PROJETO.md
├── PASSO_A_PASSO_CRIAR_ROTA_NA_API.md
├── exemplo_criacao_grafico_estatico
│ └── EXEMPLO-GRAFICO-ESTATICO.html
├── exemplo_de_quiz
│ ├── EXEMPLO_QUIZZ.html
│ └── style.css
└── exemplo_de_upload_de_arquivo
│ ├── .gitignore
│ ├── LICENSE
│ ├── README.md
│ ├── app.js
│ ├── package.json
│ ├── public
│ ├── index.html
│ └── perfil.html
│ └── src
│ ├── config
│ └── configUpload.js
│ ├── controllers
│ └── usuarioController.js
│ ├── database
│ ├── config.js
│ └── script-exemplo-criacao.sql
│ ├── models
│ └── usuarioModel.js
│ └── routes
│ └── usuarioRouter.js
├── LICENSE
├── README.md
├── app.js
├── package.json
├── public
├── assets
│ ├── aguarde-orange.gif
│ ├── aguarde-pink.gif
│ ├── aguarde-pink2.gif
│ ├── aguarde-pink3.gif
│ ├── circle-loading.gif
│ ├── icon
│ │ ├── favicon2.ico
│ │ └── favicon2.png
│ └── imgs
│ │ ├── av1.png
│ │ ├── av2.png
│ │ ├── av3.png
│ │ ├── av4.png
│ │ ├── av5.png
│ │ ├── banner-fundo.jpeg
│ │ ├── bg-jelly-fish-para-home.png
│ │ ├── bg-jelly-fish-para_outras_pags.png
│ │ ├── growth.png
│ │ ├── growth_color.png
│ │ ├── imagem-apoio.png
│ │ ├── lightbulb.png
│ │ ├── lightbulb_color.png
│ │ ├── missao.png
│ │ ├── pessoa1.png
│ │ ├── pessoa2.png
│ │ ├── pessoa3.png
│ │ ├── planet-earth.png
│ │ ├── planet-earth_color.png
│ │ ├── side-img-contato.png
│ │ ├── valores.png
│ │ └── visao.png
├── cadastro.html
├── css
│ ├── dashboards.css
│ └── estilo.css
├── dashboard
│ ├── cards.html
│ ├── dashboard.html
│ ├── edicao-aviso.html
│ └── mural.html
├── index.html
├── js
│ ├── alerta.js
│ └── sessao.js
├── login.html
└── simulador.html
└── src
├── controllers
├── aquarioController.js
├── avisoController.js
├── empresaController.js
├── medidaController.js
└── usuarioController.js
├── database
├── config.js
└── script-tabelas.sql
├── models
├── aquarioModel.js
├── avisoModel.js
├── empresaModel.js
├── medidaModel.js
└── usuarioModel.js
└── routes
├── aquarios.js
├── avisos.js
├── empresas.js
├── index.js
├── medidas.js
└── usuarios.js
/.env:
--------------------------------------------------------------------------------
1 | AMBIENTE_PROCESSO=producao
2 |
3 | # Configurações de conexão com o banco de dados
4 | DB_HOST='seusDadosAqui'
5 | DB_DATABASE='seusDadosAqui'
6 | DB_USER='seusDadosAqui'
7 | DB_PASSWORD='seusDadosAqui'
8 | DB_PORT='seusDadosAqui'
9 |
10 | # Configurações do servidor de aplicação
11 | APP_PORT=8080
12 | APP_HOST=localhost
13 |
14 | # importante: caso sua senha contenha caracteres especiais, insira-a entre 'aspas'
15 |
--------------------------------------------------------------------------------
/.env.dev:
--------------------------------------------------------------------------------
1 | AMBIENTE_PROCESSO=desenvolvimento
2 |
3 | # Configurações de conexão com o banco de dados
4 | DB_HOST=localhost
5 | DB_DATABASE='seusDadosAqui'
6 | DB_USER='seusDadosAqui'
7 | DB_PASSWORD='seusDadosAqui'
8 | DB_PORT=3306
9 |
10 | # Configurações do servidor de aplicação
11 | APP_PORT=3333
12 | APP_HOST=localhost
13 |
14 | # importante: caso sua senha contenha caracteres especiais, insira-a entre 'aspas'
15 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # A linha abaixo determina que o diretório node_modules não será enviado ao repositório remoto
2 | node_modules
3 | package-lock.json
4 |
5 | .github
6 |
--------------------------------------------------------------------------------
/DOCUMENTOS_DE_APOIO/PASSO_A_PASSO_ADICIONAR_UPLOAD_DE_IMAGENS_AO_PROJETO.md:
--------------------------------------------------------------------------------
1 | Caso você queira adicionar a funcionalidade de "upload de imagens" no seu projeto, você pode:
2 |
3 | - OPÇÃO 1 - Criar uma coluna no banco de dados com tipo VARCHAR que irá receber a URL da sua imagem, como por exemplo " http: // meusite. com/ minhaimagem .png". Assim o campo que será preenchido pelo usuário será uma input de texto.
4 | - Prós: Simples de implementar, uma vez que os campos de login e cadastro também são assim.
5 | - Contras: Seu usuário precisará ter a URL da imagem desejada.
6 | - OPÇÃO 2 - Possibilitar o upload das imagens a um diretório no seu próprio projeto, seguindo: [exemplo_de_upload_de_arquivo](https://github.com/BandTec/web-data-viz/tree/main/DOCUMENTOS_DE_APOIO/exemplo_de_upload_de_arquivo)
7 | - Prós: Esta implementação simula que há um diretório específico para arquivos multimídia, o que é uma prática de mercado, podendo usar já o conceito de "buckets".
8 | - Contras: Seu repositório pode ficar "pesado", fazendo com que seu git clone fique demorado. Arquivos de imagens e vídeos tendem a ter mais bytes de tamanho, chegando a MBs (megabytes) ou até GBs (gigabytes).
9 | - OPÇÃO 3 - NÃO RECOMENDADO - Criar uma coluna no banco de dados com tipo BLOB (Binary Large Object) que irá receber o arquivo de mídia
10 | - Prós: Você irá pesquisar algo novo.
11 | - Contras: Nem todos os Bancos de Dados suportam este tipo de dado. Trazer a imagem do banco para exibi-la na sua tela pode ser trabalhoso demais e te atrasar em relação a outros entregáveis.
12 |
13 | **Não há a "melhor opção" e nenhuma destas opções "vale mais pontos" ou "seu projeto vai necessariamente ficar melhor porque você escolheu tal opção".**
14 |
--------------------------------------------------------------------------------
/DOCUMENTOS_DE_APOIO/PASSO_A_PASSO_CRIAR_ROTA_NA_API.md:
--------------------------------------------------------------------------------
1 | # CRIAR ROTA NA API
2 |
3 | No contexto de Programação WEB, uma "rota" será o nome que daremos aos nossos Endpoints.
4 | Endpoints são as funções disponíveis em nossa API, que aceitam parâmetros e devolvem dados ao cliente que os requisitou. [1]
5 |
6 | Para criar uma nova rota na API, siga esse caminho:
7 |
8 | ### Para esse exemplo, irei criar um cadastro e consulta de carros.
9 |
10 | ### Importando arquivo que contém as rotas
11 |
12 | Abra o arquivo app.js, que fica na raiz diretório **site** e adicione uma linha que contenha uma variável que vai receber o caminho do arquivo da rota que você irá usar! No meu caso vai ficar da seguinte forma:
13 |
14 | ```jsx
15 | var carrosRouter = require("./src/routes/carros");
16 | ```
17 |
18 | Abaixo é como deve ficar o arquivo app.js, importando o arquivo **carros.js** da pasta **routes**:
19 |
20 | ```jsx
21 | var app = express();
22 |
23 | var indexRouter = require("./src/routes/index");
24 | var usuarioRouter = require("./src/routes/usuarios");
25 | var avisosRouter = require("./src/routes/avisos");
26 | var medidasRouter = require("./src/routes/medidas");
27 | var carrosRouter = require("./src/routes/carros");
28 | ```
29 |
30 | ### Criando uma porta de entrada na api
31 |
32 | Ainda na app.js, com a importação criada, é possível criarmos uma “rota”! Como seria? Irei descer mais um pouco o arquivo e iremos nos deparar com o seguinte código e irei adicionar uma “rota” nova para a minha API:
33 |
34 | ```jsx
35 | app.use(cors());
36 |
37 | app.use("/", indexRouter);
38 | app.use("/usuarios", usuarioRouter);
39 | app.use("/avisos", avisosRouter);
40 | app.use("/medidas", medidasRouter);
41 | app.use("/carros", carrosRouter);
42 | ```
43 |
44 | **Pode perceber que logo depois de /medidas eu adicionei um /carros e chamei a carrosRouter importada anteriormente!**
45 |
46 | ### Criando arquivo de rota
47 |
48 | Logo após ter feito a primeira “porta de entrada” da nossa API, quando um front-end for acessar essa nossa rota, ele deve colocar /carros/**algumaCoisa**, o que seria esse “alguma coisa”? Dentro de api-site -> src -> routes, irei criar um novo arquivo chamado carros.js que é nesse arquivo que eu importo no [passo 1. Importando arquivo que contém as rotas](about:blank#importando-arquivo-que-cont%C3%A9m-as-rotas)
49 |
50 | No arquivo carros.js dentro do diretório routes.
51 |
52 | **Configuração padrão para indicar o uso da biblioteca do node para criação:**
53 |
54 | ```jsx
55 | var express = require("express");
56 | var router = express.Router();
57 | ```
58 |
59 | **Importando a controller que vai ser criada posteriormente:**
60 |
61 | ```jsx
62 | var carroController = require("../controllers/carroController");
63 | ```
64 |
65 | **Criando a rota que vai indicar /carros/cadastrar ao ser acessada pelo front-end. O /cadastrar é do tipo post e o /listar é do tipo get:**
66 |
67 | ```jsx
68 | router.post("/cadastrar", function (req, res) {
69 | // função a ser chamada quando acessar /carros/cadastrar
70 | carroController.cadastrar(req, res);
71 | });
72 |
73 | router.get("/listar", function (req, res) {
74 | // função a ser chamada quando acessar /carros/listar
75 | carroController.listar(req, res);
76 | });
77 | ```
78 |
79 | **Sempre devemos deixar visível (exportar) para outro que assim outro arquivo consiga importar todas as nossas configurações desse arquivo:**
80 |
81 | ```jsx
82 | module.exports = router;
83 | ```
84 |
85 | Ao final de tudo, teremos o arquivo com essa estrutura:
86 |
87 | ```jsx
88 | var express = require("express");
89 | var router = express.Router();
90 |
91 | var carroController = require("../controllers/carroController");
92 |
93 | router.post("/cadastrar", function (req, res) {
94 | // função a ser chamada quando acessar /carros/cadastrar
95 | carroController.cadastrar(req, res);
96 | });
97 |
98 | router.get("/listar", function (req, res) {
99 | // função a ser chamada quando acessar /carros/listar
100 | carroController.listar(req, res);
101 | });
102 |
103 | module.exports = router;
104 | ```
105 |
106 | ### Criando arquivo controller
107 |
108 | Dentro de api-site -> src -> controller, crie um arquivo chamado carroController.js.
109 |
110 | Dentro do arquivo carroController.js coloque a **carroModel** que fará a conexão com o banco:
111 |
112 | ```jsx
113 | var carroModel = require("../models/carroModel");
114 | ```
115 |
116 | Cria a função que vai ser chamada no passo de cima e exporta ela. No final ficará assim:
117 |
118 | ```jsx
119 | var carroModel = require("../models/carroModel");
120 |
121 | function listar(req, res) {
122 | carroModel.listar().then(function(resultado){
123 | // precisamos informar que o resultado voltará para o front-end como uma resposta em json
124 | res.status(200).json(resultado);
125 | }).catch(function(erro){
126 | res.status(500).json(erro.sqlMessage);
127 | })
128 | }
129 |
130 | function cadastrar(req, res) {
131 | var nome = req.body.nome;
132 |
133 | if (nome == undefined) {
134 | res.status(400).send("Seu nome está undefined!");
135 | }
136 |
137 | carroModel.cadastrar(nome).then(function(resposta){
138 | res.status(200).send("Carro criado com sucesso");
139 | }).catch(function(erro){
140 | res.status(500).json(erro.sqlMessage);
141 | })
142 | }
143 |
144 | module.exports = {
145 | listar,
146 | cadastrar
147 | }
148 | ```
149 |
150 | **Sempre exportando a função que eu criar para poder ser “enxergada” por outro arquivo.**
151 |
152 | ### Criando arquivo models
153 |
154 | Dentro de api-site -> src -> models, crie um arquivo chamado carroModel.js
155 |
156 | Dentro do arquivo importamos a configuração do banco para fazer consultas futuras no banco:
157 |
158 | ```jsx
159 | var database = require("../database/config")
160 | ```
161 |
162 | Aqui podemos criar a função que fará a comunicação com o banco de dados, onde ela recebe o paramêtro nome e executa uma query de insert com o valor desse nome:
163 |
164 | ```jsx
165 | function listar() {
166 | var instrucao = `
167 | SELECT * FROM carro;
168 | `;
169 | console.log("Executando a instrução SQL: \n" + instrucao);
170 | return database.executar(instrucao);
171 | }
172 |
173 | function cadastrar(nome) {
174 | var instrucao = `
175 | INSERT INTO carro (nome) VALUES ('${nome}');
176 | `;
177 | console.log("Executando a instrução SQL: \n" + instrucao);
178 | return database.executar(instrucao);
179 | }
180 | ```
181 |
182 | **Sem esquecer de exportar as funções que criamos para serem vistas por outros arquivos**
183 |
184 | ```jsx
185 | module.exports = {
186 | cadastrar,
187 | listar
188 | };
189 | ```
190 |
191 | E por fim teremos o arquivo completo com isso:
192 |
193 | ```jsx
194 | var database = require("../database/config")
195 |
196 | function listar() {
197 | var instrucao = `
198 | SELECT * FROM carro;
199 | `;
200 | console.log("Executando a instrução SQL: \n" + instrucao);
201 | return database.executar(instrucao);
202 | }
203 |
204 | function cadastrar(nome) {
205 | var instrucao = `
206 | INSERT INTO carro (nome) VALUES ('${nome}');
207 | `;
208 | console.log("Executando a instrução SQL: \n" + instrucao);
209 | return database.executar(instrucao);
210 | }
211 |
212 | module.exports = {
213 | cadastrar,
214 | listar
215 | };
216 | ```
217 |
218 | ### Fontes bibliográficas
219 |
220 | [1] https://developer.wordpress.org/rest-api/extending-the-rest-api/routes-and-endpoints/
221 |
--------------------------------------------------------------------------------
/DOCUMENTOS_DE_APOIO/exemplo_criacao_grafico_estatico/EXEMPLO-GRAFICO-ESTATICO.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | Exemplo de como Plotar Gráficos
7 |
8 |
9 |
10 |
11 |
12 |
13 | Gráfico de linhas
14 |
17 |
18 |
19 |
20 |
21 |
--------------------------------------------------------------------------------
/DOCUMENTOS_DE_APOIO/exemplo_de_upload_de_arquivo/src/config/configUpload.js:
--------------------------------------------------------------------------------
1 | const multer = require('multer');
2 |
3 | // Diretório onde os arquivos serão salvos
4 | // ATENÇÃO: É necessário manter o diretório 'public' para poder utilizar no front-end
5 | const diretorio = 'public/assets/';
6 |
7 | const storage = multer.diskStorage({
8 | destination: (req, file, cb) => {
9 | cb(null, diretorio)
10 | },
11 |
12 | filename: (req, file, cb) => {
13 | const extensaoArquivo = file.originalname.split('.')[1];
14 |
15 | const novoNomeArquivo = require('crypto')
16 | .randomBytes(64)
17 | .toString('hex');
18 |
19 |
20 | cb(null, `${novoNomeArquivo}.${extensaoArquivo}`)
21 | }
22 | });
23 |
24 | module.exports = multer({ storage });
--------------------------------------------------------------------------------
/DOCUMENTOS_DE_APOIO/exemplo_de_upload_de_arquivo/src/controllers/usuarioController.js:
--------------------------------------------------------------------------------
1 | const usuarioModel = require('../models/usuarioModel');
2 |
3 |
4 | function salvar(req, res) {
5 | const imagem = req.file.filename;
6 |
7 | const {nome, email} = req.body
8 |
9 | const usuario = { nome, email, imagem }
10 |
11 | usuarioModel.salvar(usuario)
12 | .then(resultado => {
13 | res.status(201).send("Usuario criado com sucesso");
14 | }).catch(err => {
15 | res.status(500).send(err);
16 | });
17 | }
18 |
19 | function buscarUsuarioPeloId(req, res) {
20 | console.log(req.params.id);
21 | usuarioModel.buscarUsuarioPeloId(req.params.id)
22 | .then(resultado => {
23 | res.json(resultado);
24 | }).catch(err => {
25 | res.status(500).send(err);
26 | });
27 | }
28 |
29 | module.exports = { salvar, buscarUsuarioPeloId }
--------------------------------------------------------------------------------
/DOCUMENTOS_DE_APOIO/exemplo_de_upload_de_arquivo/src/database/config.js:
--------------------------------------------------------------------------------
1 | const mysql = require("mysql2");
2 |
3 | // CONEXÃO DO MYSQL WORKBENCH (LOCAL)
4 | const mySqlConfig = {
5 | host: "SEU_SERVIDOR",
6 | database: "SEU_BANCO_DE_DADOS",
7 | user: "SEU_USUARIO",
8 | password: "SUA_SENHA",
9 | }
10 |
11 | function executar(instrucao) {
12 | return new Promise(function (resolve, reject) {
13 | var conexao = mysql.createConnection(mySqlConfig);
14 | conexao.connect();
15 | conexao.query(instrucao, function (erro, resultados) {
16 | conexao.end();
17 | if (erro) {
18 | reject(erro);
19 | }
20 | console.log(resultados);
21 | resolve(resultados);
22 | });
23 | conexao.on('error', function (erro) {
24 | return ("ERRO NO MySQL WORKBENCH (Local): ", erro.sqlMessage);
25 | });
26 | });
27 | }
28 |
29 | module.exports = { executar }
--------------------------------------------------------------------------------
/DOCUMENTOS_DE_APOIO/exemplo_de_upload_de_arquivo/src/database/script-exemplo-criacao.sql:
--------------------------------------------------------------------------------
1 | -- Arquivo de apoio, caso você queira criar tabelas como as aqui criadas para a API funcionar.
2 | -- Você precisa executar os comandos no banco de dados para criar as tabelas,
3 | -- ter este arquivo aqui não significa que a tabela em seu BD estará como abaixo!
4 |
5 | /*
6 | comandos para mysql - banco local
7 | */
8 |
9 | create database exemplo_upload;
10 | use exemplo_upload;
11 |
12 | create table usuario (
13 | id int primary key auto_increment,
14 | nome varchar(45),
15 | email varchar(45),
16 | imagem_perfil varchar(255)
17 | )
--------------------------------------------------------------------------------
/DOCUMENTOS_DE_APOIO/exemplo_de_upload_de_arquivo/src/models/usuarioModel.js:
--------------------------------------------------------------------------------
1 | const database = require("../database/config");
2 |
3 | function salvar(usuario) {
4 | const instrucao = `insert into usuario (nome, email, imagem_perfil) values ('${usuario.nome}', '${usuario.email}', '${usuario.imagem}')`;
5 |
6 | return database.executar(instrucao);
7 | }
8 |
9 | function buscarUsuarioPeloId(id) {
10 | const instrucao = `select * from usuario where id = ${id}`;
11 |
12 | return database.executar(instrucao);
13 | }
14 |
15 | module.exports = { salvar, buscarUsuarioPeloId }
--------------------------------------------------------------------------------
/DOCUMENTOS_DE_APOIO/exemplo_de_upload_de_arquivo/src/routes/usuarioRouter.js:
--------------------------------------------------------------------------------
1 | const express = require('express');
2 | const router = express.Router();
3 | const upload = require('../config/configUpload'); // ARQUIVO COM A CONFIGURAÇÃO DO UPLOAD
4 | const usuarioController = require('../controllers/usuarioController');
5 |
6 | router.get("", (req, res) => {
7 | res.render("index")
8 | });
9 |
10 | // upload.single('foto') vai buscar no json alguma propriedade chamada foto
11 | router.post('/cadastro', upload.single('foto'), (req, res) => {
12 | usuarioController.salvar(req, res);
13 | });
14 |
15 | router.get('/:id', upload.single('foto'), (req, res) => {
16 | usuarioController.buscarUsuarioPeloId(req, res);
17 | });
18 |
19 | module.exports = router;
20 |
21 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2022 BandTec Digital School - agora é São Paulo Tech School
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 |
2 |
3 | _Web Data Visualization = Visualização de Dados na Web_
4 |
5 | _Implementação de Referência para o seu Projeto de Primeiro Semestre_
6 |
7 |
8 |
9 | # Como usar
10 |
11 | 1. Clone este repositório em sua máquina.
12 |
13 |
14 | 1. Crie, no Banco de Dados, as tabelas necessárias para o funcionamento deste projeto.
15 | - Siga as instruções no arquivo **/src/database/script-tabelas.sql**
16 |
17 |
18 | 3. Acesse o arquivo **app.js** e parametrize o ambiente.
19 | - Se você estiver utilizando o Ambiente de Produção (remoto), comente a linha 2 e deixe habilitada a linha 1 onde está o valor **var ambiente_processo = 'producao';**
20 | - Se você estiver utilizando o Ambiente de Desenvolvimento (local), comente a linha 1 e deixe habilitada a linha 2 onde está o valor **var ambiente_processo = 'desenvolvimento';**
21 |
22 | 4. Adicione as credenciais de Banco de Dados no arquivo **.env** ou em **.env.dev**, seguindo as instruções neste.
23 |
24 | 5. Acesse este repositório no seu terminal (GitBash ou VSCode) e execute os comandos abaixo:
25 |
26 | ```
27 | npm i
28 | ```
29 | _O comando acima irá instalar as bibliotecas necessárias para o funcionamento do projeto. As bibliotecas a serem instaladas estão listadas no arquivo **package.json** então é muito importante que este não seja alterado. Será criada uma nova pasta/diretório chamado **node_modules** quando o comando for finalizado, que é onde as bibliotecas estão localizadas. Não altere a pasta/diretório._
30 |
31 | ```
32 | npm start
33 | ```
34 |
35 | _O comando acima irá iniciar seu projeto e efetuar os comandos de acordo com a sua parametrização feita nos passos anteriores._
36 |
37 | 6. Para "ver" seu projeto funcionando, acesse em seu navegador o caminho **informado no terminal**.
38 |
39 | 7. Caso queira parar a execução, tecle **CTRL+C** no terminal em que o projeto está rodando.
40 |
41 | ## Adicionar novo recurso ao projeto
42 |
43 | **"Recurso? O que é?"** Enquanto no Banco de Dados chamamos as tabelas de "entidades", quando tratamos de desenvolvimento WEB usamos a palavra "recurso" para se referir a algo que podemos criar, ler, atualizar ou deletar [1]. Estas ações são conhecidas como CRUD: Create, Read, Update e Delete. Para acessar cada ação, usamos os métodos HTTP: POST, GET, PUT e DELETE [2]. (Há outros verbos, porém com estes já conseguimos efetuar CRUDs).
44 |
45 | **Tabela para ajudar a fazer a associação**
46 |
47 |
48 |
49 |
C.R.U.D
50 |
Ação
51 |
Tradução
52 |
Verbo HTTP *
53 |
Comando BD
54 |
55 |
56 |
C
57 |
Create
58 |
Criar
59 |
POST
60 |
INSERT
61 |
62 |
63 |
R
64 |
Read
65 |
Ler
66 |
GET
67 |
SELECT
68 |
69 |
70 |
U
71 |
Update
72 |
Atualizar
73 |
PUT
74 |
UPDATE
75 |
76 |
77 |
D
78 |
Delete
79 |
Deletar
80 |
DELETE
81 |
DELETE
82 |
83 |
84 |
85 | _* Você verá o verbo HTTP sendo apontado nos arquivos em /routes_
86 |
87 | **"E no meu projeto, o que seria um recurso?"** Em web-data-viz manipulamos os recursos **usuário**, **aviso** e **medida**. Podemos conferir isso vendo para quais entidades foram criados os caminhos de inserção e captura de dados, que envolve os diretórios **routes**, **controllers** e **models**.
88 |
89 | Abaixo, uma figura que ajuda a compreender o caminho percorrido para, por exemplo, efetuar o cadastro de um usuário:
90 |
91 |
92 | 
93 |
94 |
95 | **Entendi o que é um recurso e gostaria de adicionar um novo ao meu projeto! Como faz?**
96 | - Primeiro, crie a tabela no Banco de Dados referente a este recurso. Exemplos de recursos comuns de serem adicionados ao projeto no primeiro semestre: Silo, Aquário, Sala, Andar, Endereço, Mercado, Prateleira, Unidade, Carro, Caminhão...
97 | - Assim que criada a tabela, faça todo o caminho de **front-end → routes → controllers → models** replicando o que já existe!
98 | - Exemplo, se você quiser a funcionalidade de adicionar um novo Aquário, deve criar arquivos referentes ao aquario nos diretórios e replicar também as funções.
99 | - Dica: A implementação de AVISO já contém o CRUD completo! :wink:
100 |
101 | ### Fontes bibliográficas
102 |
103 | [1] https://datatracker.ietf.org/doc/html/rfc2396
104 | [2] https://datatracker.ietf.org/doc/html/rfc7231
105 |
--------------------------------------------------------------------------------
/app.js:
--------------------------------------------------------------------------------
1 | // var ambiente_processo = 'producao';
2 | var ambiente_processo = 'desenvolvimento';
3 |
4 | var caminho_env = ambiente_processo === 'producao' ? '.env' : '.env.dev';
5 | // Acima, temos o uso do operador ternário para definir o caminho do arquivo .env
6 | // A sintaxe do operador ternário é: condição ? valor_se_verdadeiro : valor_se_falso
7 |
8 | require("dotenv").config({ path: caminho_env });
9 |
10 | var express = require("express");
11 | var cors = require("cors");
12 | var path = require("path");
13 | var PORTA_APP = process.env.APP_PORT;
14 | var HOST_APP = process.env.APP_HOST;
15 |
16 | var app = express();
17 |
18 | var indexRouter = require("./src/routes/index");
19 | var usuarioRouter = require("./src/routes/usuarios");
20 | var avisosRouter = require("./src/routes/avisos");
21 | var medidasRouter = require("./src/routes/medidas");
22 | var aquariosRouter = require("./src/routes/aquarios");
23 | var empresasRouter = require("./src/routes/empresas");
24 |
25 | app.use(express.json());
26 | app.use(express.urlencoded({ extended: false }));
27 | app.use(express.static(path.join(__dirname, "public")));
28 |
29 | app.use(cors());
30 |
31 | app.use("/", indexRouter);
32 | app.use("/usuarios", usuarioRouter);
33 | app.use("/avisos", avisosRouter);
34 | app.use("/medidas", medidasRouter);
35 | app.use("/aquarios", aquariosRouter);
36 | app.use("/empresas", empresasRouter);
37 |
38 | app.listen(PORTA_APP, function () {
39 | console.log(`
40 | ## ## ###### ##### #### ## ###### ## ## ## #### ######
41 | ## ## ## ## ## ## ## #### ## #### ## ## ## ##
42 | ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ##
43 | ## # ## #### ##### ###### ## ## ###### ## ###### ###### ## ## ## ##
44 | ####### ## ## ## ## ## ## ## ## ## ## ## ## ## ##
45 | ### ### ## ## ## ## ## ## ## ## ## ## #### ## ##
46 | ## ## ###### ##### #### ## ## ## ## ## ## #### ######
47 | \n\n\n
48 | Servidor do seu site já está rodando! Acesse o caminho a seguir para visualizar .: http://${HOST_APP}:${PORTA_APP} :. \n\n
49 | Você está rodando sua aplicação em ambiente de .:${process.env.AMBIENTE_PROCESSO}:. \n\n
50 | \tSe .:desenvolvimento:. você está se conectando ao banco local. \n
51 | \tSe .:producao:. você está se conectando ao banco remoto. \n\n
52 | \t\tPara alterar o ambiente, comente ou descomente as linhas 1 ou 2 no arquivo 'app.js'\n\n`);
53 | });
54 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "web-data-viz",
3 | "version": "1.0.0",
4 | "description": "",
5 | "main": "app.js",
6 | "scripts": {
7 | "start": "node app.js",
8 | "dev": "nodemon --exec node app.js"
9 | },
10 | "author": "Feito pelos desenvolvedores @ São Paulo Tech School / Bandtec Digital School",
11 | "license": "MIT",
12 | "dependencies": {
13 | "cors": "^2.8.5",
14 | "dotenv": "^16.4.5",
15 | "express": "^4.17.1",
16 | "mysql2": "^3.9.4",
17 | "nodemon": "^2.0.7",
18 | "path": "^0.12.7"
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/public/assets/aguarde-orange.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/BandTec/web-data-viz/8ccedf197a7d65bd8ccb685573f506f1d02f163c/public/assets/aguarde-orange.gif
--------------------------------------------------------------------------------
/public/assets/aguarde-pink.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/BandTec/web-data-viz/8ccedf197a7d65bd8ccb685573f506f1d02f163c/public/assets/aguarde-pink.gif
--------------------------------------------------------------------------------
/public/assets/aguarde-pink2.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/BandTec/web-data-viz/8ccedf197a7d65bd8ccb685573f506f1d02f163c/public/assets/aguarde-pink2.gif
--------------------------------------------------------------------------------
/public/assets/aguarde-pink3.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/BandTec/web-data-viz/8ccedf197a7d65bd8ccb685573f506f1d02f163c/public/assets/aguarde-pink3.gif
--------------------------------------------------------------------------------
/public/assets/circle-loading.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/BandTec/web-data-viz/8ccedf197a7d65bd8ccb685573f506f1d02f163c/public/assets/circle-loading.gif
--------------------------------------------------------------------------------
/public/assets/icon/favicon2.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/BandTec/web-data-viz/8ccedf197a7d65bd8ccb685573f506f1d02f163c/public/assets/icon/favicon2.ico
--------------------------------------------------------------------------------
/public/assets/icon/favicon2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/BandTec/web-data-viz/8ccedf197a7d65bd8ccb685573f506f1d02f163c/public/assets/icon/favicon2.png
--------------------------------------------------------------------------------
/public/assets/imgs/av1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/BandTec/web-data-viz/8ccedf197a7d65bd8ccb685573f506f1d02f163c/public/assets/imgs/av1.png
--------------------------------------------------------------------------------
/public/assets/imgs/av2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/BandTec/web-data-viz/8ccedf197a7d65bd8ccb685573f506f1d02f163c/public/assets/imgs/av2.png
--------------------------------------------------------------------------------
/public/assets/imgs/av3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/BandTec/web-data-viz/8ccedf197a7d65bd8ccb685573f506f1d02f163c/public/assets/imgs/av3.png
--------------------------------------------------------------------------------
/public/assets/imgs/av4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/BandTec/web-data-viz/8ccedf197a7d65bd8ccb685573f506f1d02f163c/public/assets/imgs/av4.png
--------------------------------------------------------------------------------
/public/assets/imgs/av5.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/BandTec/web-data-viz/8ccedf197a7d65bd8ccb685573f506f1d02f163c/public/assets/imgs/av5.png
--------------------------------------------------------------------------------
/public/assets/imgs/banner-fundo.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/BandTec/web-data-viz/8ccedf197a7d65bd8ccb685573f506f1d02f163c/public/assets/imgs/banner-fundo.jpeg
--------------------------------------------------------------------------------
/public/assets/imgs/bg-jelly-fish-para-home.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/BandTec/web-data-viz/8ccedf197a7d65bd8ccb685573f506f1d02f163c/public/assets/imgs/bg-jelly-fish-para-home.png
--------------------------------------------------------------------------------
/public/assets/imgs/bg-jelly-fish-para_outras_pags.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/BandTec/web-data-viz/8ccedf197a7d65bd8ccb685573f506f1d02f163c/public/assets/imgs/bg-jelly-fish-para_outras_pags.png
--------------------------------------------------------------------------------
/public/assets/imgs/growth.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/BandTec/web-data-viz/8ccedf197a7d65bd8ccb685573f506f1d02f163c/public/assets/imgs/growth.png
--------------------------------------------------------------------------------
/public/assets/imgs/growth_color.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/BandTec/web-data-viz/8ccedf197a7d65bd8ccb685573f506f1d02f163c/public/assets/imgs/growth_color.png
--------------------------------------------------------------------------------
/public/assets/imgs/imagem-apoio.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/BandTec/web-data-viz/8ccedf197a7d65bd8ccb685573f506f1d02f163c/public/assets/imgs/imagem-apoio.png
--------------------------------------------------------------------------------
/public/assets/imgs/lightbulb.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/BandTec/web-data-viz/8ccedf197a7d65bd8ccb685573f506f1d02f163c/public/assets/imgs/lightbulb.png
--------------------------------------------------------------------------------
/public/assets/imgs/lightbulb_color.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/BandTec/web-data-viz/8ccedf197a7d65bd8ccb685573f506f1d02f163c/public/assets/imgs/lightbulb_color.png
--------------------------------------------------------------------------------
/public/assets/imgs/missao.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/BandTec/web-data-viz/8ccedf197a7d65bd8ccb685573f506f1d02f163c/public/assets/imgs/missao.png
--------------------------------------------------------------------------------
/public/assets/imgs/pessoa1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/BandTec/web-data-viz/8ccedf197a7d65bd8ccb685573f506f1d02f163c/public/assets/imgs/pessoa1.png
--------------------------------------------------------------------------------
/public/assets/imgs/pessoa2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/BandTec/web-data-viz/8ccedf197a7d65bd8ccb685573f506f1d02f163c/public/assets/imgs/pessoa2.png
--------------------------------------------------------------------------------
/public/assets/imgs/pessoa3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/BandTec/web-data-viz/8ccedf197a7d65bd8ccb685573f506f1d02f163c/public/assets/imgs/pessoa3.png
--------------------------------------------------------------------------------
/public/assets/imgs/planet-earth.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/BandTec/web-data-viz/8ccedf197a7d65bd8ccb685573f506f1d02f163c/public/assets/imgs/planet-earth.png
--------------------------------------------------------------------------------
/public/assets/imgs/planet-earth_color.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/BandTec/web-data-viz/8ccedf197a7d65bd8ccb685573f506f1d02f163c/public/assets/imgs/planet-earth_color.png
--------------------------------------------------------------------------------
/public/assets/imgs/side-img-contato.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/BandTec/web-data-viz/8ccedf197a7d65bd8ccb685573f506f1d02f163c/public/assets/imgs/side-img-contato.png
--------------------------------------------------------------------------------
/public/assets/imgs/valores.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/BandTec/web-data-viz/8ccedf197a7d65bd8ccb685573f506f1d02f163c/public/assets/imgs/valores.png
--------------------------------------------------------------------------------
/public/assets/imgs/visao.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/BandTec/web-data-viz/8ccedf197a7d65bd8ccb685573f506f1d02f163c/public/assets/imgs/visao.png
--------------------------------------------------------------------------------
/public/cadastro.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 | AquaTech | Cadastro
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
Lorem ipsum, dolor sit amet consectetur adipisicing elit. Et, quas cupiditate asperiores provident magnam
53 | vitae illum iusto fugiat atque deleniti nulla sed iure suscipit, laborum, aliquid accusantium cum dicta
54 | minima.
55 |
56 |
57 |
58 |
Visão
59 |
Lorem ipsum, dolor sit amet consectetur adipisicing elit. Et, quas cupiditate asperiores provident magnam
60 | vitae illum iusto fugiat atque deleniti nulla sed iure suscipit, laborum, aliquid accusantium cum dicta
61 | minima.
62 |
63 |
64 |
65 |
Valores
66 |
Lorem ipsum, dolor sit amet consectetur adipisicing elit. Et, quas cupiditate asperiores provident magnam
67 | vitae illum iusto fugiat atque deleniti nulla sed iure suscipit, laborum, aliquid accusantium cum dicta
68 | minima.