From 0f4a954a941d04f3aa9d3e434cbc13c934f483ff Mon Sep 17 00:00:00 2001 From: Damian Pierzchalski Date: Mon, 17 Dec 2018 22:18:04 +0100 Subject: [PATCH] task(module-web,module-ejb): add search by boardgame name --- .../java/pl/myboardgames/db/BoardGameDao.java | 16 +++++++++++++++- .../resources/BoardGameResource.java | 18 ++++++++++++++---- 2 files changed, 29 insertions(+), 5 deletions(-) diff --git a/module-ejb/src/main/java/pl/myboardgames/db/BoardGameDao.java b/module-ejb/src/main/java/pl/myboardgames/db/BoardGameDao.java index 7680b3b..b8ef5ee 100644 --- a/module-ejb/src/main/java/pl/myboardgames/db/BoardGameDao.java +++ b/module-ejb/src/main/java/pl/myboardgames/db/BoardGameDao.java @@ -25,11 +25,25 @@ public class BoardGameDao { return boardGames; } + public ListgetByName(int page, int size, String namePhrase) { + Query query = em.createQuery("SELECT b FROM BoardGameEntity b WHERE b.name LIKE CONCAT('%',:namePhrase,'%') order by b.id", BoardGameEntity.class); + query.setParameter("namePhrase", namePhrase); + List boardGames = new ArrayList(query.setFirstResult(page*size).setMaxResults(size).getResultList()); + return boardGames; + } + public Long getCount() { Query query = em.createQuery("SELECT COUNT(b) FROM BoardGameEntity b"); Long count = (long)query.getSingleResult(); return count; } + + public Long getCountByName(String namePhrase) { + Query query = em.createQuery("SELECT COUNT(b) FROM BoardGameEntity b WHERE b.name LIKE CONCAT('%',:namePhrase,'%')"); + query.setParameter("namePhrase", namePhrase); + Long count = (long)query.getSingleResult(); + return count; + } public BoardGameEntity getById(Long aId) { BoardGameEntity boardGame = em.find(BoardGameEntity.class, aId); @@ -39,7 +53,7 @@ public class BoardGameDao { } return boardGame; } - + public BoardGameEntity add(BoardGameEntity aBoardGame) { em.persist(aBoardGame); return aBoardGame; diff --git a/module-web/src/main/java/pl/myboardgames/resources/BoardGameResource.java b/module-web/src/main/java/pl/myboardgames/resources/BoardGameResource.java index e4097ef..ccfdc8b 100644 --- a/module-web/src/main/java/pl/myboardgames/resources/BoardGameResource.java +++ b/module-web/src/main/java/pl/myboardgames/resources/BoardGameResource.java @@ -31,13 +31,23 @@ public class BoardGameResource { @GET @Produces("application/json; charset=UTF-8") - public Response getAllBoardGames(@QueryParam("page") int page, @QueryParam("size") int size) { - if (page < 0 || size < 1 ) { + public Response getAllBoardGames(@QueryParam("page") int page, @QueryParam("size") int size, @QueryParam("name") String namePhrase) { + List boardgames; + Long count = new Long(0); + if (page < 0 || size < 1) { page = 0; size = 5; } - List boardgames = boardGameDatabase.getAll(page, size).stream().map(ent -> new BoardGameShortDto(ent)).collect(Collectors.toList()); - Long count = boardGameDatabase.getCount(); + + if (namePhrase != null) { + boardgames = boardGameDatabase.getByName(page, size, namePhrase).stream().map(ent -> new BoardGameShortDto(ent)).collect(Collectors.toList()); + count = boardGameDatabase.getCountByName(namePhrase); + } else { + boardgames = boardGameDatabase.getAll(page, size).stream().map(ent -> new BoardGameShortDto(ent)).collect(Collectors.toList()); + count = boardGameDatabase.getCount(); + } + + BoardGameListDto ret = new BoardGameListDto(boardgames, page, size, count); return Response.status(200).entity(ret).build();