package io.budgetapp.dao;
import io.budgetapp.model.AuthToken;
import io.budgetapp.model.User;
import io.dropwizard.hibernate.AbstractDAO;
import org.hibernate.Criteria;
import org.hibernate.SessionFactory;
import org.hibernate.criterion.Restrictions;
import java.util.List;
import java.util.Optional;
import java.util.UUID;
/**
*
*/
public class AuthTokenDAO extends AbstractDAO<AuthToken> {
private final SessionFactory sessionFactory;
public AuthTokenDAO(SessionFactory sessionFactory) {
super(sessionFactory);
this.sessionFactory = sessionFactory;
}
public AuthToken add(User user) {
AuthToken authToken = new AuthToken();
authToken.setUser(user);
authToken.setToken(newToken());
return persist(authToken);
}
public Optional<AuthToken> find(String token) {
Criteria criteria = currentSession().createCriteria(AuthToken.class);
criteria.add(Restrictions.eq("token", token));
Optional<AuthToken> result = Optional.ofNullable(uniqueResult(criteria));
return result;
}
public List<AuthToken> findByUser(User user) {
Criteria criteria = currentSession().createCriteria(AuthToken.class);
criteria.add(Restrictions.eq("user", user));
return list(criteria);
}
private String newToken() {
return UUID.randomUUID().toString();
}
}