Aplicação simples Help Desk de controle de chamados.
Sobre o projeto | Diagrama de Classe |
Essa é uma API REST e tem como objeto entender o ecossistema Spring Security e JWT. Os conceitos aplicados foram: uso das anotations de segurança do Spring Security, criação do token jwt, autorização e autenticação. Cada usuário tem seu nível de autorização podendo apenas consumir seu recurso disponibilizado. Também foi aplicado o uso de boas práticas de geração de exceptions para quem for consumir a API.
O administrador da aplicação é o único capaz de alterar o estágio de um chamado. Os estágios de um chamado são: Chamado Aberto(OPEN), Chamado em Andamento(IN PROGRESS) e Finalizado(CLOSED). O usuário comum somente cria e consulta seus chamados e somente o administrador logado na API pode fazer qualquer alteração.
- Java 11
- Spring Boot 2.4.4
- Spring Data - JPA/Hibernate
- Banco de Dados PostgreSQL
- Spring Secutity - OAuth 2
- Front-end Angular
- Implementação no Heroku
- Amazon S3
- Criação de Interface Service (garantir baixo acoplamento)
- CRUD (ORM Hibernate - Ambiente de teste)
- Exception Personalizada
- DTO (Aplicação DTO na camada de Controller)
- Consulta e Busca Paginada
- Autenticação e Autorização (JWT)
server.error.include-stacktrace=never
spring.datasource.driver-class-name=org.postgresql.Driver
spring.datasource.url=jdbc:postgresql://localhost:5432/gestao_de_pedidos
spring.datasource.username=postgres
spring.datasource.password=root
spring.jpa.hibernate.ddl-auto=validate
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.format_sql=true
#Valores nulos(null) serão ignorados na resposta json.
spring.jackson.default-property-inclusion= non-null
Endpoint Usuário(/users/**)
- Salvar Usuário. [POST] http://localhost:8080/users/
{
"name": "Hugo",
"email": "[email protected]",
"password": "123456789",
"role": "ADMINISTRATOR"
}
- Login e Senha. [POST] http://localhost:8080/users/login
{
"email": "[email protected]",
"password": "123456789"
}
{
"token": "eyJhbGciOiJIUzUxMiJ9.
eyJzdWIiOiJodWdvQGdtYWlsLmNvbSIsImV4cCI6MTYxMzkxODcxMCwicm9sZSI6WyJST0xFX0FETUlOSVNUUkFUT1IiXX0.
hAFvi5vIQq_SN6_hb4GBx2bvKWCZrV5hxpc9R6en7EenoFlH35UU3S0bim0kfLXKluRwR4y3lwM4LKGrovAcLA",
"expire": 1613918710023,
"tokenProvider": "Dearer"
}
- Editar Usuário. [PUT] http://localhost:8080/users/1
{
"name": "Hugo",
"email": "[email protected]",
"password": "1234hugo", //Edite Password
"role": "ADMINISTRATOR"
}
- Listar Usuário por id . [GET] http://localhost:8080/users/1
{
"id": 1,
"name": "Hugo",
"email": "[email protected]",
"role": "ADMINISTRATOR"
}
- Lista Páginada de Usuários [GET] http://localhost:8080/users/
{
"totalElements": 10,
"pageSize": 10,
"totalPages": 1,
"elements": [
{
"id": 1,
"name": "hugo",
"email": "[email protected]",
"role": "ADMINISTRATOR"
},
{
"id": 2,
"name": "jeff",
"email": "[email protected]",
"role": "SIMPLE"
},
} ...
- Lista Páginada de um Pedido de respectivo usuário. [GET] http://localhost:8080/users/1/requests
{
"totalElements": 1,
"pageSize": 10,
"totalPages": 1,
"elements": [
{
"id": 1,
"subject": "Pedido de Notebook",
"description": "Notebook Acer de configuração avançada para programação Android",
"creationDate": "2021-02-16T15:23:28.464+00:00",
"state": "OPEN",
"owner": {
"id": 1,
"name": "hugo",
"email": "[email protected]",
"role": "ADMINISTRATOR"
}
}
]
}
Endpoint Pedido(/requests/**)
- Cadastro de Pedido. [POST] http://localhost:8080/requests
{
"subject": "Pedido de Notebook",
"description": "Notebook Acer de configuração avançada para programação Android",
"owner": {
"id": 1,
"name": "Hugo",
"email": "[email protected]",
"role": "ADMINISTRATOR"
}
}
- Editar Pedido. [POST] http://localhost:8080/requests/1
{
"subject": "Pedido de Notebook",
"description": "Notebook Dell de configuração avançada para programação Android", // Editado marca de notebook
"owner": {
"id": 1,
"name": "Hugo",
"email": "[email protected]",
"role": "ADMINISTRATOR"
}
}
- Listar Pedido por id . [GET] http://localhost:8080/requests/1
{
"id": 1,
"subject": "Pedido de Notebook",
"description": "Notebook Dell de configuração avançada para programação Android",
"creationDate": "2021-02-16T15:23:28.464+00:00",
"state": "OPEN",
"owner": {
"id": 1,
"name": "Hugo",
"email": "[email protected]",
"role": "ADMINISTRATOR"
}
}
- Listar de Pedido paginada . [GET] http://localhost:8080/requests/
{
"totalElements": 2,
"pageSize": 10,
"totalPages": 1,
"elements": [
{
"id": 1,
"subject": "Pedido de Notebook",
"description": "Notebook Dell de configuração avançada para programação Android",
"creationDate": "2021-02-16T15:23:28.464+00:00",
"state": "OPEN",
"owner": {
"id": 1,
"name": "hugo",
"email": "[email protected]",
"role": "ADMINISTRATOR"
}
},
{
"id": 2,
"subject": "Pedido de compra de Software IDE",
"description": "O software IDE para desenvolvimento para compra é o Intellij",
"creationDate": "2021-02-16T15:41:24.807+00:00",
"state": "OPEN",
"owner": {
"id": 1,
"name": "hugo",
"email": "[email protected]",
"role": "ADMINISTRATOR"
}
}
]
}
...
- Listar de Pedido paginada com seu respectivo Estágio(status = OPEN | IN_PROGRESS | CLOSED). [GET] http://localhost:8080/requests/1/request-stages
{
"totalElements": 1,
"pageSize": 10,
"totalPages": 1,
"elements": [
{
"id": 1,
"description": "Pedido submetido para análise",
"realizationDate": "2021-02-16T17:19:35.869+00:00",
"state": "IN_PROGRESS",
"request": {
"id": 1,
"subject": "Pedido de Notebook",
"description": "Notebook Acer de configuração avançada para programação Android",
"creationDate": "2021-02-16T15:23:28.464+00:00",
"state": "IN_PROGRESS",
"owner": {
"id": 1,
"name": "hugo",
"email": "[email protected]",
"role": "ADMINISTRATOR"
}
},
"owner": {
"id": 1,
"name": "hugo",
"email": "[email protected]",
"role": "ADMINISTRATOR"
}
}
]
}
Endpoint Estágio do Pedido(OPEN | IN_PROGRESS | CLOSED)(/request-stages/**)
- O administrador do sistema irá definir o status do cadastro do Pedido do Cliente. [POST] http://localhost:8080/request-stages
{
"id": 1,
"description": "Pedido submetido para análise",
"realizationDate": "2021-02-16T17:19:35.869+00:00",
"state": "IN_PROGRESS",
"request": {
"id": 1,
"subject": "Pedido de Notebook",
"description": "Notebook Acer de configuração avançada para programação Android",
"creationDate": "2021-02-16T15:23:28.464+00:00",
"state": "IN_PROGRESS",
"owner": {
"id": 1,
"name": "Hugo",
"email": "[email protected]",
"role": "ADMINISTRATOR"
}
},
"owner": {
"id": 1,
"name": "Hugo",
"email": "[email protected]",
"role": "ADMINISTRATOR"
}
}
...