package io.budgetapp.dao; import io.budgetapp.application.NotFoundException; import io.budgetapp.model.User; import io.budgetapp.model.form.SignUpForm; import io.dropwizard.hibernate.AbstractDAO; import org.hibernate.Criteria; import org.hibernate.SessionFactory; import org.hibernate.criterion.Restrictions; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.util.List; import java.util.Optional; /** * */ public class UserDAO extends AbstractDAO<User> { private static final Logger LOGGER = LoggerFactory.getLogger(UserDAO.class); public UserDAO(SessionFactory sessionFactory) { super(sessionFactory); } public User findById(Long userId) { User user = get(userId); if(user == null) { throw new NotFoundException(); } return user; } public User add(SignUpForm signUp) { LOGGER.debug("Add new user {}", signUp); User user = new User(); user.setUsername(signUp.getUsername()); user.setPassword(signUp.getPassword()); user = persist(user); return user; } public void update(User user) { LOGGER.debug("Update user {}", user); persist(user); } public Optional<User> findByUsername(String username) { Criteria criteria = currentSession().createCriteria(User.class); criteria.add(Restrictions.eq("username", username).ignoreCase()); List<User> users = list(criteria); if(users.size() == 1) { return Optional.of(users.get(0)); } else { return Optional.empty(); } } }