Este projeto Java tem como objetivo criar um sistema de controle de chamados, incorporando classes para técnicos, categorias de chamado e outras entidades, com ênfase em funcionalidades avançadas que aprimoram o sistema.
Este projeto tem como objetivo criar um sistema de controle de chamados em Java, abordando as principais entidades como Chamados, Técnicos e Categorias de Chamado. O sistema fornece uma estrutura organizada para gerenciar e manipular informações relacionadas aos chamados de forma eficiente.
Seguem algumas configurações sugeridas:
1. Dependências (pom.xml
)
2. application.properties
spring.jpa.open-in-view=false
spring.datasource.username=root
spring.datasource.password=12345678
spring.jpa.hibernate.ddl-auto=update
spring.datasource.url=jdbc:mysql://localhost:3306/chamados?createDatabaseIfNotExist=true
A diagramação a seguir apresenta a estrutura dos principais componentes do sistema, incluindo principalmente as entidades.
classDiagram
class Tecnico {
-Long id
-String nome
-String email
-LocalDate criacaoCadastro
-Especialidade especialidade
+Tecnico()
+getters()
+setters()
}
class CategoriaDeChamado {
-Long id
-String nome
-String senha
-String descricao
+CategoriaDeChamado()
+getters()
+setters()
}
class Chamado {
-Long id
-String titulo
-String descricao
-Status status
-Prioridade prioridade
-LocalDateTime dataAbertura
-LocalDateTime dataFechamento
-Tecnico tecnico
-CategoriaDeChamado categoria
+Chamado()
+getters()
+setters()
}
class Especialidade {
<<enumeration>>
FRONTEND
BACKEND
FULLSTACK
DBA
DEVOPS
}
class Prioridade {
<<enumeration>>
BAIXA
MEDIA
ALTA
URGENTE
}
class Status {
<<enumeration>>
ABERTO
EM_ANDAMENTO
FECHADO
}
Tecnico "1" <-- "0..*" Chamado
CategoriaDeChamado "1" <-- "0..*" Chamado
Especialidade <|-- Tecnico
Prioridade <|-- Chamado
Status <|-- Chamado
A estrutura do projeto é organizada para promover uma arquitetura clara e modular. Embora essa estrutura seja sugerida para facilitar a organização e a manutenção do código, não é obrigatório segui-la rigorosamente. Sinta-se à vontade para adaptá-la de acordo com suas necessidades e preferências.
src/main/java/com/group/demo
├── controller
│ ├── CategoriaDeChamadoController.java
│ ├── ChamadoController.java
│ └── TecnicoController.java
├── dto
│ ├── entrada
│ │ ├── CategoriaDeChamadoEntradaDTO.java
│ │ ├── ChamadoEntradaDTO.java
│ │ └── TecnicoEntradaDTO.java
│ └── saida
│ ├── detalhe
│ │ ├── CategoriaDeChamadoDetalheSaidaDTO.java
│ │ ├── ChamadoDetalheSaidaDTO.java
│ │ └── TecnicoDetalheSaidaDTO.java
│ └── resumo
│ ├── CategoriaDeChamadoResumoSaidaDTO.java
│ ├── ChamadoResumoSaidaDTO.java
│ └── TecnicoResumoSaidaDTO.java
├── enums
│ ├── Especialidade.java
│ ├── Prioridade.java
│ └── Status.java
├── model
│ ├── entity
│ │ ├── CategoriaDeChamado.java
│ │ ├── Chamado.java
│ │ └── Tecnico.java
│ └── repository
│ ├── CategoriaDeChamadoRepository.java
│ ├── ChamadoRepository.java
│ └── TecnicoRepository.java
├── service
│ ├── CategoriaDeChamadoService.java
│ ├── ChamadoService.java
│ └── TecnicoService.java
└── DemoApplication.java
Utilize anotações JPA para implementar restrições de validação automática nos atributos das entidades. Elas ajudarão a garantir que os dados sejam validados e armazenados corretamente, mantendo a integridade e a qualidade dos dados no sistema.
[!TIP]
Essas anotações podem ser encontradas no arquivo jakarta.validation.constraints.md.
[!WARNING]
Não esqueça de usar a anotação
@Valid
nos parâmetros das controllers para que a validação funcione corretamente.
Para garantir a organização e clareza na manipulação dos dados, o sistema utiliza três tipos de DTOs:
DTO de Entrada (exemplo: ItemEntradaDTO
): “Para a entrada de dados na API” - Este DTO é utilizado para a criação ou atualização de itens no sistema. Ele contém todos os atributos necessários, exceto o ID. Exemplo de uso: ao enviar dados para criar um novo chamado, um técnico ou uma categoria de chamado.
DTO de Saída - Resumo (exemplo: ItemResumoSaidaDTO
): “Para a saída de dados na API” - Utilizado para retornar uma lista de itens com informações resumidas. Este DTO contém apenas os atributos principais, necessários para exibir uma visão geral em listagens. Exemplo de uso: retorno de uma lista de todos os chamados, técnicos ou categorias de chamado.
DTO de Saída - Detalhe (exemplo: ItemDetalheSaidaDTO
): “Para a saída de dados na API” - Utilizado para retornar os detalhes completos de um item específico. Este DTO é utilizado quando se deseja visualizar ou manipular um item com profundidade, geralmente em endpoints que retornam um único item por ID. Exemplo de uso: retorno dos detalhes completos de um chamado específico, técnico ou categoria de chamado.
Resumo
- Entrada de Dados: Utilize o
ItemEntradaDTO
para enviar dados ao sistema, com todos os atributos necessários.- Saída de Dados:
- Para listagens, utilize o
ItemResumoSaidaDTO
, que retorna uma visão geral dos itens.- Para detalhamentos, utilize o
ItemDetalheSaidaDTO
, que retorna todas as informações detalhadas de um item específico.
[!WARNING]
Os DTOs de saída devem ser cuidadosamente planejados e modelados conforme a necessidade de cada caso, assegurando que informações sensíveis, como dados de autenticação ou senhas, sejam excluídas para evitar exposição indevida.
A seguir estão os endpoints e métodos HTTP disponíveis para cada entidade no sistema, juntamente com os tipos de DTOs que eles recebem e retornam:
Categoria de Chamado
CategoriaDeChamadoEntradaDTO
e retorna o objeto criado usando CategoriaDeChamadoDetalheSaidaDTO
.Iterable
de CategoriaDeChamadoResumoSaidaDTO
.CategoriaDeChamadoDetalheSaidaDTO
.CategoriaDeChamadoEntradaDTO
e retorna o objeto atualizado usando CategoriaDeChamadoDetalheSaidaDTO
.CategoriaDeChamadoDetalheSaidaDTO
.Chamado
ChamadoEntradaDTO
e retorna o objeto criado usando ChamadoDetalheSaidaDTO
.Iterable
de ChamadoResumoSaidaDTO
.ChamadoDetalheSaidaDTO
.ChamadoEntradaDTO
e retorna o objeto atualizado usando ChamadoDetalheSaidaDTO
.ChamadoDetalheSaidaDTO
.Técnico
TecnicoEntradaDTO
e retorna o objeto criado usando TecnicoDetalheSaidaDTO
.Iterable
de TecnicoResumoSaidaDTO
.TecnicoDetalheSaidaDTO
.TecnicoEntradaDTO
e retorna o objeto atualizado usando TecnicoDetalheSaidaDTO
.TecnicoDetalheSaidaDTO
.