package me.moodcat.database.controllers; import static me.moodcat.database.entities.QRoom.room; import java.util.List; import javax.persistence.EntityManager; import javax.transaction.Transactional; import me.moodcat.database.embeddables.VAVector; import me.moodcat.database.entities.Room; import com.google.inject.Inject; /** * The DAO for rooms. */ public class RoomDAO extends AbstractDAO<Room> { @Inject public RoomDAO(final EntityManager entityManager) { super(entityManager); } /** * Find a room by id. * * @param id * the id of the room * @return the {@link Room} */ @Transactional public Room findById(final int id) { return ensureExists(this.query().from(room) .where(room.id.eq(id)) .singleResult(room)); } /** * Obtain all the rooms from the database. * * @return The list of all rooms. */ @Transactional public List<Room> listRooms() { return this.query().from(room).list(room); } /** * Obtain all the rooms from the database limited to lim. * * @param lim * The number of rooms to return. * @return The list of lim rooms. */ @Transactional public List<Room> listRooms(final int lim) { return this.query().from(room).limit(lim).list(room); } /** * Query rooms in space. * * @param vector * Vector to compare with * @param limit * Limit results * @return a list of rooms */ @Transactional public List<Room> queryRooms(final VAVector vector, final int limit) { return query().from(room) .orderBy(room.vaVector.location.distance(vector.getLocation()).asc()) .limit(limit) .list(room); } }