Microserviço para gerenciamento de usuários e realização de autorizações para o sistema SIGEVA.
Escolha uma pasta para fazer um clone do projeto, e instale as bibliotecas necessárias.:
cd /path/to/folder
git clone https://github.com/ccsa-ufrn/sigeva-api-user.git
cd sigeva-api-user
npm install
Agora basta iniciar o projeto:
npm start
Modo | Ambiente | Descrição | Comando |
---|---|---|---|
start | NODE_ENV=development |
O servidor é reiniciado automaticamente a cada alteração no código | npm start |
build | - | Compila o código de /src em ES6 e o armazena no diretório /dist |
npm run build |
serve | NODE_ENV=production |
executa o build e roda o código de /dist com node |
npm run serve |
test | NODE_ENV=test |
executa os testes | npm test |
{
login: string,
password: string,
isActive: boolean,
createdAt: date,
modifiedAt: date
}
- Nunca retorna o password de um usuário.
- Respostas da API devem seguir a tabela de códigos HTTP e uma estrutura descrevendo o erro.
Seção para a documentação da API de usuários.
Retorna usuários
Nome | Decrição | Valores |
---|---|---|
p: number | Indica a página de retorno de resultados | Qualquer valor acima de zero. default: 1 |
c: number | Indica a quantidade de registros retornados por página (p) | Qualquer valor acima de 0. default: 10 |
q: string | Filtra os resultado com condições | Objeto JSON em formato string de acordo com a documentação do Mongoose ( Queries Object ) default: sem filtro |
f: string | Indica quais campos serão retornados da requisição | Nomes dos campos separados por virgula |
o: string | Ordenar a query | Objeto JSON em formato string de acordo com a documentação do Mongoose |
GET ?p=1&c=2&f=login,createdAt HTTP/1.1
[
{
"_id": "5a0gfieo102",
"login": "example",
"createdAt": "Thu Jan 19 2017 12:13:18 GMT-0300 (BRT)"
},
{
"_id": "6a043azeo171",
"login": "example 2",
"createdAt": "Thu Jan 19 2017 14:12:00 GMT-0300 (BRT)",
}
]
Retorna um único usuário
Nome | Decrição | Valores |
---|---|---|
f: string | Indica quais campos serão retornados da requisição | Objeto JSON em formato string de acordo com a documentação do Mongoose |
GET 5a0gfieo102?f=login,created HTTP/1.1
{
"login": "example",
"createdAt": "Thu Jan 19 2017 12:13:18 GMT-0300 (BRT)"
}
Atualiza um usuário
Nome | Decrição | Valores |
---|---|---|
password: string |
POST / HTTP/1.1
Content-Type: 'application/json'
{ "password" : "nova+senha" }
Retorna o antigo objeto usuário.
{
"_id": "5a0gfieo102",
"login": "example",
"isActive": true,
"createdAt": "Thu Jan 19 2017 12:13:18 GMT-0300 (BRT)",
"modifiedAt": "Thu Jan 19 2017 12:16:24 GMT-0300 (BRT)"
}
Remove um usuário. Na verdade, a única coisa que ocorre é a modificação do campo isActive.
Sem campos
DELETE / HTTP/1.1
Content-Type: 'application/json'
{ "_id": "id+do+usuario" }
Retorna o objeto removido.
{
"_id": "5a0gfieo102",
"login": "example",
"isActive": false,
"createdAt": "Thu Jan 19 2017 12:13:18 GMT-0300 (BRT)",
"modifiedAt": "Thu Jan 19 2017 12:16:24 GMT-0300 (BRT)"
}
Erro para requisições inválidas:
DELETE / HTTP/1.1
Content-Type: 'application/json'
{ }
HTTP/1.1 400
{
"error": "campos obrigatórios vazios",
"target": [
{ "field": "_id", "error": "não pode ser nulo" }
]
}
Retorna um token JWT caso as credenciais estejam corretas, caso contrário, nega.
Nome | Decrição | Valores |
---|---|---|
login: string | ||
password: string |
POST /authenticate HTTP/1.1
Content-Type: 'application/json'
{ "login": "login+do+usuario", "password": "senha+em+texto+plano" }
{
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjU4ODEwNGU5OTM0Nz"
}
Cadastra um novo usuário.
A ideia é que as restrições de negócio não aconteçam em código na API, e sim, sejam alteradas/criadas pelos operadores do sistema, ou seja, serão armazenadas um microserviço da API específico para lidar com as regras de negócio.
Nome | Decrição | Valores |
---|---|---|
login: string | - | - |
password: string | - | - |
POST /authenticate HTTP/1.1
Content-Type: 'application/json'
{ "login": "login+do+usuario", "password": "senha+em+texto+plano" }
Retorna o objeto criado.
HTTP/1.1 200 OK
{
"_id": "5a0gfieo102",
"login": "example",
"isActive": true,
"createdAt": "Thu Jan 19 2017 12:13:18 GMT-0300 (BRT)",
"modifiedAt": "Thu Jan 19 2017 12:16:24 GMT-0300 (BRT)"
}
Erro para requisições inválidas:
POST /authenticate HTTP/1.1
Content-Type: 'application/json'
{ }
HTTP/1.1 400
{
"error": "campos obrigatórios vazios",
"target": [
{ "field": "login", "error": "não deve ser nulo" },
{ "field": "password", "error": "não deve ser nulo" }
]
}