API RESTful para Sistema de Usuários de carro
Criar aplicação que exponha uma API RESTful de criação de usuários e carros com login.
Criar uma API para gerenciamento de carros dos usuarios.
- Modelo de dados
-
Usuario
- firstName String Nome do usuário
- lastName String Sobrenome do usuário
- email String E-mail do usuário
- birthday Date Data de nascimento do usuário
- login String Login do usuário
- password String Senha do usuário
- phone String Telefone do usuário
- cars List Lista de carros do usuário
-
Carro
- year Int Ano de fabricação do carro
- licensePlate String Placa do carro
- model String Modelo do carro
- color String Cor predominante do carro
-
-
21/11
- desenvolvimento das estorias - ok
- desenvolvimento testes junit / cumcumber -
- desenvolvimento do eureka - ok
- desenvolvimento do swagger - ok
-
22/11
- desenvolvimento da autenticacao -
- desenvolvimento do crud - ok
- desenvolvimento do scheduled
-
23/11
- desenvolvimento front-end - ok
- integracao sonar
- integracao jenkins
- integracao heroku
-
Funcionalidade: Realizar login
/api/signin POST- Como um usuario cadastrado do sistema
- Eu Quero logar no sistema
- Para ter acesso a outras funcionalidades do sistema
- Cenario 1: Logar no sistema
- Dado que sou usuario do sistema
- E cadastrado no sistema
- Quando logar no sistema
- Entao devo receber o token de acesso
- Cenario 2: Logar no sistema com dados incorretos
- Dado que sou usuario do sistema
- E cadastrado no sistema
- E defino usuario/senha errado
- Quando logar no sistema
- Entao devo receber "Invalid login or password"
-
Funcionalidade: Listar todos os usuários /api/users GET
- Como um usuario do sistema
- Eu Quero listar todos os usuarios registrados
- Cenario 1: Listar todos os usuarios registrados
- Dado sou um usuario do sistema
- Quando listar todos os usuarios registrados
- Entao devo receber a lista de usuarios
-
Funcionalidade: Cadastrar um novo usuário /api/users POST
- Como um usuario do sistema
- Eu Quero me cadastrar no sistema
- Para ter acesso
- Cenario 1: Cadastrar um novo usuário
- Dado sou um usuario do sistema
- E defino os dados do novo usuario
- Quando realizar cadastro
- Entao devo receber id e token do novo usuario
- Cenario 2: Cadastrar um novo usuário com email ja existente
- Dado sou um usuario do sistema
- E defino email ja existente
- Quando realizar cadastro
- Entao devo receber "Email already exists"
- Cenario 3: Cadastrar um novo usuário com login ja existente
- Dado sou um usuario do sistema
- E defino login ja existente
- Quando realizar cadastro
- Entao devo receber "Login already exists"
- Cenario 4: Cadastrar um novo usuário com campos invalidos
- Dado sou um usuario do sistema
- E defino email invalido
- Quando realizar cadastro
- Entao devo receber "Invalid fields"
- Cenario 5: Cadastrar um novo usuário com campos invalidos
- Dado sou um usuario do sistema
- E defino birthday invalido
- Quando realizar cadastro
- Entao devo receber "Invalid fields"
- Cenario 6: Cadastrar um novo usuário com campos nao preenchidos
- Dado sou um usuario do sistema
- E defino todos os campos do usuario vazio
- Quando realizar cadastro
- Entao devo receber "Missing fields"
-
Funcionalidade: Buscar um usuário pelo id /api/users/{id} GET
- Como um usuario do sistema
- Eu Quero buscar um usuario
- Cenario 1: Buscar um usuario pelo id
- Dado sou um usuario do sistema
- E defino "id"
- Quando buscar um usuario
- Entao devo receber os dados do usuario
-
Funcionalidade: Remover um usuário pelo id /api/users/{id} DELETE
- Como um usuario do sistema
- Eu Quero remover um usuario
- Para nao deixa-lo ter acesso ao sistema
- Cenario 1: Remover um usuario pelo id
- Dado sou um usuario do sistema
- E defino id
- Quando remover um usuario
- Entao devo receber o status ok
- Cenario 2: Remover um usuario pelo id inexistente
- Dado sou um usuario do sistema
- E defino id inexistente
- Quando remover um usuario
- Entao devo receber "user nonexistent"
-
Funcionalidade: Atualizar um usuário pelo id /api/users/{id} PUT
- Como um usuario do sistema
- Eu Quero atualizar um usuario
- Cenario 1: Atualizar um usuario pelo id
- Dado sou um usuario do sistema
- E defino id
- E defino firstName
- E defino lastName
- E defino email
- E defino birthday
- E defino login
- E defino password
- E defino phone
- E defino cars
- Quando atualizar um usuario
- Entao devo receber os novos dados do usuario
- Cenario 2: Atualizar um usuario pelo id com email ja existente
- Dado sou um usuario do sistema
- E defino id
- E defino email ja existente
- Quando atualizar um usuario
- Entao devo receber "Email already exists"
- Cenario 3: Atualizar um usuario pelo id com login ja existente
- Dado sou um usuario do sistema
- E defino id
- E defino login ja existente
- Quando atualizar um usuario
- Entao devo receber "login already exists"
- Cenario 4: Atualizar um usuario pelo id com campos invalidos
- Dado sou um usuario do sistema
- E defino id
- E defino email invalido
- Quando atualizar um usuario
- Entao devo receber "Invalid fields"
- Cenario 5: Atualizar um usuario pelo id com campos invalidos
- Dado sou um usuario do sistema
- E defino id
- E defino birthday invalido
- Quando atualizar um usuario
- Entao devo receber "Invalid fields"
- Cenario 6: Atualizar um usuario pelo id com campos nao preenchidos
- Dado sou um usuario do sistema
- E defino id
- E defino todos os campos do usuario vazio
- Quando atualizar um usuario
- Entao devo receber "Missing fields"
- Cenario 6: Atualizar um usuario pelo id inexistente
- Dado sou um usuario do sistema
- E defino id inexistente
- E defino firstName
- E defino lastName
- E defino email
- E defino birthday
- E defino login
- E defino password
- E defino phone
- E defino cars
- Quando atualizar um usuario
- Entao devo receber "user nonexistent"
-
Funcionalidade: Retornar as informações do usuário logado /api/me GET
- Como um usuario cadastrado do sistema
- Eu Quero recuperar as informações do usuário
- Para acessar os dados do usuario
- Cenario 1: Recuperar as informações do usuário logado
- Dado sou usuario do sistema
- E logado no sistema
- E defino token
- Quando recuperar as informações do usuário
- Entao devo receber os dados do usuario logado
- Cenario 2: Recuperar as informações do usuário logado com token nao enviado
- Dado sou usuario do sistema
- E defino token vazio
- Quando recuperar as informações do usuário
- Entao devo receber "Unauthorized"
- Cenario 3: Recuperar as informações do usuário logado com token expirado
- Dado sou usuario do sistema
- E logado no sistema por mais de 5 minutos
- Quando recuperar as informações do usuário
- Entao devo receber "Unauthorized - invalid session"
-
Funcionalidade: Listar todos os carros do usuário logado /api/cars GET
- Como um usuario cadastrado do sistema
- Eu Quero listar todos os carros do usuário logado
- Para acessar os dados da lista de carros
- Cenario 1: Listar todos os carros do usuário logado
- Dado sou usuario do sistema
- E logado no sistema
- Quando listar todos os carros do usuário logado
- Entao devo receber a lista de carros do usuário logado
- Cenario 2: Listar todos os carros do usuário logado com token nao enviado
- Dado sou usuario do sistema
- E defino token vazio
- Quando listar todos os carros do usuário logado
- Entao devo receber "Unauthorized"
- Cenario 3: Listar todos os carros do usuário logado com token expirado
- Dado sou usuario do sistema
- E logado no sistema por mais de 5 minutos
- Quando listar todos os carros do usuário logado
- Entao devo receber "Unauthorized - invalid session"
-
Funcionalidade: Cadastrar um novo carro para o usuário logado /api/cars POST
- Como um usuario cadastrado do sistema
- Eu Quero cadastrar um novo carro
- Cenario 1: Cadastrar um novo carro para o usuário logado
- Dado sou usuario do sistema
- E logado no sistema
- E defino os dados do novo carro
- Quando cadastrar um novo carro
- Entao devo receber id do novo carro cadastrado
- Cenario 2: Cadastrar um novo carro para o usuário logado com token nao enviado
- Dado sou usuario do sistema
- E defino token vazio
- E defino os dados do novo carro
- Quando cadastrar um novo carro
- Entao devo receber "Unauthorized"
- Cenario 3: Cadastrar um novo carro para o usuário logado com token expirado
- Dado sou usuario do sistema
- E logado no sistema por mais de 5 minutos
- E defino os dados do novo carro
- Quando cadastrar um novo carro
- Entao devo receber "Unauthorized - invalid session"
- Cenario 4: Cadastrar um novo carro para o usuário logado com placa ja existente
- Dado sou usuario do sistema
- E logado no sistema
- E defino placa ja existente
- Quando cadastrar um novo carro
- Entao devo receber "“License plate already exists"
- Cenario 5: Cadastrar um novo carro para o usuário logado com dados invalidos
- Dado sou usuario do sistema
- E logado no sistema
- E defino placa invalida
- Quando cadastrar um novo carro
- Entao devo receber "Invalid fields"
- Cenario 6: Cadastrar um novo carro para o usuário logado com campos nao preenhidos
- Dado sou usuario do sistema
- E logado no sistema
- E defino todos os campos do carro vazio
- Quando cadastrar um novo carro
- Entao devo receber "Missing fields"
-
Funcionalidade: Buscar um carro do usuário logado pelo id /api/cars/{id} GET
- Como um usuario cadastrado do sistema
- Eu Quero buscar um carro pelo id
- Para acessar os dados do carro
- Cenario 1: Buscar um carro do usuário logado pelo id
- Dado sou usuario do sistema
- E logado no sistema
- E defino id
- Quando buscar um carro
- Entao devo receber os dados do carro
- Cenario 2: Buscar um carro do usuário logado pelo id com token nao enviado
- Dado sou usuario do sistema
- E defino token vazio
- E defino id
- Quando buscar um carro
- Entao devo receber "Unauthorized"
- Cenario 3: Buscar um carro do usuário logado pelo id com token expirado
- Dado sou usuario do sistema
- E logado no sistema por mais de 5 minutos
- E defino id
- Quando buscar um carro
- Entao devo receber "Unauthorized - invalid session"
-
Funcionalidade: Remover um carro do usuário logado pelo id /api/cars/{id} DELETE
- Como um usuario cadastrado do sistema
- Eu Quero remover um carro do usuário logado pelo id
- Cenario 1: Remover um carro do usuário logado pelo id
- Dado sou usuario do sistema
- E logado no sistema
- Quando remover um carro pelo id
- Entao devo receber o status ok
-
Funcionalidade: Atualizar um carro do usuário logado pelo id /api/cars/{id} PUT
- Como um usuario cadastrado do sistema
- Eu Quero atualizar os dados carro
- Para manter os dados atualizados
- Cenario 1: Atualizar um carro para o usuário logado
- Dado sou usuario do sistema
- E logado no sistema
- E defino os dados atualizados do carro
- Quando atualizar um carro
- Entao devo receber os dados do carro atualizado
- Cenario 2: Atualizar um carro para o usuário logado com token nao enviado
- Dado sou usuario do sistema
- E defino token vazio
- E defino os dados atualizados do carro
- Quando atualizar um carro
- Entao devo receber "Unauthorized"
- Cenario 3: Atualizar um carro para o usuário logado com token expirado
- Dado sou usuario do sistema
- E logado no sistema por mais de 5 minutos
- E defino os dados atualizados do carro
- Quando atualizar um carro
- Entao devo receber "Unauthorized - invalid session"
- Cenario 4: Atualizar um carro para o usuário logado com placa ja existente
- Dado sou usuario do sistema
- E logado no sistema
- E defino placa ja existente
- Quando atualizar um carro
- Entao devo receber "“License plate already exists"
- Cenario 5: Atualizar um carro para o usuário logado com dados invalidos
- Dado sou usuario do sistema
- E logado no sistema
- E defino placa invalida
- Quando atualizar um carro
- Entao devo receber "Invalid fields"
- Cenario 6: Atualizar um carro para o usuário logado com campos nao preenhidos
- Dado sou usuario do sistema
- E logado no sistema
- E defino todos os campos do carro vazio
- Quando atualizar um carro
- Entao devo receber "Missing fields"
- JWT como token;
- Servidor deve estar embutido na aplicação (Tomcat, Undertow ou Jetty);
- Processo de build via Maven;
- Banco de dados em memória, como H2;
- Framework Spring;
- Utilizar no mínimo Java 8;
- Persistência com JPA/Hibernate;
- Disponibilizar a API rodando em algum host (Heroku, AWS, Digital Ocean, etc);
- Testes unitários;
- Criar um repositório público em alguma ferramenta de git (Github, Gitlab, Bitbucket, etc);
- Senha deve ser criptografada;
- Documentação (Javadoc);
- Design Pattern;
- Pipeline no Jenkins;
- Integração com SonarQube;
- Integração com JFrog Artifactory ou Nexus;
- Balanceador de cargas, Service Registry e/ou Proxy (Eureka, Zuul, Camel, Helix, etc.);
- Swagger.
- API Rest desenvolvida em Spring
- Necessário autenticação para consumir os serviços da API. Utilizado JWT. No endpoint de autenticação é necessário informar e-mail e password. Já estão criados por padrão dois usuários, um de perfil ADMIN que pode listar, criar, atualizar e remover outros usuários. E um de perfil TECHNICIAN, que é o perfil responsável pelas interações com o estacionamento, ou seja, ele pode: xxxxxxxxxx
- Como banco de dados está sendo utilizado o H2, banco que sobe em tempo de execução da aplicação: http://
- Usuário: sa
- Password: password
- BD: restcarDB
- O registro do microservico esta no eureka, disponivel em: https://eureka-rest-car-server.herokuapp.com/
- Documentação da API utilizando Swagger, disponível em: https://microserviceproject.herokuapp.com/swagger-ui.html
- Deploys da aplicação disponível no Heroku: https://rest-car.herokuapp.com/