Giter VIP home page Giter VIP logo

gonzagadavid / appointment-calendar-backend Goto Github PK

View Code? Open in Web Editor NEW
1.0 1.0 0.0 579 KB

Backend desenvolvido com typescript, ts-node, express e jsonwebtoken para applicação Appointment Calendar, desenvolvida com o objetivo de proporcionar a pessoa usuária de forma visual o controle de prazos e agendamento de tarefas, prazos e compromissos.

Home Page: https://appointment-calendar-frontend.vercel.app/

License: MIT License

TypeScript 99.62% JavaScript 0.38%
express jsonwebtoken nodemailer ts-node-dev typescript eslint mongodb poo coverage jest ts-jest

appointment-calendar-backend's Introduction

App'oiment Calendar - Backend




Sumário


Introdução

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.


Instruções para rodar localmente

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


Arquitetura

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.

estruturação de pastas

Rotas

POST /users

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"
}

POST /users/login

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"
}

POST /email

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"
  }
}

POST /email/password

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]"
	}

}

POST /tasks

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"
}

GET /tasks

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"
		}
	]
}

GET /tasks/:id

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"
}

PUT /tasks/:id

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"
}

DELETE /task/:id

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"
}

Banco de dados

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.


Validação

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.


Testes

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>.

cobertura de testes


Tecnologias

  • Express
  • Typescript
  • Ts node
  • Nodemon
  • MongoDB
  • Json Web Token
  • Dotenv
  • Jest
  • ESlint
                           

Deploy

Deploy feito no heroku Heroku

heroku icon

Implementações Futuras

  • Documentação Swagger
  • 100% de cobertura de teste
  • Rota de pessoa administradora para direcionar tarefas.

appointment-calendar-backend's People

Contributors

gonzagadavid avatar

Stargazers

 avatar  avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.