Browse Source

Recupération des usager par page

Arthur Brandao 5 years ago
parent
commit
12cab54110

+ 35 - 0
src/microfolie/entry/rest/UsagerController.java

@@ -0,0 +1,35 @@
+package microfolie.entry.rest;
+
+import java.util.logging.Logger;
+
+import javax.ws.rs.GET;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.Produces;
+
+import org.json.JSONArray;
+import org.json.JSONObject;
+
+import microfolie.service.UsagerService;
+import microfolie.utils.JsonUtils;
+
+@Path("/usager")
+@Produces("application/json")
+public class UsagerController {
+	
+	private static final Logger LOGGER = Logger.getLogger(EspaceController.class.getName());
+	
+	private UsagerService service = UsagerService.getInstance();
+	
+	@GET
+	@Path("/page/{num}/{perPage}")
+	public String page(@PathParam("num") int num, @PathParam("perPage") int perPage) {
+		LOGGER.info("Begin: Usager page (num: " + num + ", perPage: " + perPage + ")");
+		JSONObject data = new JSONObject();
+		data.put("total", service.getTotalNumber());
+		data.put("list", new JSONArray(service.getPage(num, perPage)));
+		LOGGER.info("End: Usager page");
+		return JsonUtils.success(data).toString();
+	}
+
+}

+ 36 - 0
src/microfolie/persistance/table/UsagerTable.java

@@ -1,15 +1,21 @@
 package microfolie.persistance.table;
 
+import java.sql.SQLException;
+import java.util.ArrayList;
 import java.util.List;
 import java.util.Optional;
+import java.util.logging.Logger;
 
+import db.Database;
 import db.DatabaseTable;
 import db.annotation.DbTable;
+import db.mapper.DatabaseMapper;
 import microfolie.persistance.entity.Usager;
 
 @DbTable(name = "Usager", entity = Usager.class)
 public class UsagerTable extends DatabaseTable<Usager> {
 	
+	private static final Logger LOGGER = Logger.getLogger(UsagerTable.class.getName());
 	private static UsagerTable instance;
 	
 	private UsagerTable() {
@@ -36,6 +42,36 @@ public class UsagerTable extends DatabaseTable<Usager> {
 		return !findByCode(code).isPresent();
 	}
 	
+	public long getNumberUsagerInDatabase() {
+		Optional<Long> opt = Database.query("Select count(*) From Usager", rs -> {
+			try {
+				rs.next();
+				return rs.getLong(1);
+			} catch (SQLException e) {
+				LOGGER.warning(e.getMessage());
+				return 0l;
+			}
+		});
+		if (opt.isPresent()) {
+			return opt.get();
+		}
+		return 0l;
+	}
+	
+	public List<Usager> getpage(int num, int perPage) {
+		String sql = "Select * From "
+				+ "(Select ROW_NUMBER() OVER() as rownum, Usager.* From Usager) as tmp "
+				+ "Where rownum > ? And rownum <= ?";
+		List<Object> params = new ArrayList<>();
+		params.add(perPage * (num - 1));
+		params.add(perPage * num);
+		Optional<List<Usager>> opt = Database.query(sql, params, DatabaseMapper.listMapper(getClass().getAnnotation(DbTable.class)));
+		if (opt.isPresent()) {
+			return opt.get();
+		}
+		return new ArrayList<>();
+	}
+	
 	public static UsagerTable getInstance() {
 		if(instance == null) {
 			instance = new UsagerTable();

+ 9 - 0
src/microfolie/service/UsagerService.java

@@ -42,6 +42,15 @@ public class UsagerService {
 		return table.findByCode(code).isPresent();
 	}
 	
+	public long getTotalNumber() {
+		return table.getNumberUsagerInDatabase();
+	}
+	
+	public List<UsagerDTO> getPage(int num, int perPage) {
+		List<Usager> usagers = table.getpage(num, perPage);
+		return UsagerTransformer.entityToDto(usagers);
+	}
+	
 	private String generateUniqueCode() {
 		String code;
 		do {