package in.abhi8290.helloworld.user; import in.abhi8290.helloworld.core.base.BaseService; import org.springframework.stereotype.Service; import java.util.Optional; @Servicepublic class UserService extends BaseService<User, String> { private final UserRepository userRepository; // Spring will inject this automatically public UserService(UserRepository userRepository) { this.userRepository = userRepository; } @Override protected UserRepository getRepository() { return userRepository; } public Optional<User> findByEmail(String email) { return Optional.ofNullable(userRepository.findByEmail(email)); } public boolean emailExists(String email) { return userRepository.existsByEmail(email); } }
Controller Class
package in.abhi8290.helloworld.user; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.web.bind.annotation.*; import java.util.List; import java.util.Optional; import in.abhi8290.helloworld.user.*; @RestController@RequestMapping("/users") public class UserController { private static final Logger logger = LoggerFactory.getLogger(UserController.class); private final UserService userService; // Spring will inject this for you public UserController(UserService userService) { this.userService = userService; } // GET all users @GetMapping public List<User> getAllUsers() { return userService.findAll(); } // GET user by email @GetMapping("/by-email") public Optional<User> getUserByEmail(@RequestParam String email) { return userService.findByEmail(email); } // POST create a user @PostMapping public User createUser(@RequestBody User user) { logger.info("Creating user with email: {}", user.getEmail()); return userService.save(user); } }
Repo Class
This is the most interesting
All we need to write a function called findByEmail and JPA will go and make write the query for us check this out JPA Repository