almir-soulcode / helpr-jfs5 Goto Github PK
View Code? Open in Web Editor NEWAplicação backend para pôr em prática os conceitos essenciais do framework Spring com REST API e boas práticas
Aplicação backend para pôr em prática os conceitos essenciais do framework Spring com REST API e boas práticas
Adicionar 10 novos usuários:
Adicionar 5 chamados:
O DTO possui as mesmas propriedades da entidade com algumas validações:
Há um problema com o método atualizar chamado, quando tentamos atualizar o status para RECEBIDO não deveríamos ser obrigados a passar o id de um funcionário, apenas quando o status for ATRIBUIDO/CONCLUIDO. Refatore o método de tal forma que esta inconsistência não ocorra mais.
Um futuro candidato não é um usuário da aplicação, mas sim representa as solicitações públicas para fazer parte do time do HELPR.
A entidade possui as seguintes informações:
O Repository precisa ter os seguintes filtros:
Os comentários podem ser enriquecedores, porém a longo prazo podem ficar desatualizados ou desinformar os desenvolvedores. Também é pertinente remover alguns códigos avulsos de testes espalhados no projeto.
O controller deve expôr os seguintes endpoints para futuro cliente:
Com base nas implementações de #40, gerenciar o erro de DataIntegrityException
que ocorre quando tentamos apagar dados com relacionamentos como por exemplo um cargo de um funcionário da aplicação. A resposta no Postman deve ser:
{
"message": "Não foi possível continuar operação",
"status": 409,
"timestamp": "2022-11-25T15:47:19.4079384",
"path": "/cargos/1"
}
Dica: Testar apagar algum cargo ou funcionário com chamados.
Referências:
Códigos HTTP
Implementações da task 40
Com base no artigo, aplicar a documentação de API com base no Swagger.
Observação 1: Leia atentamente o artigo e aplique apenas as configurações necessárias.
Observação 2: Atente-se para a segurança da nossa aplicação, pois apenas alguns endpoints são públicos (/auth/**).
Leitura adicional (Português): https://www.treinaweb.com.br/blog/documentando-uma-api-spring-boot-com-o-swagger/
spring.h2.console.enabled=true
spring.h2.console.path=/h2-console
spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.username=sa
spring.datasource.password=
spring.datasource.driver-class-name=org.h2.Driver
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.format_sql=true
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>runtime</scope>
</dependency>
spring.profiles.active=test
para verificar se o H2 está funcionando normalmente. Voltar para o ambiente dev padrão após a verificação.O serviço de usuário deve expôr as seguintes operações:
O controller deve expôr os seguintes endpoints:
Um futuro cliente é uma pessoa que possui interesse em contratar os serviços da equipe do HELPR. A solicitação de futuro cliente é pública mesmo para usuários não logados.
A entidade possui as seguintes propriedades:
O Repository precisa ter os seguintes filtros:
O serviço de futuro cliente deve expôr as seguintes operações:
Reajustar as funcionalidades para que ao salvar/atualizar um usuário a senha seja salva corretamente.
O DTO de FuturoCandidato possui as mesmas propriedades:
O serviço de colaborador deve expôr as seguintes operações:
Há um limite de chamados atribuídos (não concluídos) que um funcionário pode receber por vez, este limite deve ser um atributo inteiro estático de ChamadoService. Sempre antes de atribuir um chamado a um funcionário, verificar quantos chamados atribuídos ele possui, caso já esteja no limite, a operação não poderá continuar.
Obs: Esta task deverá gerar um erro customizado, portanto crie-o e gerencie na classe ResourceExceptionHandler.
Por mais que o DTO envie um novo cpf ou email, essas duas informações não podem ser alteradas. Tratar os métodos de atualizar cliente e funcionário para que preservem o cpf e o email originais do usuário.
Adicionar uma nova coluna na entidade de Cargo conforme o código SQL abaixo:
limiteFuncionarios INTEGER NOT NULL DEFAULT 1
Sempre antes de adicionar um novo funcionário, checar quantos funcionários ocupam o cargo escolhido e se este já está no limite. Caso esteja no limite um erro deverá ser lançado.
Obs 1: Ao adicionar uma nova coluna na entidade, atualizar o construtor e colocar get/set para o campo.
Obs 2: O erro lançado deverá ser customizado e gerenciado no ResourceExceptionHandler.
Referências:
Attributes of @Column
Como usar countBy (Inglês)
Para realizar essa filtragem e saber qual é o usuário logado devemos usar o objeto Principal que podemos ver seu uso neste artigo. Para tal use os filtros necessários para listar apenas os chamados do cliente em particular. Esta funcionalidade deve funcionar para cliente e funcionário.
Observação 1: Esta funcionalidade precisa estar presente no UsuarioService e UsuarioController;
Observação 2: Sugerimos usar um endpoint como /usuarios/clientes/logado/chamados e /usuarios/funcionarios/logado/chamados.
Adicionar ao enum de StatusChamado
a constante ARQUIVADO. Esse status indica que o chamado está num estado de "Apagado do sistema", porém ele não será apagado de verdade.
Em seguida, verifique como o método de atualizar chamado irá se comportar com a adição desta nova opção, faça as alterações necessárias (ao arquivar um chamado não altera os dados já presentes no chamado).
Com base no método getChamado
de #14, refatore os outros métodos em CargoService, ClienteService e FuncionarioService:
public Chamado getChamado(Integer idChamado) {
// Caso não encontre o chamado, lança a exceção.
return this.chamadoRepository.findById(idChamado)
.orElseThrow(() -> new RecursoNaoEncontradoError("Chamado não encontrado"));
}
O controller deve expôr os seguintes endpoints para futuro candidato:
Sempre ao atualizarmos os usuários, somos obrigados a passar uma senha nova, no entanto, isto é impraticável para uma aplicação em larga escala. Desabilite o @notblank do UsuarioDTO, porém ao salvar um novo usuário é imprescindível verificar a nulidade da senha.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.