- Uma API REST que permite cadastrar, atualizar, listar e deletar clientes do sistema.
- Possui sistema de autenticação e autorização com spring security e JWT.
- Paginação e filtro configurados.
- Maven versão 3.8.4.
- Spring Boot 2.6.3
- MapStruct 1.3.1.Final
- Java 11
- Lombok 1.18.22
- H2 Database
- Clone o projeto com o git.
git clone "repositorio gitHub"
- Vá na opção Project from Existing Sources.
- Escolha a opção Maven e clique em finish.
- Clique na aba run > Edit Configuration.
- Configure um aplication como na imagem e clique em ok.
- Execute o comando mvn clean install.
- Inicie a aplicação.
- Esse projeto utiliza a biblioteca do [lombok] para automatizar o processo de desevolvimento.
- Para maiores informações sobre a configuração do lombok acesse https://projectlombok.org/
- Esse projeto utiliza a biblioteca do MapStruct, que é um gerador de código que simplifica bastante a implementação de mapeamentos entre tipos de bean Java com base em uma abordagem de convenção sobre configuração.
- Para maiores informações sobre a configurações https://mapstruct.org/.
- O Spring Boot é uma ferramenta que visa facilitar o processo de configuração e publicação de aplicações que utilizem o ecossistema Spring.
- Para maiores informações sobre a configurações https://spring.io/.
-
- Request (/api/v1/customer)
- Rquest Body
- Request (/api/v1/customer)
{
"phones":{
"phoneNumber" : ""
}
,
"addresses":{
"cep":"",
"street":"",
"number":0,
"district":"",
"city":"",
"state":""
},
"dataCriacao":"",
"dataAlteracao":""
,
"physicalCustomer":{
"cpf":"",
"name":"",
"birthDay":""
},
"userId":0
}
-
- Request (/api/v1/customer)
-
Rquest Body
-
Response
-
- Request (/api/v1/customer)
[
{
"id": 1,
"phones": {
"id": 3,
"phoneNumber": "62981184314"
},
"addresses": {
"id": 2,
"cep": "74484070",
"street": "rua tal",
"number": 475,
"district": "Parque Oeste",
"city": "Goiânia",
"state": "GO"
},
"dataCriacao": "18/08/2022",
"dataAlteracao": "",
"physicalCustomer": {
"cpf": "700.075.451-69",
"name": "Mateus Alves",
"birthDay": "14/04/1995"
},
"legalCustomer": {
"cnpj": "32.252.276/0001-53",
"corporateName": "Nair e Elza Limpeza ME",
"fantasyName": "Nair e Elza Limpeza ME"
},
"userId": 0
},
]
-
- Request (/api/v1/customer/{id})
-
Rquest Body
-
Response
-
- Request (/api/v1/customer/{id})
{
"id": 1,
"phones": {
"id": 3,
"phoneNumber": "62981184314"
},
"addresses": {
"id": 2,
"cep": "74484070",
"street": "rua tal",
"number": 475,
"district": "Parque Oeste",
"city": "Goiânia",
"state": "GO"
},
"dataCriacao": "18/08/2022",
"dataAlteracao": "",
"physicalCustomer": {
"cpf": "700.075.451-69",
"name": "Mateus Alves",
"birthDay": "14/04/1995"
},
"legalCustomer": {
"cnpj": "32.252.276/0001-53",
"corporateName": "Nair e Elza Limpeza ME",
"fantasyName": "Nair e Elza Limpeza ME"
},
"userId": 0
},
-
- Request (/api/v1/customer/{id})
- Rquest Body
- Request (/api/v1/customer/{id})
{
"id": 1,
"phones": {
"id": 3,
"phoneNumber": "62981184314"
},
"addresses": {
"id": 2,
"cep": "74484070",
"street": "rua tal",
"number": 475,
"district": "Parque Oeste",
"city": "Goiânia",
"state": "GO"
},
"dataCriacao": "18/08/2022",
"dataAlteracao": "",
"physicalCustomer": {
"cpf": "700.075.451-69",
"name": "Mateus Alves",
"birthDay": "14/04/1995"
},
"legalCustomer": {
"cnpj": "32.252.276/0001-53",
"corporateName": "Nair e Elza Limpeza ME",
"fantasyName": "Nair e Elza Limpeza ME"
},
"userId": 0
},
- Response
{
"message": "Updated customer with id 1"
}
-
- Request (/api/v1/customer/{id})
-
Rquest Body
-
Response
-
- Request (/api/v1/customer/{id})
{
"message": "Deleted customer with id 1"
}
-
- Request (/api/v1/user)
-
Rquest Body
-
Response
-
- Request (/api/v1/user)
[
{
"id": 1,
"login": "[email protected]",
"password": "$2a$10$yGbI1ucCgPfEKPJzrGYAq.bDQv.v3weW4ef7ihXKqeTTTMpz1CErW",
"securityGroups": [
{
"id": 2,
"name": "ADMIN",
"authority": "ADMIN"
}
]
},
]
-
- Request (/api/v1/user)
- Rquest Body
- Request (/api/v1/user)
[
{
"login": "[email protected]",
"password": "$2a$10$yGbI1ucCgPfEKPJzrGYAq.bDQv.v3weW4ef7ihXKqeTTTMpz1CErW",
"securityGroups": [
{
"name": "ADMIN",
}
]
},
]
-
- Request (/api/v1/auth)
- Rquest Body
- Request (/api/v1/auth)
{
"login":"[email protected]",
"password":"ojc@2022"
}
- Response
{
"token": "eyJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJBUEkgcHJvamV0byB0ZXN0ZSIsInN1YiI6IjEiLCJpYXQiOjE2NjE0MzkyODAsImV4cCI6MTY2MTUyNTY4MH0.Ca3PB_XkcHUFw2vptznpGqXk8D5JmY--OBZOFCMuhhs",
"type": "Bearer"
}
- @RestController: retorna o objeto e os dados do objeto são gravados diretamente na resposta HTTP como JSON.
- @RequestMapping("/api/v1/people"): mapeia um caminho de requisições.
- @AllArgsConstructor(onConstructor = @__(@Autowired)): Gera um construtor all-args e injeta a anotação @Autowired no
construtor.
- @PostMapping: Anotação para mapear solicitações HTTP POST em métodos de manipulador específicos.
- @RequestBody: O Spring desserializa automaticamente o JSON em um tipo Java, supondo que um apropriado seja especificado. Por padrão, o tipo que anotamos com a anotação @RequestBody deve corresponder ao JSON enviado do nosso controlador do lado do cliente.
- @Valid: Irá executar a validação de todas as anotações da classe.
- @Data: anotação de atalho conveniente que agrupa os recursos de @ToString, @EqualsAndHashCode, @Getter/@Setter e @RequiredArgsConstructorjuntos.
- @Builder: permite que você produza automaticamente o código necessário para que sua classe seja instanciável com código como:
Person.builder() .name("Adam Savage") .city("San Francisco") .job("Mythbusters") .job("Unchained Reaction") .build();
- @AllArgsConstructor: Gera um construtor all-args.
- @NoArgsConstructor: Gera um construtor vazio.
- @NotEmpty: Um campo restrito com @NotEmpty não deve ser nulo e seu tamanho/comprimento deve ser maior que zero.
- @NotNull: Não permitirá valores nulos para os campos restritos.
- @Id: É utilizada para informar ao JPA qual campo/atributo de uma entidade estará relacionado à chave primária da respectiva tabela no banco de dados.
- @GeneratedValue(strategy = GenerationType.IDENTITY): Utilizada para iformartar ao JPA que este campo será do tipo autoincremental.
- @Column(nullable = false): ele aplicará a restrição not null à coluna do banco de dados em particular.
- @Mapper: marca a interface como interface de mapeamento e permite que o processador MapStruct entre em ação durante a compilação.
- @Service: Marcamos beans com @Service para indicar que eles estão mantendo a lógica de negócios. Além de ser utilizada na camada de serviço, não há outro uso especial para esta anotação.
- @Mock: cria uma implementação simulada para as classes que você precisa.
- @InjectMock: cria uma instância da classe e injeta as simulações marcadas com as anotações
- @Test: para marcar um método como um método de teste.
- O padrão convencionado de nomes para a criação de novas branchs é feature/assunto_atividade.
- Novas branchs serão criadas sempre a partir da master.