Este é o servidor back-end para o web app Voluntime, acesse o repositório do front-end para mais informações e para conhecer o projeto.
Essa é uma API REST, construída utilizando Node.js + Express + Knex.js (SQL). A principal função dessa API é retornar e enviar dados do usuário, aplicações e dados das ONGs.
- Primeiramente clone o repositório
$ git clone https://github.com/lzfelipe/VoluntimeAPI
$ cd VoluntimeAPI
- Instale as depêndencias
$ yarn
ou
$ npm install
- Configure o banco de dados
Para rodar essa API você vai precisar de um banco de dados em MySQL por padrão do projeto, mas o Knex constrói queries em Postgres, MSSQL, MariaDB, SQLite3, Oracle, ou Amazon Redshift. Porém, vale lembrar que algumas queries foram escritas manualmente e você pode ter que alterar algumas coisas caso opte por outro banco de dados.
Para configurar sua conexão basta criar um arquivo chamado knex_file.js na raiz do projeto exatamente como exemplificado aqui.
- Configure uma secret key e o servidor de email
Crie um arquivo de configuração chamado config.js na pasta:
src/config
O arquivo deve seguir o padrão do arquivo de exemplo também.
PS: Se preferir, instale a depêndencia dotenv e use as váriaveis de ambiente para inserir essas informações e faça as mudanças de acordo.
A URL base é apenas: http://localhost:3333/
- Criar um usuário
ENDPOINT | Metódo | Params | URL Params | Sucesso | Erro |
---|---|---|---|---|---|
/user | POST |
- | - | Code: 200 - OK Content: { "Usuário criado." } |
Code: 500 - INTERNAL SERVER ERROR Content: { error: <Mensagem com a descrição do erro> } |
- Selecionar usuário por ID
ENDPOINT | Metódo | Params | URL Params | Sucesso | Erro |
---|---|---|---|---|---|
/users | POST |
- | id | Code: 200 - OK Content: { Usuário } |
Code: 500 - INTERNAL SERVER ERROR Content: { error: <Mensagem com a descrição do erro> } |
- Deletar usuário
ENDPOINT | Metódo | Params | URL Params | Sucesso | Erro |
---|---|---|---|---|---|
/user | DELETE |
- | id | Code: 200 - OK Content: { "Usuário deletado." } |
Code: 500 - INTERNAL SERVER ERROR Content: { error: <Mensagem com a descrição do erro> } |
- Login
ENDPOINT | Metódo | Params | URL Params | Sucesso | Erro |
---|---|---|---|---|---|
/login | POST |
email e senha | - | Code: 200 - OK Content: { token , success: true } |
Code: 400 - BAD REQUEST Content: { error: "Credenciais inválidas", success: false } |
- Enviar uma aplicação (para voluntariar-se/ong) Para essa requisição você vai precisar enviar dois arquivos de imagem, jutamente com algumas informações que vem pré-definidas no front-end. Se você não conhece uma ferramenta pra fazer esse tipo de requisição, enviando arquivos, nesse exemplo uso Insomnia.
- Deletar aplicação
ENDPOINT | Metódo | Params | URL Params | Sucesso | Erro |
---|---|---|---|---|---|
/application | DELETE |
- | id | Code: 200 - OK Content: { "Trabalho cancelado." } |
Code: 500 - INTERNAL SERVER ERROR Content: { error: <Mensagem com a descrição do erro> } |
- Marcar trabalho como concluído
ENDPOINT | Metódo | Params | URL Params | Sucesso | Erro |
---|---|---|---|---|---|
/application | PUT |
- | id | Code: 200 - OK Content: { "O serviço foi concluído." } |
Code: 500 - INTERNAL SERVER ERROR Content: { error: <Mensagem com a descrição do erro> } |
- Selecionar aplicação por ID (da aplicação)
ENDPOINT | Metódo | Params | URL Params | Sucesso | Erro |
---|---|---|---|---|---|
/application | GET |
- | id | Code: 200 - OK Content: { Aplicação } |
Code: 500 - INTERNAL SERVER ERROR Content: { error: <Mensagem com a descrição do erro> } |
- Selecionar aplicações por ID (da ONG)
ENDPOINT | Metódo | Params | URL Params | Sucesso | Erro |
---|---|---|---|---|---|
/application | GET |
- | ong_id | Code: 200 - OK Content: { [Aplicações] } |
Code: 500 - INTERNAL SERVER ERROR Content: { error: <Mensagem com a descrição do erro> } |
- Selecionar aplicações por ID (do usuário)
ENDPOINT | Metódo | Params | URL Params | Sucesso | Erro |
---|---|---|---|---|---|
/application | GET |
- | user_id | Code: 200 - OK Content: { [Aplicações] } |
Code: 500 - INTERNAL SERVER ERROR Content: { error: <Mensagem com a descrição do erro> } |
- Selecionar ONG por ID
ENDPOINT | Metódo | Params | URL Params | Sucesso | Erro |
---|---|---|---|---|---|
/ong | GET |
- | id | Code: 200 - OK Content: { ONG } |
Code: 500 - INTERNAL SERVER ERROR Content: { error: <Mensagem com a descrição do erro> } |
- Login como ONG
ENDPOINT | Metódo | Params | URL Params | Sucesso | Erro |
---|---|---|---|---|---|
/ong | POST |
email e senha | - | Code: 200 - OK Content: { id , success: true } |
Code: 400 - BAD REQUEST Content: { error: "Credenciais inválidas", success: false } |
id int(10) unsigned NOT NULL,
full_name varchar(255) NOT NULL,
birth_date varchar(255) NOT NULL,
cep varchar(255) NOT NULL,
email varchar(255) NOT NULL,
password varchar(255) NOT NULL,
background_field varchar(255) DEFAULT NULL,
created_at timestamp NULL DEFAULT CURRENT_TIMESTAMP,
badges varchar(255) DEFAULT 'https://i.imgur.com/ylBnJ4k.png'
user_id int(10) unsigned DEFAULT NULL,
cpf varchar(255) NOT NULL,
rg_front varchar(255) NOT NULL,
confirmed_by_ong tinyint(1) DEFAULT '0',
is_done tinyint(1) DEFAULT '0',
rg_verse varchar(255) NOT NULL,
choosen_date varchar(255) NOT NULL,
badge_url varchar(255) NOT NULL,
id int(10) unsigned NOT NULL,
ong_id varchar(255) DEFAULT NULL,
ong_name varchar(255) DEFAULT NULL
ADD KEY `applications_user_id_foreign` (`user_id`);
CONSTRAINT `applications_user_id_foreign` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE;
As ongs usadas no projeto foram feitas apenas para servir de exemplo na interface e estão "hard-coded" aqui, mas seguem esse padrão:
{
id: 1,
causa: "Animais|Moradores de Rua|Idosos|Meio Ambiente|Alimento",
periodo: "manha|tarde|noite",
mainPhoto: "URL",
profilePhotos: ["URL", "URL", "URL"],
nome: "Nome da Ong",
description: "Descrição",
address: "Endereço",
lat: 00.000000,
lng: 00.000000,
}
- NodeJS - Construção do servidor;
- bcrypt - Encriptação de senhas;
- cookie-parser - Gerenciamento de cookies;
- cors - Lidar com erros de Cross-origin resource sharing;
- express - Construção das rotas;
- jsonwebtoken - Gerador de tokens JWT para validação de dados;
- knex - Query builder em SQL
- multer - Lidar com upload de imagens;
- mysql2 - Lidar com conexão e queries em mysql;
- nodemailer - Envio de emails automáticos.