Skip to content

Back-end Java feito com Spring Boot e suas principais starters para criação de API REST e persistência com JPA. Controle de segurança dos recursos com JWT e controle de acesso ACL permitindo a autorização de usuário.

License

Apache-2.0, Apache-2.0 licenses found

Licenses found

Apache-2.0
LICENSE
Apache-2.0
LICENSE.md
Notifications You must be signed in to change notification settings

JeffersonLuizCruz/api-restful-gestaodepedidos

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

45 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Ecommerce

REST API HelpDesk - BackEnd - Spring Boot

Aplicação simples Help Desk de controle de chamados.

GitHub repo size Packagist License GitHub top language GitHub language count GitHub followers

Sobre o projeto   |    Diagrama de Classe   |   

📃 Sobre o projeto

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.

📃 Diagrama de Classe

Ecommerce

Tecnologia:

  • 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

Construção do Projeto:

  • 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)

Start da Aplicação

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

Recurso User

Endpoint Usuário(/users/**)

Rota[POST]

Body:

{
    "name": "Hugo",
    "email": "[email protected]",
    "password": "123456789",
    "role": "ADMINISTRATOR"
}

Rota[POST]

Body:

{
    "email": "[email protected]",
    "password": "123456789"
}

Reponse Token JWT:

{
    "token": "eyJhbGciOiJIUzUxMiJ9.
    eyJzdWIiOiJodWdvQGdtYWlsLmNvbSIsImV4cCI6MTYxMzkxODcxMCwicm9sZSI6WyJST0xFX0FETUlOSVNUUkFUT1IiXX0.
    hAFvi5vIQq_SN6_hb4GBx2bvKWCZrV5hxpc9R6en7EenoFlH35UU3S0bim0kfLXKluRwR4y3lwM4LKGrovAcLA",
    
    "expire": 1613918710023,
    "tokenProvider": "Dearer"
}

Rota[PUT]

Body:

{
    "name": "Hugo",
    "email": "[email protected]",
    "password": "1234hugo", //Edite Password
    "role": "ADMINISTRATOR"
}

Rota[GET]

Response:

{
    "id": 1,
    "name": "Hugo",
    "email": "[email protected]",
    "role": "ADMINISTRATOR"
}

Rota[GET]

Response:

{
    "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"
        },
} ...

Rota[GET]

Response:

{
    "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"
            }
        }
    ]
}

Recurso Requests

Endpoint Pedido(/requests/**)

Rota[POST]

Body:

{
    "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"
    }
}

Rota[PUT]

Body:

{
    "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"
    }
}

Rota[GET]

Response:

{
    "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"
    }
}

Rota[GET]

Response:

{
    "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"
            }
        }
    ]
}
...

Rota[GET]

Response:

{
    "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"
            }
        }
    ]
}

Recurso Request-Stages

Endpoint Estágio do Pedido(OPEN | IN_PROGRESS | CLOSED)(/request-stages/**)

Rota[POST]

Body:

{
    "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"
    }
}
...

About

Back-end Java feito com Spring Boot e suas principais starters para criação de API REST e persistência com JPA. Controle de segurança dos recursos com JWT e controle de acesso ACL permitindo a autorização de usuário.

Resources

License

Apache-2.0, Apache-2.0 licenses found

Licenses found

Apache-2.0
LICENSE
Apache-2.0
LICENSE.md

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages