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

Porque usar o record ??

Eu fiz um projeto simples há algum tempo e não conhecia DTO/record naquela época. No entanto, gostaria de saber se a abordagem que utilizei estava incorreta ou menos segura do que se tivesse utilizado DTO/record. Também gostaria de saber como poderia implementar DTO/record neste exemplo abaixo e como seria o código resultante.

Além disso, gostaria de saber também como usar a arquitetura do tipo repository e model com o record.

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

@RestController
@RequestMapping("/users")
public class LivrosController {
@Autowired
private UserRepository userRepository;
    @GetMapping("/1")
    public String olaMundo(){
        return "hello world ";
    }

    @GetMapping("/{id}")
    public User getLivros(@PathVariable("id") Long id) {
        System.out.println("O id é " + id);
        Optional<User> userFind = this.userRepository.findById(id);
        if (userFind.isPresent()) {
            return userFind.get();
        }
        return null;
    }
    @PostMapping("/")
    public User user(@RequestBody User user){
        System.out.println(user.getId());
       return this.userRepository.save(user);
    }
    @GetMapping("/Lista")
    public List<User> lista(){
        return this.userRepository.findAll();
    }
    @GetMapping("/lista/{id}")
    public List<User> listMoreThan(@PathVariable("id") Long id){
        return this.userRepository.findByIdGreaterThan(id);
    }
    @GetMapping("/findByName/{name}")
    public List<User> findByName(@PathVariable("name") String name){
        return this.userRepository.findByNameIgnoreCase(name);
    }
}
package com.apiTestePrimeiro.apiTestePrimeiro.model;

import jakarta.persistence.*;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import org.springframework.web.bind.annotation.RequestMapping;

@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
@Entity
@Table
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private long id;
    @Column(name = "nome")
    private String name;
    private String username;


}
package com.apiTestePrimeiro.apiTestePrimeiro.repository;

import com.apiTestePrimeiro.apiTestePrimeiro.model.User;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;

import java.util.List;

public interface UserRepository extends JpaRepository<User, Long> {
    //no exemplo a baixo usamos a possibilidade de inserir uma query da nossa preferencia
    @Query("SELECT u from User u where u.id > :id")
    public List<User> findAllMoreAThan(@Param("id") Long id);

    //no exemplo a baixo usamos uma palavra reservada proria do spring data, que tem o mesmo funcionamento do exemplo acima
    public List<User> findByIdGreaterThan(Long id);
    public List<User> findByNameIgnoreCase(String name);
}
1 resposta
solução!

Oi!

No seu projeto você está recebendo e devolvendo objetos do tipo User no controller, não utilizando uma classe/record DTO. Porém, User é uma entidade JPA e não é uma boa prática devolver entidades JPA nos controllers ;)

Embora seja muito mais simples e fácil usar as entidades JPA diretamente nos controller, tem diversas desvantagens ao se fazer isso.

Aqui nesse tópico eu explico melhor: https://cursos.alura.com.br/forum/topico-duvida-sobre-classes-dto-162937

Bons estudos!