Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Erro após Refatorar e criar o pacote domain - APPLICATION FAILED TO START

Após mover os pacotes endereco, medico e paciente para dentro de domain, a aplicação parou de funcionar. Ao tentar executar a aplicação recebo o erro abaixo.

Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled.
2023-09-04T20:36:40.602-03:00 ERROR 3268 --- [  restartedMain] o.s.b.d.LoggingFailureAnalysisReporter   : 

***************************
APPLICATION FAILED TO START
***************************

Description:

The bean 'pacienteRepository', defined in med.voll.api.domain.paciente.PacienteRepository defined in @EnableJpaRepositories declared on JpaRepositoriesRegistrar.EnableJpaRepositoriesConfiguration, could not be registered. A bean with that name has already been defined in med.voll.api.paciente.PacienteRepository defined in @EnableJpaRepositories declared on JpaRepositoriesRegistrar.EnableJpaRepositoriesConfiguration and overriding is disabled.

Action:

Consider renaming one of the beans or enabling overriding by setting spring.main.allow-bean-definition-overriding=true


Process finished with exit code 0

Segue o código de Paciente Controller

package med.voll.api.controller;

import jakarta.transaction.Transactional;
import jakarta.validation.Valid;
import med.voll.api.domain.paciente.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.web.PageableDefault;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.util.UriComponentsBuilder;

@RestController
@RequestMapping("pacientes")
public class PacienteController {
    /*
    * Devolver void no retorno do metodo e um problema!
    * Ao usarmos o void, não informamos o que o Spring precisa devolver.
    *  Por isso, por padrão, ele retorna o código 200 OK, se a requisição for processada com sucesso.
    * Utilizaremos uma classe do Spring chamada ResponseEntity para começaremos a padronizar esses métodos
    *
    * */
    @Autowired
    private PacienteRepository repository;
    @PostMapping
    @Transactional
    public ResponseEntity cadastrar(@RequestBody @Valid DadosCadastroPaciente dados, UriComponentsBuilder uriBuilder) {
        var paciente = new Paciente(dados);
        repository.save(paciente);

        var uri = uriBuilder.path("/pacientes/{id}").buildAndExpand(paciente.getId()).toUri();
        return ResponseEntity.created(uri).body(new DadosDetalhamentoPaciente(paciente));
    }

    @GetMapping
    public ResponseEntity<Page<DadosListagemPaciente> >listar(@PageableDefault(sort ={"nome"}) Pageable paginacao){
        //return repository.findAll(paginacao).map(DadosListagemPaciente::new);
        var page = repository.findAllByAtivoTrue(paginacao).map(DadosListagemPaciente::new);
        return ResponseEntity.ok(page);
    }

    @PutMapping
    @Transactional
    public ResponseEntity atualizar(@RequestBody @Valid DadosAtualizacaoPaciente dados){
        var paciente = repository.getReferenceById(dados.id());
        //Criar metodo na classe Medico
        paciente.atualizarInformacoes(dados);
        // Não precisamos fazer a atualização no banco de dados, isso é automático da JPA.
        return ResponseEntity.ok(new DadosDetalhamentoPaciente(paciente));
    }
    @DeleteMapping("/{id}")
    @Transactional
    /*
     * Padronizacao do retorno do metodo
     * Valor inicial: public void remover(@PathVariable Long id)
     *
     * */
    public ResponseEntity remover(@PathVariable Long id){
        //O comando deleteById realiza uma exclusao fisica no banco de dados.
        //repository.deleteById(id);
        // Para deletar logicamente vamos:
        // Carregar a entidade do banco de dados
        var paciente = repository.getReferenceById(id); // recupera o medico do bd
        // Setar o campo ativo para 0
        paciente.inativar();
        //O return se torna obrigatorio por termos padronizado o retorno do metodo.
        //O noContent() cria um objeto e chamamos o build() para construir o objeto ResponseEntity.
        return ResponseEntity.noContent().build();
    }
    @GetMapping("/{id}")
    public ResponseEntity detalhar(@PathVariable Long id){
        var paciente = repository.getReferenceById(id); // recupera o medico do bd
        return ResponseEntity.ok(new DadosDetalhamentoPaciente(paciente));
    }
}
1 resposta
solução!

Erro resolvido executando os comandos abaixo, no terminal.

mvn clean mvn install