Skip to content

kaioruan/helpdesk-java-angular

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Helpdesk : JAVA - ANGULAR

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.

Descrição:

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.

Habilidades desenvolvidas

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;

Funcionamento da aplicação

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/.


Clique na imagem para rodar um video demonstrativo.

WhatsApp.Video.2023-03-23.at.18.19.53.mp4

📚 Documentação (endpoints BACKEND)

👨🏻‍🦱 Clientes

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


👨🏻‍🦱 Buscar um Cliente

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


👨🏻‍🦱 Cadastrar um Cliente

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.

👨🏻‍🦱 Clientes

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

👨🏻‍🦱 Deletar um Cliente

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!

👨🏻‍🦱 Técnicos

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


👨🏻‍🦱 Buscar um Cliente

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


👨🏻‍🦱 Criar um novo Técnico

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.

👨🏻‍🦱 Atualizar Técnico

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

👨🏻‍🦱 Deletar um Técnico

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!

🗒️ Chamados

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


👨🏻‍🦱 Buscar um Chamado

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


🗒️ Criar um novo Chamado

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.

🗒️ Atualizar Chamado

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