TaskNotes é uma aplicação desenvolvida para fins de estudos, visando facilitar o dia a dia ao estabelecer notas autoadesivas virtuais.
A aplicação conta com diversas tecnologias em seu backend, podendo expandir conforme as necessidades.
Tecnologias utilizadas:
- Node.js 12.14.1
- MongoDB 4.2.0
- PostgreSQL 12
Para que a aplicação executa como o esperado é necessário obter uma conexão com os banco de dados MongoDB e um banco de dados PostgreSQL.
Para a instalação do Node.js, é possível ver o passo a passo no site oficial: https://nodejs.org/
Para a instalção de todas as dependências do projeto execute yarn install
ou npm install
na pasta do projeto, assim todos os comandos e dependências estarão disponíveis.
A conexão com esse banco de dados pode acontecer tanto remoto quanto local. Dentro do diretório raiz, é possível ver um arquivo .env.examplo que inclui algumas variveis de ambiente para a configração de sua conexão.
Para realizar a conexão corretamente, em src > Database > config, é possível encontrar um arquivo sequelize.js (um exemplo dele), para realizar a alocação das variáveis de ambiente para a sua conexão.
Após estabelecer esses passos e com o banco de dados já criado, é necessário executar o comando:
npx sequelize-cli db:migrate
Para realizar a criação da tabela no banco de dados.
Em src > Database > Connections > Postgresql.js, é possível definir a conexão como local ou externa em:
LocaL:
const connection = new Sequelize(dbConfig.local);
Externa:
const connection = new Sequelize(dbConfig.external);
Um serviço de hospedagem de banco de dados PostgreSQL gratuito recomendado pode ser encontrado nesse link: https://www.elephantsql.com/
Para a conexão com o MongoDB, também é possível realizar a conexão externa ou local.
Dentro do arquivo .env, é possível atribuir um endereço da conexão externa na variável URLMONGO
. Caso a conexão falhe ou não haja uma conexão externa, é necessário existir um banco de dados MongoDB rodando localmente, para que automaticamente seja feita a conexão local e a criação do banco e collections.
Para que a aplicação esteja disponível para testes, é possível rodar o comando yarn dev
ou npm dev
, esse comando irá executar o projeto com o nodemon escutando os arquivos do projeto para reiniciar o servidor a cada alteração.
A aplicação constituí de 3 rotas principais:
- Test
- Users
- Tasks
Essa rota tem como objetivo realizar testes como:
- Verificação se o servidor está funcionando
- Verificação da versão da aplicação
- Verificação do funcionamento dos bancos de dados
Rota:
GET: /
Request:
Não é necessário parâmetros e corpo
Response:
{
"API": "TaskList",
"Version": "1.0",
"MongoDB": 1,
"PostgreSQL": 1
}
Rota responsável por cadastro e autenticação do usuário como.
Rota:
POST: /users/register
Request:
{
"name": "André Glatz",
"user": "andreglatz",
"password": "5034"
}
Response:
{
"success": true,
"token": "eyJhbGciOlJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MSwiaWF0IjoxNTgzOTU1ODU5LCJleHAiOjE1ODM5NTU4NjB9.IhjQoxZh44baMjo-oU2Jdu66Nu-7OswCH3X9_FHjAjY"
}
Rota:
POST: /users/login
Request:
{
"user": "andreglatz",
"password": "5034"
}
Response:
{
"success": true,
"token": "eyJhbGciOlJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MSwiaWF0IjoxNTgzOTU1ODU5LCJleHAiOjE1ODM5NTU4NjB9.IhjQoxZh44baMjo-oU2Jdu66Nu-7OswCH3X9_FHjAjY"
}
Todas as rotas desse grupo necessitam de um Token Bearer no Header para validação. Rota responsável por gerenciamento das TasksNotes como:
- Cadastro
- Leitura
- Atualização
- Exclusão
Rota:
POST: /tasks
Request:
{
"description": "Estudar para a prova"
}
Response:
{
"success": true,
"created": {
"_id": "5e6ab7a6a9a4ec1ec05fa280",
"description": "Fazer compras",
"user": 1,
"createdAt": "2020-03-12T22:28:54.156Z",
"updatedAt": "2020-03-12T22:28:54.156Z",
"__v": 0
}
}
Rota:
GET: /tasks
Request:
Não é necessário parâmetros e corpo
Response:
{
"Tasks": [
{
"_id": "5e694461c5ecec0c08c9c339",
"description": "Fazer compras",
"createdAt": "2020-03-11T20:04:49.483Z",
"updatedAt": "2020-03-11T20:04:49.483Z",
"__v": 0
}
]
}
PUT: /tasks/:taskId
Request:
{
"description": "Estudar Node.js"
}
Response:
{
"success": true,
"updated": {
"_id": "5e69440ca68e4839d457dadc",
"description": "Estudar Node.js",
"createdAt": "2020-03-11T20:03:24.916Z",
"updatedAt": "2020-03-11T22:52:27.229Z",
"__v": 0
}
}
DELETE: /tasks/:taskId
Request:
Não é necessário um corpo, somente o parâmetro da URL
Response:
{
"success": true,
"updated": {
"_id": "5e69440ca68e4839d457dadc",
"description": "Estudar Node.js",
"createdAt": "2020-03-11T20:03:24.916Z",
"updatedAt": "2020-03-11T22:52:27.229Z",
"__v": 0
}
}