- Introdução
- Instruções para rodar localmente
- Arquitetura
- Rotas
- Banco de Dados
- Validação
- Testes
- Tecnologias
- Deploy
- Implementações Futuras
A aplicação Appoiment Calendar foi desenvolvida com o objetivo de proporcionar a pessoa usuária de forma visual o controle de prazos e agendamento de tarefas, prazos e compromissos.
1 - Abra o terminal
2 - clone o repositório do Backend [email protected]:Gonzagadavid/appointment-calendar-backend.git
3- entre no diretório do repositorio clonado cd appointment-calendar-backend
4- execute o comando para instalar as dependências npm install
5- preencha o arquivo .env-eg
com os dados do seu banco de dados MongoDB local e mude o nome do arquivo para .env
caso não tenha o MongoDB instalado siga o seguinte tutorial
6- execute o comando para iniciar o servidor npm start
7- abra um nova janela do terminal
8- clone o repositório do Frontend git clone [email protected]:Gonzagadavid/appointment-calendar-frontend.git
9- entre no diretório do repositorio clonado cd appointment-calendar-frontend
10- execute o comando para instalar as dependências npm install
11- verifique no arquivo src/services/backend/endpoints.ts
está com a constante BASE_URL condizente com a porta do backend, caso tenha alterado no backend, deverá ser atulizado nessa constante também
12- execute o comando para iniciar a aplicação npm start
13- a aplicação iniciará em http://localhost:3000
Sequindo o formato da arquitetura em camadas MSC (Model Service Controllers), inicialmente o código foi desenvolvido de forma funcional, porém foi refatorado para POO(programação orientada a objetos) ,a estruturação do código foi feita de forma tornar o código légivel e de fácil entendimento, visando o reaproveitamento e não gerar problemas para a implementação de futuras melhorias, novas funcionalidades e escalabilidade.
A rota POST /users
foi desenvolvida para o registro de novas pessoas usuárias da aplicação.
entrada:
{
"body": {
"name": "User",
"lastname": "Test",
"email": "[email protected]",
"password": "123456"
}
}
saída (status: 201):
{
"message": "user created successfully"
}
A rota POST /users/login
foi desenvolvida para que a pessoa usuária registrada no banco de dados possa logar na aplicação.
entrada:
{
"body": {
"email": "[email protected]",
"password": "123456"
}
}
saída (status: 202):
{
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyIjp7InVzZXJJZCI6IjYyNTMzM2UzNGI2YzY5MTFlNDJiNzU5MCIsImVtYWlsIjoidXNlckBzZXJ2ZXIuY29tIn0sImlhdCI6MTY0OTYyMDI5M30.OfG82bGfsF_TJqLJ3Cp1SIAZMgaTGxxY_WChRBX-85E",
"userName": "User Test"
}
A rota POST /email
foi desenvolvida para enviar um código de validação para o email da pessoa usuária, durante o cadastro.
entrada:
{
"body": {
"email": "[email protected]",
"password": "123456"
}
}
saída (status: 202):
{
{
"code": "BUQN-8"
}
}
A rota POST /email/password
foi desenvolvida para enviar a senha da pessoa usuária para seu email, caso tenha esquecido.
entrada:
{
"body": {
"email": "[email protected]",
"password": "123456"
}
}
saída (status: 202):
{
{
"message": "password sent to email [email protected]"
}
}
A rota POST /tasks
foi desenvolvida para a inseção de uma nova tarefa no banco de dados.
entrada:
{
"body": {
"title": "Tarefa 1",
"description":"Descrição da tarefa 1",
"status": "Programmed",
"date": "2022-04-10T16:46:08.471+00:00"
},
"headers": {
"authorization": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyIjp7InVzZXJJZCI6IjYyNTMzM2UzNGI2YzY5MTFlNDJiNzU5MCIsImVtYWlsIjoidXNlckBzZXJ2ZXIuY29tIn0sImlhdCI6MTY0OTYyMDI5M30.OfG82bGfsF_TJqLJ3Cp1SIAZMgaTGxxY_WChRBX-85E"
}
}
saída (status: 201):
{
"_id": "6253391c4b6c6911e42b7593",
"userId": "625333e34b6c6911e42b7590",
"email": "[email protected]",
"title": "Tarefa 1",
"description": "Descrição da tarefa 1",
"status": "Programmed",
"date": "2022-04-10T16:46:08.471+00:00",
"updated": "2022-04-10T20:07:56.489Z"
}
A rota GET /tasks
foi desenvolvida para buscar todas as tarefas da pessoa usuária no banco de dados.
entrada:
{
"headers": {
"authorization": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyIjp7InVzZXJJZCI6IjYyNTMzM2UzNGI2YzY5MTFlNDJiNzU5MCIsImVtYWlsIjoidXNlckBzZXJ2ZXIuY29tIn0sImlhdCI6MTY0OTYyMDI5M30.OfG82bGfsF_TJqLJ3Cp1SIAZMgaTGxxY_WChRBX-85E"
}
}
saída (status: 200):
{
"tasks": [
{
"title": "Tarefa 1",
"status": "Programmed",
"date": "2022-04-10T16:46:08.471+00:00",
"id": "6253391c4b6c6911e42b7593"
},
{
"title": "Tarefa 2",
"status": "Programmed",
"date": "2022-04-10T16:46:08.471+00:00",
"id": "625339394b6c6911e42b7594"
}
]
}
A rota GET /tasks/:id
foi desenvolvida para buscar e retornar os dados completos de uma tarefa pelo seu id.
entrada:
{
"headers": {
"authorization": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyIjp7InVzZXJJZCI6IjYyNTMzM2UzNGI2YzY5MTFlNDJiNzU5MCIsImVtYWlsIjoidXNlckBzZXJ2ZXIuY29tIn0sImlhdCI6MTY0OTYyMDI5M30.OfG82bGfsF_TJqLJ3Cp1SIAZMgaTGxxY_WChRBX-85E"
}
}
saída (status: 200):
{
"_id": "6253391c4b6c6911e42b7593",
"userId": "625333e34b6c6911e42b7590",
"email": "[email protected]",
"title": "Tarefa 1",
"description": "Descrição da tarefa 1",
"status": "Programmed",
"date": "2022-04-10T16:46:08.471+00:00",
"updated": "2022-04-10T20:07:56.489Z"
}
A rota PUT /tasks/:id
foi desenvolvida para atualizar e retornar os dados completos de uma tarefa pelo seu id.
entrada:
{
"body": {
"title": "Tarefa 1",
"description":"Descrição da tarefa 1",
"status": "Programmed",
"date": "2022-04-10T16:46:08.471+00:00"
},
"headers": {
"authorization": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyIjp7InVzZXJJZCI6IjYyNTMzM2UzNGI2YzY5MTFlNDJiNzU5MCIsImVtYWlsIjoidXNlckBzZXJ2ZXIuY29tIn0sImlhdCI6MTY0OTYyMDI5M30.OfG82bGfsF_TJqLJ3Cp1SIAZMgaTGxxY_WChRBX-85E"
}
}
saída (status: 202):
{
"message": "task modified successfully"
}
A rota DELETE /task/:id
foi desenvolvida para remover uma tarefa do banco de dados pelo seu id.
entrada:
{
"headers": {
"authorization": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyIjp7InVzZXJJZCI6IjYyNTMzM2UzNGI2YzY5MTFlNDJiNzU5MCIsImVtYWlsIjoidXNlckBzZXJ2ZXIuY29tIn0sImlhdCI6MTY0OTYyMDI5M30.OfG82bGfsF_TJqLJ3Cp1SIAZMgaTGxxY_WChRBX-85E"
}
}
saída (status: 202):
{
"message": "task removed successfully"
}
O banco de dados usado para aplicação foi o MongoDB, sendo ele um banco não relacional, tornou-se uma excelente opção para uma aplicação, pois a relação entre os dados da aplicação são simples.
Para a validação de entrada foi desenvolvido middlewares, dessa forma evitando o desperdício de recursos com requisições inválidas. Para gerar e validar o token foi utilizado o jsonwebtoken, podendo utilizar informações da pessoa usuária contidas no payload para registro de suas ações evitando uso de recursos para obter essas informações.
Desenvolvido testes unitários para as camadas models, services e controllers.
Para rodar os testes localmente basta rodar o comando npm test
ou npm test <nome do arquivo>
.
- Express
- Typescript
- Ts node
- Nodemon
- MongoDB
- Json Web Token
- Dotenv
- Jest
- ESlint
Deploy feito no heroku Heroku
- Documentação Swagger
- 100% de cobertura de teste
- Rota de pessoa administradora para direcionar tarefas.