enunciados-exercicios-java

Exercício Java: Gerenciando chamados

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.

Voltar

Índice

1. Descrição

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.

2. Configurações

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

3. Principais Componentes

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

4. Estrutura do Projeto

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

5. Validações

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.

6. Entrada e Saída de Dados

Para garantir a organização e clareza na manipulação dos dados, o sistema utiliza três tipos de DTOs:

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

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

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

[!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.

7. Endpoints e Métodos HTTP

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

Chamado

Técnico

Voltar