Giter Club home page Giter Club logo

desafio-backend-nodejs's Introduction

Desafio Backend NodeJS

Coverage Status

Tabela de Conteudos

Sobre o projeto

Este desafio trate-se de uma das etapas no processo seletivo para a Concrete Solutions neste projeto é empregrado varias bibliotecas para um desenvolvimento eficaz da api, tais como : Express, Mongoose, Jest, ESLint, Cors, Faker, entre outras.

Caracteristicas

  • Sem uso de framewoks
  • Express + MongoDB
  • ORM Mongoose
  • Testes automatizado com Jest
  • Cors ativado
  • Utilizando Helmet para proteção segurança nos headers
  • Organização e padronização de códigos com ESLint
  • Criação e utilização de variaveis de ambiente com o dotEnv
  • Integração com Docker
  • Automação de criação de dados para testes com Faker

Inicialização

Requisitos

Clonagem do Projeto

Para clonar este desadio em seu reositorio local, você ira precisar do Git, uma vez instalado corretamente você pode executar o comando:

$ git clone https://github.com/iranjunior/desafio-backend-nodejs.git

ou caso você tenha uma chave ssh configurada:

$ git clone [email protected]:iranjunior/desafio-backend-nodejs.git

por fim execute o comando para entrar na pasta que foi criada e instalar as dependencias do projeto

$ cd desafio-backend-nodejs
$ yarn install

Comandos de inicialização

Para iniciar a aplicação basta executar o comando: yarn start ou npm startmas existe alguns comandos que podem lhe ajudar a realizar tarefas especificas como testes unitarios, testes de integração, cobertura dos testes, debugs do banco de dados, reinicialização do servidor em caso de mudança em arquivos, etc. Uma lista completa sobre os comandos de inicialização pode ser vista abaixo:

Comandos Tarefa a ser realizada
yarn start Inicializa o serviço em ambiente de produção
yarn dev Inicializa o serviço em ambiente de desenvolvimento, este modo de inicialização permite que serviço seja reiniciado sempre que houver uma mudança nos arquivo do projeto
yarn test Realiza todos os testes localizados na pasta tests
yarn test:unit Realiza todos os testes unitários
yarn test:integrations Realiza todos os testes de integração com o banco de dados
yarn test:coverage Realiza todos os testes e mostra os arquivos cobridos pelo teste
yarn lint Executa o ESLint nos arquivos da aplicação

Estrutura das pastas

├─── __tests__/
	├─── Integrations/
		└─── ...
	├─── Units/
		└─── ...
	├─── Utils/
		└─── ...
	...
├─── src/
	├─── App/
		├─── Controllers/
			└───...
		├─── Middlewares/
			└─── ...
		├─── Models/
			└───...
	├─── Config/
		└───...
	├─── Utils/
		└─── ...
	...

Rotas

A api tem algumas rotas disponiveis para sua atualização, neste documento você encontrar quais rotas são essas e um breve exemplo de como utilizar-las

Tabela de rotas

As rotas da aplicação estão listadas na tabela abaixo:

Rota Descrição
POST /signup Está é uma rota para criar um usuario
POST /signin Está é a rota de authenticação de usuario
GET /user/:uuid Está rota busca o usuario com o uuid passado no query paraments, desde que seja o mesmo que está requerindo as informações
PUT /user Está é a rota que atualiza o usuario que está requerindo as informações
DELETE /user Está é a rota que apaga o usuario que foi passado no token de authenticação

Exemplos de uso

Criar usuario


POST /signup

Headers

Content-Type     application/json

Body

{
    "email": "[email protected]",
	"name": "Iran Junior",
	"password": "ljhgjhfkufoi",
    "phones": [
    	{
    		"ddd": "081",
    		"phone": "21444687"

    	},
    	{
    		"ddd": "081",
    		"phone": "97747456"

    	},...
    	]
}

Response

{
    "user": {
        "_id": "5d969cfa5c93d146785a0d3b",
        "uuid": "p5kBvyEKU4JvwAEUeqq9KC",
        "lastLogin": "2019-10-04T01:14:40.962Z",
        "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjI4MjYyNzMwMjQwMDAsImlhdCI6MTU3MDE1MTY4MH0.XHmoVntNJqGdAqVO2AkeumG3BAaaSmpbnah7SeVC8a8",
        "createdAt": "2019-10-04T01:14:34.232Z",
        "updatedAt": "2019-10-04T01:14:40.964Z"
    }
}

Login usuario


POST /signin

Headers

Content-Type     application/json

Body

{
    "email": "[email protected]",
	"password": "ljhgjhfkufoi"
}

Response

{
        "_id": "5d969cfa5c93d146785a0d3b",
        "uuid": "p5kBvyEKU4JvwAEUeqq9KC",
        "lastLogin": "2019-10-04T01:14:40.962Z",
        "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjI4MjYyNzMwMjQwMDAsImlhdCI6MTU3MDE1MTY4MH0.XHmoVntNJqGdAqVO2AkeumG3BAaaSmpbnah7SeVC8a8",
        "createdAt": "2019-10-04T01:14:34.232Z",
        "updatedAt": "2019-10-04T01:14:40.964Z"
}

Buscar usuario


GET /user/5d969cfa5c93d146785a0d3b

Headers

Content-Type     application/json
Authorization    Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjI4MjYyNzMwMjQwMDAsImlhdCI6MTU3MDE1MTY4MH0.XHmoVntNJqGdAqVO2AkeumG3BAaaSmpbnah7SeVC8a8

Body

Response

{
    "user": {
        "_id": "5d969cfa5c93d146785a0d3b",
        "uuid": "p5kBvyEKU4JvwAEUeqq9KC",
        "email": "[email protected]",
	    "name": "Iran Junior",
	    "password": "ljhgjhfkufoi",
        "phones": [
    	    {
    	    	"ddd": "081",
    	    	"phone": "21444687"

    	    },
    	    {
    	    	"ddd": "081",
    	    	"phone": "97747456"

    	    },...
    	    ]
        "lastLogin": "2019-10-04T01:14:40.962Z",
        "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjI4MjYyNzMwMjQwMDAsImlhdCI6MTU3MDE1MTY4MH0.XHmoVntNJqGdAqVO2AkeumG3BAaaSmpbnah7SeVC8a8",
        "createdAt": "2019-10-04T01:14:34.232Z",
        "updatedAt": "2019-10-04T01:14:40.964Z"
    }
}

Atualizar usuario


PUT /user

Headers

Content-Type     application/json
Authorization    Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjI4MjYyNzMwMjQwMDAsImlhdCI6MTU3MDE1MTY4MH0.XHmoVntNJqGdAqVO2AkeumG3BAaaSmpbnah7SeVC8a8

Body

{
    "email": "[email protected]"
}

Response

{
    "n": 1,
    "updatedRows": 1,
    "status": "ok"

}

Apagar usuario


DELETE /user

Headers

Content-Type     application/json
Authorization    Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjI4MjYyNzMwMjQwMDAsImlhdCI6MTU3MDE1MTY4MH0.XHmoVntNJqGdAqVO2AkeumG3BAaaSmpbnah7SeVC8a8

Body

Response

{
    "n": 1,
    "DelectedRows": 1,
    "status": "ok"

}

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.