package me.kavin.piped.utils; import me.kavin.piped.utils.obj.db.*; import org.hibernate.FlushMode; import org.hibernate.Session; import javax.persistence.criteria.CriteriaBuilder; import javax.persistence.criteria.CriteriaQuery; import javax.persistence.criteria.JoinType; import javax.persistence.criteria.Root; import java.util.List; import java.util.UUID; public class DatabaseHelper { public static User getUserFromSession(String session) { try (Session s = DatabaseSessionFactory.createSession()) { s.setHibernateFlushMode(FlushMode.MANUAL); CriteriaBuilder cb = s.getCriteriaBuilder(); CriteriaQuery cr = cb.createQuery(User.class); Root root = cr.from(User.class); cr.select(root).where(cb.equal(root.get("sessionId"), session)); return s.createQuery(cr).uniqueResult(); } } public static User getUserFromSessionWithSubscribed(String session) { try (Session s = DatabaseSessionFactory.createSession()) { s.setHibernateFlushMode(FlushMode.MANUAL); CriteriaBuilder cb = s.getCriteriaBuilder(); CriteriaQuery cr = cb.createQuery(User.class); Root root = cr.from(User.class); root.fetch("subscribed_ids", JoinType.LEFT); cr.select(root).where(cb.equal(root.get("sessionId"), session)); return s.createQuery(cr).uniqueResult(); } } public static Channel getChannelFromId(Session s, String id) { CriteriaBuilder cb = s.getCriteriaBuilder(); CriteriaQuery cr = cb.createQuery(Channel.class); Root root = cr.from(Channel.class); cr.select(root).where(cb.equal(root.get("uploader_id"), id)); return s.createQuery(cr).uniqueResult(); } public static List getChannelsFromIds(Session s, List id) { CriteriaBuilder cb = s.getCriteriaBuilder(); CriteriaQuery cr = cb.createQuery(Channel.class); Root root = cr.from(Channel.class); cr.select(root).where(root.get("uploader_id").in(id)); return s.createQuery(cr).list(); } public static Video getVideoFromId(Session s, String id) { CriteriaBuilder cb = s.getCriteriaBuilder(); CriteriaQuery