Skip to content

miguelsoliv/code-challenge-naveteam-nodejs

Repository files navigation

Code Challenge - Nave

Informações gerais

Antes de começar:

  1. Instale as dependências do projeto: yarn || npm i
  2. Crie o seguinte banco de dados via docker: docker run --name code_challenge_nave -e POSTGRES_PASSWORD=nave -p 5432:5432 -d postgres
  3. Execute as migrations para criação das tabelas no banco: yarn typeorm migration:run || npm run typeorm migration:run

Comandos para iniciar/testar a API:

  • Para iniciar o servidor de desenvolvimento: yarn dev || npm run dev
  • Para executar os testes (não é preciso ter o banco criado): yarn test || npm run test

Documentação via Insomnia

Baixe o arquivo Insomnia_2020-08-09.json para realizar a importação ou importe diretamente via URL https://github.com/miguelsoliv/code-challenge-naveteam-nodejs/blob/master/Insomnia_2020-08-09.json

Estrutura do projeto

O projeto foi organizado com base no Package by Feature (pasta useCases) e com princípios do SOLID adaptados

Testes

Para facilitar a execução dos testes foram criadas imitações dos repositórios de acesso ao Postgres (fake repositories). A cada execução dos testes o "banco" é zerado, pois os dados estão sendo salvos somente em memória.

Endpoints

[POST] /users
Title Get Scenario
URL /users
Method POST
URL Params None
Data Params Required:
name=[string]
email=[string]
password=[string]
Success Response Code: 201 CREATED
Content: { "name": "User", "email": "user@example.com", "id": 1 }
Error Response Code: 409 CONFLICT
Content: { "status": "error", "message": "Email already in use" }
Sample Request { "name": "User", "email": "user@example.com", "password": "123456" }
[POST] /session
Title Get Scenario
URL /session
Method POST
URL Params None
Data Params Required:
email=[string]
password=[string]
Success Response Code: 200 OK
Content: { "user": { "id": 1, "name": "User", "email": "user@example.com" }, "token": "JWT here" }
Error Response Code: 406 NOT ACCEPTABLE
Content: { "status": "error", "message": "Email or password invalid" }
Sample Request { "email": "user@example.com", "password": "123456" }
[POST] /projects
Title Get Scenario
URL /projects
Method POST
URL Params None
Data Params Required:
name=[string]
navers=[number[]]
Success Response Code: 201 CREATED
Content: { "name": "Cool Project", "id": 1 }
Error Response Code: 404 NOT FOUND
Content: { "status": "error", "message": "Invalid user" } or { "status": "error", "message": "Naver with ID 1 not found" }
Sample Request { "name": "Cool Project", "navers": [] }
Notes Authentication required
[GET] /projects
Title Get Scenario
URL /projects
Method GET
URL Params None
Data Params None
Success Response Code: 200 OK
Content: [{ "name": "Cool Project", "id": 1 }]
Error Response Code: 404 NOT FOUND
Content: { "status": "error", "message": "Invalid user" }
Sample Request /projects
Notes Authentication required
[PUT] /projects/:id
Title Get Scenario
URL /projects/:id
Method PUT
URL Params Required:
id=[number]
Data Params Required:
name=[string]
navers=[number[]]
Success Response Code: 200 OK
Content: { "id": 1, "name": "Awesome Project" }
Error Response Code: 401 UNAUTHORIZED
Content: { "status": "error", "message": "This project is not related to you" }
Code: 404 NOT FOUND
Content: { "status": "error", "message": "Invalid user" }, { "status": "error", "message": "Project not found" } or { "status": "error", "message": "Naver with ID 1 not found" }
Sample Request { "name": "Awesome Project", "navers": [1] }
Notes Authentication required
[GET] /projects/:id
Title Get Scenario
URL /projects/:id
Method GET
URL Params Required:
id=[number]
Data Params None
Success Response Code: 200 OK
Content: { "id": 1, "name": "Awesome Project", "navers": [{ "id": 1, "name": "John Doe", "birthdate": "2000-10-10", "admission_date": "2020-10-02", "job_role": "Dev" }] }
Error Response Code: 404 NOT FOUND
Content: { "status": "error", "message": "Project not found" }
Sample Request /projects/1
Notes Authentication required
[DELETE] /projects/:id
Title Get Scenario
URL /projects/:id
Method DELETE
URL Params Required:
id=[number]
Data Params None
Success Response Code: 204 NO CONTENT
Content: None
Error Response Code: 401 UNAUTHORIZED
Content: { "status": "error", "message": "This project is not related to you" }
Code: 404 NOT FOUND
Content: { "status": "error", "message": "Invalid user" } or { "status": "error", "message": "Project not found" }
Sample Request /projects/1
Notes Authentication required
[POST] /navers
Title Get Scenario
URL /navers
Method POST
URL Params None
Data Params Required:
name=[string]
admission_date=[Date]
birthdate=[Date]
job_role=[string]
projects=[number[]]
Success Response Code: 201 CREATED
Content: { "name": "John Doe", "birthdate": "2000-08-08", "admission_date": "2020-08-08", "job_role": "Desenvolvedor", "id": 1 }
Error Response Code: 404 NOT FOUND
Content: { "status": "error", "message": "Invalid user" } or { "status": "error", "message": "Project with ID 1 not found" }
Sample Request { "name": "John Doe", "admission_date": "2020-08-08", "birthdate": "2000-08-08", "job_role": "Desenvolvedor", "projects": [] }
Notes Authentication required
[GET] /navers
Title Get Scenario
URL /navers
Method GET
URL Params None
Data Params None
Success Response Code: 200 OK
Content: [{ "name": "John Doe", "birthdate": "2000-08-08", "admission_date": "2020-08-08", "job_role": "Desenvolvedor", "id": 1 }]
Error Response Code: 404 NOT FOUND
Content: { "status": "error", "message": "Invalid user" }
Sample Request /navers
Notes Authentication required
[PUT] /navers/:id
Title Get Scenario
URL /navers/:id
Method PUT
URL Params Required:
id=[number]
Data Params Required:
name=[string]
admission_date=[Date]
birthdate=[Date]
job_role=[string]
projects=[number[]]
Success Response Code: 200 OK
Content: { "id": 1, "name": "John Doe!", "birthdate": "2000-10-10", "admission_date": "2020-10-02", "job_role": "Dev" }
Error Response Code: 401 UNAUTHORIZED
Content: { "status": "error", "message": "This project is not related to you" }
Code: 404 NOT FOUND
Content: { "status": "error", "message": "Invalid user" }, { "status": "error", "message": "Naver not found" } or { "status": "error", "message": "Project with ID 1 not found" }
Sample Request { "name": "John Doe!", "admission_date": "2020-10-02", "birthdate": "2000-10-10", "job_role": "Dev", "projects": [1] }
Notes Authentication required
[GET] /navers/:id
Title Get Scenario
URL /navers/:id
Method GET
URL Params Required:
id=[number]
Data Params None
Success Response Code: 200 OK
Content: { "id": 1, "name": "John Doe!", "admission_date": "2020-10-02", "birthdate": "2000-10-10", "job_role": "Dev", "projects": [{ "id": 1, "name": "Awesome Project" }] }
Error Response Code: 404 NOT FOUND
Content: { "status": "error", "message": "Naver not found" }
Sample Request /navers/1
Notes Authentication required
[DELETE] /navers/:id
Title Get Scenario
URL /navers/:id
Method DELETE
URL Params Required:
id=[number]
Data Params None
Success Response Code: 204 NO CONTENT
Content: None
Error Response Code: 401 UNAUTHORIZED
Content: { "status": "error", "message": "This naver is not related to you" }
Code: 404 NOT FOUND
Content: { "status": "error", "message": "Invalid user" } or { "status": "error", "message": "Naver not found" }
Sample Request /navers/1
Notes Authentication required

About

Backend challenge from Nave (Pelotas, RS - BR)

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published