Esse projeto foi desenvolvido com o intuito de práticar meus conhecimentos utilizando a linguagem Java. A Aplicação foi desenvolvida utilizando no backend Java JDK 17, Maven, Spring Boot, Hibernate para criação da API e banco de dados H2. O frontend foi utilizado o framework Angular e linguagem Typescript juntamente com CSS para estilização.
Aqui você vai encontrar os detalhes de como foi o desenvolvimento do projeto e quais foram os requisitos técnicos necessários para a entrega do desafio.
Aplicação Fullstack onde é possível realizar Cadastros, Atualizações, Leitura e Remoção de Clientes e Técnicos em uma plataforma Helpdesk e também criação de Chamados, Atualização e Visualização.
Neste projeto, fui capaz de:
- Utilizar o banco de dados relacional H2 e MySQL;
- Utilizar o ORM Hibernate para trabalhar com o banco de dados H2 e MySQL;
- Construir uma API CRUD com Spring Boot, utilização de conceitos de Arquitetura de Software e regras de negócio;
- Criar rotas para uma API com Hibernate;
- Desenvolver um frontend utilizando Typescript e Angular;
- Estilizar páginas Web com CSS;
- Utilizar docker para criação de ambiente de Desenvolvimento;
Para iniciar o projeto, é necessário possuir o Docker instalado.
⚠ Atenção: ⚠
- Todos os seguintes comandos devem ser realizados na RAIZ DO PROJETO.
Utilizando o docker
docker-compose up
Após isso, você pode acessar a aplicação através do endereço http://localhost:80/.
WhatsApp.Video.2023-03-23.at.18.19.53.mp4
Método | Funcionalidade | URL |
---|---|---|
GET |
Busca todos os clientes cadastrados no banco de dados. | http://localhost:8080/clientes |
A resposta da requisição é a seguinte, com status 200:
[
{
"id": 6,
"nome": "Albert Einstein",
"cpf": "111.661.890-74",
"email": "[email protected]",
"senha": "a665a45920422f9d417e4867efdc4fb8a04a1f3fff1fa07e998e86f7f7a27ae3",
"perfis": [
"CLIENTE"
],
"dataCriacao": "23/03/2023"
},
{
"id": 7,
"nome": "Marie Curie",
"cpf": "322.429.140-06",
"email": "[email protected]",
"senha": "a665a45920422f9d417e4867efdc4fb8a04a1f3fff1fa07e998e86f7f7a27ae3",
"perfis": [
"CLIENTE"
],
"dataCriacao": "23/03/2023"
},
{
"id": 8,
"nome": "Charles Darwin",
"cpf": "792.043.830-62",
"email": "[email protected]",
"senha": "a665a45920422f9d417e4867efdc4fb8a04a1f3fff1fa07e998e86f7f7a27ae3",
"perfis": [
"CLIENTE"
],
"dataCriacao": "23/03/2023"
},
{
"id": 9,
"nome": "Stephen Hawking",
"cpf": "177.409.680-30",
"email": "[email protected]",
"senha": "a665a45920422f9d417e4867efdc4fb8a04a1f3fff1fa07e998e86f7f7a27ae3",
"perfis": [
"CLIENTE"
],
"dataCriacao": "23/03/2023"
},
{
"id": 10,
"nome": "Max Planck",
"cpf": "081.399.300-83",
"email": "[email protected]",
"senha": "a665a45920422f9d417e4867efdc4fb8a04a1f3fff1fa07e998e86f7f7a27ae3",
"perfis": [
"CLIENTE"
],
"dataCriacao": "23/03/2023"
}
]
Método | Funcionalidade | URL |
---|---|---|
GET |
Busca um cliente pelo id no banco de dados. | http://localhost:8080/clientes/6 |
A resposta da requisição é a seguinte, com status 200:
{
"id": 6,
"nome": "Albert Einstein",
"cpf": "111.661.890-74",
"email": "[email protected]",
"senha": "a665a45920422f9d417e4867efdc4fb8a04a1f3fff1fa07e998e86f7f7a27ae3",
"perfis": [
"CLIENTE"
],
"dataCriacao": "23/03/2023"
}
Método | Funcionalidade | URL |
---|---|---|
PUT |
Rota de cadastrar um cliente no banco de dados. | http://localhost:8080/clientes |
A estrutura do body
da requisição deverá seguir o padrão abaixo:
{
"id": 1,
"nome": "Teste Create new clientes",
"cpf": "57689739156",
"email": "[email protected]",
"senha": "123",
"perfis": [1]
}
A resposta da requisição é o status 201.
Método | Funcionalidade | URL |
---|---|---|
UPDATE |
Atualizar informações sobre um cliente. | http://localhost:8080/clientes/7 |
A estrutura do body
da requisição deverá seguir o padrão abaixo:
{
"id": 6,
"nome": "Albert Ferreira",
"cpf": "111.661.890-74",
"email": "[email protected]",
"senha": "123",
"perfis": [1],
"dataCriacao": "23/03/2023"
}
A resposta da requisição é o status 200 com o código abaixo:
{
"id": 6,
"nome": "Albert Ferreira",
"cpf": "111.661.890-74",
"email": "[email protected]",
"senha": "a665a45920422f9d417e4867efdc4fb8a04a1f3fff1fa07e998e86f7f7a27ae3",
"perfis": [
"CLIENTE"
],
"dataCriacao": "23/03/2023"
}
Método | Funcionalidade | URL |
---|---|---|
DELETE |
Remove um cliente do banco de dados. | http://localhost:8080/tecnicos/4 |
A resposta da requisição é o status 204.
A requisição irá falhar nos seguintes casos:
- A mensagem'400 '
Cliente possui ordens de serviço e não pode ser deletado!
Método | Funcionalidade | URL |
---|---|---|
GET |
Busca todos os tecnicos cadastrados no banco de dados.. | http://localhost:8080/tecnicos |
A resposta da requisição é a seguinte, com status 200:
[
{
"id": 1,
"nome": "Kaio Oliveira",
"cpf": "67376263861",
"email": "[email protected]",
"senha": "a665a45920422f9d417e4867efdc4fb8a04a1f3fff1fa07e998e86f7f7a27ae3",
"perfis": [
"ADMIN"
],
"dataCriacao": "10/03/2023"
},
{
"id": 2,
"nome": "Richard Stallman",
"cpf": "903.347.070-56",
"email": "[email protected]",
"senha": "a665a45920422f9d417e4867efdc4fb8a04a1f3fff1fa07e998e86f7f7a27ae3",
"perfis": [
"CLIENTE"
],
"dataCriacao": "23/03/2023"
},
{
"id": 3,
"nome": "Claude Elwood Shannon",
"cpf": "271.068.470-54",
"email": "[email protected]",
"senha": "a665a45920422f9d417e4867efdc4fb8a04a1f3fff1fa07e998e86f7f7a27ae3",
"perfis": [
"CLIENTE"
],
"dataCriacao": "23/03/2023"
}
]
Método | Funcionalidade | URL |
---|---|---|
GET |
Busca um Técnico pelo id no banco de dados. | http://localhost:8080/tecnicos/1 |
A resposta da requisição é a seguinte, com status 200:
{
"id": 1,
"nome": "Kaio Oliveira",
"cpf": "67376263861",
"email": "[email protected]",
"senha": "a665a45920422f9d417e4867efdc4fb8a04a1f3fff1fa07e998e86f7f7a27ae3",
"perfis": [
"ADMIN"
],
"dataCriacao": "10/03/2023"
}
Método | Funcionalidade | URL |
---|---|---|
POST |
Rota de criação de novo técnico no banco de dados. | http://localhost:8080/tecnicos |
A estrutura do body
da requisição deverá seguir o padrão abaixo:
{
"id": 1,
"nome": "Teste Create new tecnico",
"cpf": "87844850604",
"email": "[email protected]",
"senha": "123",
"perfis": [0]
}
A resposta da requisição é o status 201.
Método | Funcionalidade | URL |
---|---|---|
UPDATE |
Atualizar informações sobre um técnico. | http://localhost:8080/tecnicos/1 |
A estrutura do body
da requisição deverá seguir o padrão abaixo:
{
"id": 1,
"nome": "Kaio Ruan",
"cpf": "67376263861",
"email": "[email protected]",
"senha": "123",
"perfis": [0],
"dataCriacao": "10/03/2023"
}
A resposta da requisição é o status 200 com o código abaixo:
{
"id": 1,
"nome": "Kaio Ruan",
"cpf": "67376263861",
"email": "[email protected]",
"senha": "a665a45920422f9d417e4867efdc4fb8a04a1f3fff1fa07e998e86f7f7a27ae3",
"perfis": [
"ADMIN"
],
"dataCriacao": "10/03/2023"
}
Método | Funcionalidade | URL |
---|---|---|
DELETE |
Remove um técnico do banco de dados. | http://localhost:8080/tecnicos/12 |
A resposta da requisição é o status 204.
A requisição irá falhar nos seguintes casos:
- A mensagem'400 '
Tecnico possui ordens de serviço e não pode ser deletado!
Método | Funcionalidade | URL |
---|---|---|
GET |
Busca todos os chamados cadastrados no banco de dados. | http://localhost:8080/chamados |
A resposta da requisição é a seguinte, com status 200:
[
{
"id": 1,
"dataAbertura": "23/03/2023",
"dataFechamento": null,
"prioridade": 1,
"status": 1,
"titulo": "Chamado 1",
"observacoes": "Teste chamado 1",
"tecnico": 1,
"cliente": 6,
"nomeTecnico": "Kaio Ruan",
"nomeCliente": "Albert Ferreira"
},
{
"id": 2,
"dataAbertura": "23/03/2023",
"dataFechamento": null,
"prioridade": 2,
"status": 0,
"titulo": "Chamado 2",
"observacoes": "Teste chamado 2",
"tecnico": 1,
"cliente": 7,
"nomeTecnico": "Kaio Ruan",
"nomeCliente": "Marie Curie"
},
{
"id": 3,
"dataAbertura": "23/03/2023",
"dataFechamento": null,
"prioridade": 0,
"status": 2,
"titulo": "Chamado 3",
"observacoes": "Teste chamado 3",
"tecnico": 2,
"cliente": 8,
"nomeTecnico": "Richard Stallman",
"nomeCliente": "Charles Darwin"
},
{
"id": 4,
"dataAbertura": "23/03/2023",
"dataFechamento": null,
"prioridade": 2,
"status": 0,
"titulo": "Chamado 4",
"observacoes": "Teste chamado 4",
"tecnico": 3,
"cliente": 8,
"nomeTecnico": "Claude Elwood Shannon",
"nomeCliente": "Charles Darwin"
},
{
"id": 5,
"dataAbertura": "23/03/2023",
"dataFechamento": null,
"prioridade": 1,
"status": 1,
"titulo": "Chamado 5",
"observacoes": "Teste chamado 5",
"tecnico": 2,
"cliente": 6,
"nomeTecnico": "Richard Stallman",
"nomeCliente": "Albert Ferreira"
},
{
"id": 6,
"dataAbertura": "23/03/2023",
"dataFechamento": null,
"prioridade": 0,
"status": 2,
"titulo": "Chamado 7",
"observacoes": "Teste chamado 6",
"tecnico": 1,
"cliente": 10,
"nomeTecnico": "Kaio Ruan",
"nomeCliente": "Max Planck"
}
]
Método | Funcionalidade | URL |
---|---|---|
GET |
Busca um chamado pelo id no banco de dados. | http://localhost:8080/chamados/1 |
A resposta da requisição é a seguinte, com status 200:
{
"id": 1,
"dataAbertura": "23/03/2023",
"dataFechamento": null,
"prioridade": 1,
"status": 1,
"titulo": "Chamado 1",
"observacoes": "Teste chamado 1",
"tecnico": 1,
"cliente": 6,
"nomeTecnico": "Kaio Ruan",
"nomeCliente": "Albert Ferreira"
}
Método | Funcionalidade | URL |
---|---|---|
POST |
Rota de criação de novo chamado no banco de dados. | http://localhost:8080/chamados |
A estrutura do body
da requisição deverá seguir o padrão abaixo:
{
"prioridade": 1,
"status": 1,
"titulo": "Chamado teste create",
"observacoes": "Priomeiro teste create",
"tecnico": 1,
"cliente": 6
}
A resposta da requisição é o status 201.
Método | Funcionalidade | URL |
---|---|---|
UPDATE |
Atualizar informações sobre um chamado. | http://localhost:8080/chamados/2 |
A estrutura do body
da requisição deverá seguir o padrão abaixo:
{
"dataAbertura": "10/03/2023",
"prioridade": 1,
"status": 2,
"titulo": "Chamado 2teste PUT",
"observacoes": "Priomeiro 2 teste PUT",
"tecnico": 1,
"cliente": 6
}
A resposta da requisição é o status 200 com o código abaixo:
{
"id": 2,
"dataAbertura": "23/03/2023",
"dataFechamento": "23/03/2023",
"prioridade": 1,
"status": 2,
"titulo": "Chamado 2teste PUT",
"observacoes": "Priomeiro 2 teste PUT",
"tecnico": 1,
"cliente": 6,
"nomeTecnico": "Kaio Ruan",
"nomeCliente": "Albert Ferreira"
}