1
resposta

Como fazer o histórico de uma pesquisa?

Olá! Estou tentando aplicar os conhecimentos do curso em uma api de noticias, e quero fazer um inventário de pesquisa por usuário, eu fiz uma api que consome uma outra api. Tem como fazer esse histórico dinâmico relacionando etiqueta e usuario na pesquisa da api externa?

Comecei fazendo assim:

@Entity
public class Historico {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private LocalDate dataConsulta;

    @OneToOne
    private Usuario usuario;

    @OneToOne
    private Etiqueta etiqueta;

    public Historico() {};

    public Historico(LocalDate dataConsulta, Usuario usuario, Etiqueta etiqueta) {
        this.dataConsulta = dataConsulta;
        this.usuario = usuario;
        this.etiqueta = etiqueta;
    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public LocalDate getDataConsulta() {
        return dataConsulta;
    }

    public void setDataConsulta(LocalDate dataConsulta) {
        this.dataConsulta = dataConsulta;
    }

    public Usuario getUsuario() {
        return usuario;
    }

    public void setUsuario(Usuario usuario) {
        this.usuario = usuario;
    }

    public Etiqueta getEtiqueta() {
        return etiqueta;
    }

    public void setEtiqueta(Etiqueta etiqueta) {
        this.etiqueta = etiqueta;
    }
}

O service:

@Service
public class HistoricoService {

    @Autowired
    private HistoricoRepository historicoRepository;


    public Historico salvar(Historico historico) {
        return historicoRepository.save(historico);
    }


}

O controller:

@RestController
@RequestMapping("/noticias")
public class HistoricoController {

    @Autowired
    private NoticiasService noticiasService;

    @Autowired
    private HistoricoService historicoService;

    @GetMapping("/noticias/{usuarioDto}/{etiqueta}")
    public ResponseEntity<Historico> getHistorico(@PathVariable UsuarioDto usuarioDto, @PathVariable Etiqueta etiqueta) {
        var noticiasEncontradas = noticiasService.consultarNoticia(usuarioDto.getNome(), etiqueta.getDescricao());
        var salvarNoticiaEncontrada = historicoService.salvar(noticiasEncontradas);
        return ResponseEntity.status(HttpStatus.OK).body(salvarNoticiaEncontrada);
    }
}
1 resposta

Olá Samantha, tudo bem?

Pelo que entendi, você está tentando criar um histórico de pesquisa para usuários em uma API de notícias. Sua implementação inicial está correta, mas há alguns pontos que precisam ser ajustados.

Primeiramente, na classe HistoricoController, você está tentando salvar uma lista de notícias encontradas, mas a entidade Historico só permite salvar uma única etiqueta por vez. Para corrigir isso, sugiro que você altere o método salvar na classe HistoricoService para receber uma lista de etiquetas e iterar sobre ela, salvando um novo registro de histórico para cada etiqueta.

Além disso, no método getHistorico da classe HistoricoController, você está tentando passar um objeto do tipo Noticias para o método salvar da classe HistoricoService, mas o correto seria passar um objeto do tipo Historico.

Por fim, sugiro que você faça uma validação para verificar se o usuário informado na URL é válido antes de salvar o registro de histórico.

Espero ter ajudado e bons estudos!