Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
104 changes: 104 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,104 @@
# Logs
logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
lerna-debug.log*

# Diagnostic reports (https://nodejs.org/api/report.html)
report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json

# Runtime data
pids
*.pid
*.seed
*.pid.lock

# Directory for instrumented libs generated by jscoverage/JSCover
lib-cov

# Coverage directory used by tools like istanbul
coverage
*.lcov

# nyc test coverage
.nyc_output

# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)
.grunt

# Bower dependency directory (https://bower.io/)
bower_components

# node-waf configuration
.lock-wscript

# Compiled binary addons (https://nodejs.org/api/addons.html)
build/Release

# Dependency directories
node_modules/
jspm_packages/

# TypeScript v1 declaration files
typings/

# TypeScript cache
*.tsbuildinfo

# Optional npm cache directory
.npm

# Optional eslint cache
.eslintcache

# Microbundle cache
.rpt2_cache/
.rts2_cache_cjs/
.rts2_cache_es/
.rts2_cache_umd/

# Optional REPL history
.node_repl_history

# Output of 'npm pack'
*.tgz

# Yarn Integrity file
.yarn-integrity

# dotenv environment variables file
.env
.env.test

# parcel-bundler cache (https://parceljs.org/)
.cache

# Next.js build output
.next

# Nuxt.js build / generate output
.nuxt
dist

# Gatsby files
.cache/
# Comment in the public line in if your project uses Gatsby and *not* Next.js
# https://nextjs.org/blog/next-9-1#public-directory-support
# public

# vuepress build output
.vuepress/dist

# Serverless directories
.serverless/

# FuseBox cache
.fusebox/

# DynamoDB Local files
.dynamodb/

# TernJS port file
.tern-port
1 change: 1 addition & 0 deletions Procfile
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
web: npm start
1 change: 1 addition & 0 deletions README copy.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
# nodejs-login
113 changes: 2 additions & 111 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,112 +1,3 @@
# desafio-nodejs
# submissão para o desafio

# API RESTful de usuários + login

Criar aplicação que exponha uma API RESTful de criação de usuários com login.

A aplicação deve aceitar e responder apenas em JSON.

Nós esperamos que as mensagens de erro tenham o seguinte formato:

```json
{"message": "Error message", "errorCode": 123}
```

## /signup

* Essa rota espera um usuário com os campos abaixo:
- firstName [String]
- lastName [String]
- email [String]
- password [String]
- phones [List]
- number [Number]
- area_code [Number]
- country_code [String]
* Segue abaixo um exemplo do formato:

```json
{
"firstName": "Hello",
"lastName": "World",
"email": "hello@world.com",
"password": "hunter2",
"phones": [
{
"number": 988887888,
"area_code": 81,
"country_code": "+55"
}
]
}
```
Obs: O id do usuário pode ser um sequencial gerado pelo banco ou um id único.

* Responder o código de status HTTP apropriado
* Em caso de sucesso você deve retornar:
* `token`: token de acesso da API (JWT) com informações do usuário cadastrado;

* Em caso de erro:
- E-mail existente [retornar um erro com a mensagem "E-mail already exists"];
- Campos inválidos [retornar um erro com a mensagem "Invalid fields"];
- Campos não preenchidos [retornar um erro com a mensagem "Missing fields"];
## /signin
* Essa rota espera um objeto com os campos abaixo:
- email [String]
- password [String]

* Em caso de sucesso você deve retornar:
* `token`: token de acesso da API (JWT) com informações do usuário logado;
* Em caso de erro:
- E-mail inexistente ou senha errada [retornar um erro com a mensagem "Invalid e-mail or password"];
- Campos não preenchidos [retornar um erro com a mensagem "Missing fields"];

## /me
* Essa rota espera o token da api (via header):
- Authorization [JWT Token]

* Em caso de sucesso você deve retornar:
- `firstName`: Nome do usuário;
- `lastName`: Sobrenome do usuário;
- `email`: E-mail do usuário;
- `phones`: Lista de telefones do usuário;
- `created_at`: Data da criação do usuário;
- `last_login`: Data da última vez que o usuário realizou login;
* Em caso de erro:
- Token não enviado [retornar um erro com a mensagem "Unauthorized"];
- Token expirado [retornar um erro com a mensagem "Unauthorized - invalid session"];

## Requisitos
* Disponibilizar a API rodando em algum host (Heroku, AWS, Digital Ocean, etc).
* Utilizar no mínimo NodeJS 8.10+
* Testes unitários

## Requisitos desejáveis
* Banco de dados: MongoDB
* JWT como token
* Senha deve ser criptografada

### **Sugestões** ###

Nesta seção sugerimos alguns frameworks para uso, mas fique à vontade para escolher outros que não estiverem na lista.

* Express
* Koa
* Hapi

### **Etapas para submissão** ###

O canditado ao finalizar a implementação deverá enviar um pull request para o repositório em questão.

Segue o passo-a-passo:

1. Fazer fork do respositório
2. Implementar seu projeto no fork realizado.
3. Comitar e subir todas as alteraçes para o fork criado por você.
4. Enviar um pull request pelo Github.

O fork deverá ser público para inspeção do código.

### **Observações** ###

Não fazer push para este repositório.
## Endpoint: [heroku](https://calm-retreat-94328.herokuapp.com/)
6 changes: 6 additions & 0 deletions babel.config.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
module.exports = {
presets: [
['@babel/preset-env', {targets: {node: 'current'}}],
'@babel/preset-typescript',
],
};
Loading