Como o instrutor não fez o update e o delete, para ficar completão eu fiz e vou disponibilizar, vlw ``` public interface FuncionarioService { public Funcionario alterar(String id, Funcionario funcionario); public void deletar(String id); } ``` OBS. Eu implementei uma exception que a utilizei para caso não encontre o id do funcionário ``` public class FuncionarioNotFoundException extends RuntimeException{ public FuncionarioNotFoundException(String id){ super("Funcionário com ID " + id + " não encontrado."); } } ``` ``` @Service public class FuncionarioServiceImpl implements FuncionarioService { @Override public Funcionario alterar(String id, Funcionario funcionario) { return funcionarioRepository.findById(id) .map(existingFuncionario -> { funcionario.setId(id); return funcionarioRepository.save(funcionario); }) .orElseThrow(() -> new FuncionarioNotFoundException(id)); } @Override public void deletar(String id) { funcionarioRepository.findById(id).ifPresentOrElse( funcionario -> funcionarioRepository.deleteById(id), () -> { throw new FuncionarioNotFoundException(id); }); } } ``` ``` public class FuncionarioController { @PutMapping("/{id}") public Funcionario alterarFuncionarioPorId(@PathVariable String id, @RequestBody Funcionario funcionario){ return funcionarioService.alterar(id, funcionario); } @DeleteMapping("/{id}") public void deletarFuncionarioPorId(@PathVariable String id){ funcionarioService.deletar(id); } } ``` Agora está completão a API. Pra quem quiser eu add a query abaixo para buscar nomes com as iniciais especificadas, independentemente de estarem em maiúsculas ou minúsculas: @Query("{'nome': {$regex : ?0, $options: 'i'}}") public List findByNome(String nome);
Muito bom Willian, vc poderia criar uma aplicação de test para chamar uma api externa pegando o client oauth2, você explica muito bem, parabéns, Gratidão!!!
Olá não to conseguindo fazer com que minha aplicação se conecte ao mongodb, ela informa um erro na URL que ele não a encontra. Por favor onde posso tirar as minhas duvidas?
Quando eu envio um objecto "Funcionario" para API, ela näo me retorna o novo Funcionario criado mesmo com a notacao @RequestBody no Metodo, fiz uma consulta dentro do proprio MongoDB através 3T e lá ele cria um registro diferente, apenas com 2 campos ID e Class Funcionario e esse classe funcionário nöao é um JSON com os atributos que compoem a propria classe Funcionario. Que estranho, até agora nao entendi o porque disso.
Verificou se os getters e setters da sua classe funcionario estao ok? Voce esta utilizando lombok conforme o video ? Se sim Verifique se a anotação @Data esta presente na sua classe Funcionario. Abraços
Olá @@amonlara1350, eu estou usando sim a dependência lombok e a Classe tem anotação @Data sim. mas sinceramente agora aqui também pensando, só poderia mesmo ser isso. Assim que eu voltar a mexer nesse projeto, vou rever isso, muito Obrigado.
Bom dia. Muito boa a vídeo-aula. Porém, estou tendo dificuldade com relação aos imports: por exemplo, o STS4 não está reconhecendo "import org.springframework.data.mongodb.repository.MongoRepository". Eu adicionei os 4 starters. Alguma dica? Muito obrigado.
Como vai William, gostei muito deste curso... Olhei o curso todo e agora vou procurar colocar em prática usando o Spring tool suite e os frameworks que vc descreveu... Se eu tiver dúvidas, vou perguntar, ok? Eu já fiz outro curso da Algaworks e gostei também...
Uma dúvida com relação ao editar. No caso se eu precisasse criar um endpoint do tipo Put, e quisesse alterar somente um valor da classe chefe, como por exemplo o salario dele. Eu teria que enviar todos os dados de funcionario e do chefe pra editar um atributo? Ou se eu enviar somente o salario do chefe modificado ele entenderia e alteraria no documento do Mongo? Pergunto isso pq estou iniciando no NoSql e estou sentindo bastante difirença do SQL hehe.
Parabéns, muito didático e útil esse conteúdo.
Ótima aula, muito obrigado!
Excelente!
Como o instrutor não fez o update e o delete, para ficar completão eu fiz e vou disponibilizar, vlw
```
public interface FuncionarioService {
public Funcionario alterar(String id, Funcionario funcionario);
public void deletar(String id);
}
```
OBS. Eu implementei uma exception que a utilizei para caso não encontre o id do funcionário
```
public class FuncionarioNotFoundException extends RuntimeException{
public FuncionarioNotFoundException(String id){
super("Funcionário com ID " + id + " não encontrado.");
}
}
```
```
@Service
public class FuncionarioServiceImpl implements FuncionarioService {
@Override
public Funcionario alterar(String id, Funcionario funcionario) {
return funcionarioRepository.findById(id)
.map(existingFuncionario -> {
funcionario.setId(id);
return funcionarioRepository.save(funcionario);
})
.orElseThrow(() -> new FuncionarioNotFoundException(id));
}
@Override
public void deletar(String id) {
funcionarioRepository.findById(id).ifPresentOrElse(
funcionario -> funcionarioRepository.deleteById(id),
() -> {
throw new FuncionarioNotFoundException(id);
});
}
}
```
```
public class FuncionarioController {
@PutMapping("/{id}")
public Funcionario alterarFuncionarioPorId(@PathVariable String id, @RequestBody Funcionario funcionario){
return funcionarioService.alterar(id, funcionario);
}
@DeleteMapping("/{id}")
public void deletarFuncionarioPorId(@PathVariable String id){
funcionarioService.deletar(id);
}
}
```
Agora está completão a API.
Pra quem quiser eu add a query abaixo para buscar nomes com as iniciais especificadas, independentemente de estarem em maiúsculas ou minúsculas:
@Query("{'nome': {$regex : ?0, $options: 'i'}}")
public List findByNome(String nome);
Mandou muito, obrigado!
Conteúdo muito bom!
Muito boa explicação William. Parabéns. Eu não conhecia MongoDB. Facilitou muito meu entendimento!
Muito bom Willian, vc poderia criar uma aplicação de test para chamar uma api externa pegando o client oauth2, você explica muito bem, parabéns, Gratidão!!!
Olá Elias, temos isso na nossa aula sobre spring authorization server
Parabéns pelo excelente conteúdo!!!
Poxa, muito obrigado mesmo João Paulo!
Muito bom!! Salvou minha vida, muito obrigada.
Muito bom o seu video. Direto, objetivo e com informações relevantes.
Já sentei o dedo no like
Irmao, parabens pelo conteudo!
Olá não to conseguindo fazer com que minha aplicação se conecte ao mongodb, ela informa um erro na URL que ele não a encontra. Por favor onde posso tirar as minhas duvidas?
Muito bom, ficou totalmente transparente, até parece a utilização de um banco relacional com poucas alterações.
Resolvido.
Como tratar performance de n+1 usando essa lib?
Excelente material, expressado de uma forma muito didática! Parabéns ao instrutor!
Excelente vídeo, direto ao ponto e bem explicado, parabéns
AlgaWorks sempre mostrando uma coisa dificil se tornar fácil alem de explicar os conceitos muito BOM, PARABENS
Já cheguei sentando o like!!
Estou louco pela por ter uma bolsa de estudos na AlgaWorks srsr.
Poxa, valeu de mais Paulo! Logo logo nos vemos nos cursos :D
💯👏👏👏👏👏
Excelente abordagem do Spring com o MongoDB, Will! Agora é sair da zona de conforto dos SQL pro NoSQL heheje Da hora!
Poxa, muito obrigado mesmo!!! Isso ai, agora é treinar e inovar nos projetos :D
Como ficaria a query se fosse buscar por nome ?
Quando eu envio um objecto "Funcionario" para API, ela näo me retorna o novo Funcionario criado mesmo com a notacao @RequestBody no Metodo, fiz uma consulta dentro do proprio MongoDB através 3T e lá ele cria um registro diferente, apenas com 2 campos ID e Class Funcionario e esse classe funcionário nöao é um JSON com os atributos que compoem a propria classe Funcionario. Que estranho, até agora nao entendi o porque disso.
Verificou se os getters e setters da sua classe funcionario estao ok? Voce esta utilizando lombok conforme o video ? Se sim Verifique se a anotação @Data esta presente na sua classe Funcionario. Abraços
Olá @@amonlara1350, eu estou usando sim a dependência lombok e a Classe tem anotação @Data sim. mas sinceramente agora aqui também pensando, só poderia mesmo ser isso. Assim que eu voltar a mexer nesse projeto, vou rever isso, muito Obrigado.
Aqui tb deu o mesmo erro.. estudando sobre lombok parace que a comunidade nao recomenda. O melhor mesmo é usar o jeito antigo que funciona.
Opa, muito bom vídeo, você tem esse projeto pra clonar o repositório e deixar aqui pra estudo?
Bom dia. Muito boa a vídeo-aula. Porém, estou tendo dificuldade com relação aos imports: por exemplo, o STS4 não está reconhecendo "import org.springframework.data.mongodb.repository.MongoRepository". Eu adicionei os 4 starters. Alguma dica? Muito obrigado.
Como vai William, gostei muito deste curso...
Olhei o curso todo e agora vou procurar colocar em prática usando o Spring tool suite e os frameworks que vc descreveu...
Se eu tiver dúvidas, vou perguntar, ok?
Eu já fiz outro curso da Algaworks e gostei também...
Boa didática. Teria mais algum material, vídeo ou curso referente MongoDB com Spring Data? Teria material aprofundando-se sobre consultas?
Muito bom. Fiquei com uma dúvida no Lombok. Você usa a anotação @Data, não precisa especificar qual é a chave do Equals e Hashcode?
Olá Danilo!
Para esse exemplo não adicionei, pela simplicidade do mesmo. Mas é sempre uma boa prática especificá-los sim.
Daria pra mesclar sem problemas um projeto com NoSQL e SQL?
Olá Patrick!
Com certeza, dá pra mesclar sim.
Estou tendo problemas com o findById, alguem mais está tendo esse problema?
se alguem passar por aqui, provavelmente voce colou outro tipo no repository diferente de string.
@@FelipeVieira39 ele deve ter colocado Long mesmo, a id do Mongo tem que ser String. É um Hash e não um autoincremento como em banco relacionais...
Faz com Webflux.
Olá Denilson! Já está anotado a sugestão
Uma dúvida com relação ao editar. No caso se eu precisasse criar um endpoint do tipo Put, e quisesse alterar somente um valor da classe chefe, como por exemplo o salario dele. Eu teria que enviar todos os dados de funcionario e do chefe pra editar um atributo? Ou se eu enviar somente o salario do chefe modificado ele entenderia e alteraria no documento do Mongo? Pergunto isso pq estou iniciando no NoSql e estou sentindo bastante difirença do SQL hehe.
Excelente, muito foda.