Browse Source

Début gestion scna QRCode

Arthur Brandao 5 years ago
parent
commit
5e11121c49

+ 33 - 12
WebContent/scan/index.jsp

@@ -1,6 +1,11 @@
 <%@ page language="java" contentType="text/html; charset=UTF-8"
     pageEncoding="UTF-8"%>
 <%@ taglib prefix="tag" tagdir="/WEB-INF/tags" %>
+<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+<%@taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
+<c:set var="req" value="${pageContext.request}" />
+<c:set var="url">${req.requestURL}</c:set>
+<c:set var="base" value="${fn:substring(url, 0, fn:length(url) - fn:length(req.requestURI))}${req.contextPath}/" />
 
 <!DOCTYPE html>
 <html>
@@ -45,11 +50,6 @@
                 <video id="qr-preview"></video>
             </div>
         </div>
-        <div class="row">
-            <div class="col s12 center-align">
-                <p id="result"></p>
-            </div>
-        </div>
     </main>
 
     <!-- Popup -->
@@ -60,7 +60,7 @@
                     <i class="material-icons green-text" style="font-size: 8em;">check_circle</i>
                 </div>
                 <div class="col m7 s12 mtop-3">
-                    <h4>Votre code a bien &eacute;t&eacute; scann&eacute;</h4>
+                    <h4 id="ok-text">Success message</h4>
                 </div>
             </div>    
         </div>
@@ -92,18 +92,39 @@
     		const errPopup = M.Modal.getInstance($('#err-popup'));
     		const loader = M.Modal.getInstance($('#loader'));
     		
+    		
     		// Lecteur cookie espace
             const espace = getCookie("microfolies.lens.espace");
-            // Changement nom titre
-            if (espace !== undefined) {
-                $('#title').html(espace.capitalize());
+    		// Si pas de cookie retour sur la page d'accueil
+            if (espace === undefined) {
+                window.location.href = "${base}";
             }
+         // Changement nom titre
+            $('#title').html(espace.capitalize());
             //Scanner QRcode
             const scanner = new Instascan.Scanner({ video: document.getElementById('qr-preview') });
             scanner.addListener('scan', function (content) {
-                const result = espace ? content + "/" + espace : content;
-                $('#result').html(result);
-                okPopup.open();
+            	loader.open();
+                const result = espace ? espace + "/" + content : content;
+                $.ajax({
+                	type: "POST",
+                	url: "${base}api/badge/" + result,
+                	error: () => {
+                		$("#error-text").html('Une erreur est survenue');
+                		loader.close();
+                		errPopup.open();
+                	},
+                	success: (result) => {
+                		loader.close();
+                		if (result.success) {
+                			$("#ok-text").html(result.data.msg);
+                			okPopup.open();
+                		} else {
+                			$("#error-text").html(result.data);
+                			errPopup.open();
+                		}
+                	},
+                });
             });
             Instascan.Camera.getCameras().then(function (cameras) {
                 if (cameras.length > 0) {

+ 28 - 6
src/microfolie/entry/rest/BadgeController.java

@@ -1,23 +1,45 @@
 package microfolie.entry.rest;
 
-import javax.ws.rs.GET;
+import javax.ws.rs.POST;
 import javax.ws.rs.Path;
 import javax.ws.rs.PathParam;
 import javax.ws.rs.Produces;
 
 import org.json.JSONObject;
 
+import microfolie.service.EspaceService;
+import microfolie.service.FrequentationService;
+import microfolie.service.UsagerService;
+import microfolie.utils.JsonUtils;
+
 @Path("/badge")
 @Produces("application/json")
 public class BadgeController {
 	
-	@GET
+	private UsagerService usagerService = UsagerService.getInstance();
+	private EspaceService espaceService = EspaceService.getInstance();
+	private FrequentationService service = FrequentationService.getInstance();
+	
+	@POST
 	@Path("/{espace}/{code}")
 	public String scanner(@PathParam("espace") String espace, @PathParam("code") String code) {
-		JSONObject json = new JSONObject();
-		json.put("espace", espace);
-		json.put("code", code);
-		return json.toString(2);
+		JSONObject result;
+		// Verification que les codes existes
+		if (!usagerService.exist(code)) {
+			result = JsonUtils.error("L'usager est introuvable");
+		} else if (!espaceService.exist(espace)) {
+			result = JsonUtils.error("L'espace est introuvable");
+		} else {
+			// Ajoute la fréquentation en base
+			JSONObject data = new JSONObject();
+			if(service.add(code, espace)) {
+				data.put("msg", "Bienvenue, votre code &agrave; bien &eacute;t&eacute; scann&eacute;");
+			} else {
+				data.put("msg", "Bon retour, votre code &agrave; bien &eacute;t&eacute; scann&eacute;");
+			}
+			result = JsonUtils.success(data);
+		}
+		return result.toString();
 	}
 
 }

+ 4 - 2
src/microfolie/persistance/MicrofolieDatabase.java

@@ -72,8 +72,10 @@ public class MicrofolieDatabase extends DatabaseManager {
 	}
 	
 	private static void iniMock() {
-		mock.add("Insert into Espace(LIBELLE) Values('Jeux')");
-		mock.add("Insert into Espace(LIBELLE) Values('Video')");
+		mock.add("Insert into Espace(LIBELLE, CODE) Values('Accueil', 'accueil')");
+		mock.add("Insert into Espace(LIBELLE, CODE) Values('Jeux Vidéo', 'jeux-video')");
+		mock.add("Insert into Espace(LIBELLE, CODE) Values('Vidéo', 'video')");
+		mock.add("Insert into Espace(LIBELLE, CODE) Values('Imprimante 3D', 'imprimante-3d')");
 		mock.add("Insert into Ville(LIBELLE, CODEPOSTAL) Values('Troyes', '10000')");
 		mock.add("Insert into Ville(LIBELLE, CODEPOSTAL) Values('Reims', '51000')");
 		mock.add("Insert into Ville(LIBELLE, CODEPOSTAL) Values('Lens', '62300')");

+ 4 - 4
src/microfolie/persistance/table/EspaceTable.java

@@ -16,16 +16,16 @@ public class EspaceTable extends DatabaseTable<Espace>{
 		// Private constructor for singleton
 	}
 	
-	public Espace getByCode(String lib) {
-		List<Espace> list = getByField("CODE", lib);
+	public Espace getByCode(String code) {
+		List<Espace> list = getByField("CODE", code);
 		if(list.isEmpty()) {
 			return null;
 		}
 		return list.get(0);
 	}
 	
-	public Optional<Espace> findByCode(String lib) {
-		Espace obj = getByCode(lib);
+	public Optional<Espace> findByCode(String code) {
+		Espace obj = getByCode(code);
 		if (obj == null) {
 			return Optional.empty();
 		}

+ 26 - 0
src/microfolie/service/EspaceService.java

@@ -0,0 +1,26 @@
+package microfolie.service;
+
+import microfolie.persistance.table.EspaceTable;
+
+public class EspaceService {
+	
+	private static EspaceService instance;
+	
+	private EspaceTable table = EspaceTable.getInstance();
+	
+	private EspaceService() {
+		// Constructeur privé pour singleton
+	}
+	
+	public boolean exist(String code) {
+		return table.findByCode(code).isPresent();
+	}
+	
+	public static EspaceService getInstance() {
+		if (instance == null) {
+			instance = new EspaceService();
+		}
+		return instance;
+	}
+
+}

+ 26 - 0
src/microfolie/service/FrequentationService.java

@@ -0,0 +1,26 @@
+package microfolie.service;
+
+import microfolie.persistance.table.FrequentationTable;
+
+public class FrequentationService {
+	
+	private static FrequentationService instance;
+	
+	private FrequentationTable table = FrequentationTable.getInstance();
+	
+	private FrequentationService() {
+		// Constructeur privé pour singleton
+	}
+	
+	public boolean add(String codeUsager, String codeEspace) {
+		return false;
+	}
+	
+	public static FrequentationService getInstance() {
+		if (instance == null) {
+			instance = new FrequentationService();
+		}
+		return instance;
+	}
+
+}

+ 14 - 4
src/microfolie/service/UsagerService.java

@@ -1,6 +1,7 @@
 package microfolie.service;
 
 import java.util.List;
+import java.util.Optional;
 import java.util.Random;
 
 import microfolie.persistance.entity.Usager;
@@ -21,18 +22,27 @@ public class UsagerService {
 	}
 	
 	public void add(UsagerDTO usagerDTO) {
-		// Transforme le DTO en Usager
 		Usager usager = UsagerTransformer.dtoToEntity(usagerDTO);
-		// Generation du code
 		usager.code = generateUniqueCode();
-		// Sauvegarde en base
 		table.save(usager);
 		
 		List<Usager> l = table.getAll();
 		l.forEach(elt -> System.out.println(elt.id + ": " + elt));
 	}
 	
-	public String generateUniqueCode() {
+	public UsagerDTO getUsager(String code) {
+		Optional<Usager> optUsager = table.findByCode(code);
+		if(optUsager.isPresent()) {
+			return UsagerTransformer.entityToDto(optUsager.get());
+		}
+		return null;
+	}
+	
+	public boolean exist(String code) {
+		return table.findByCode(code).isPresent();
+	}
+	
+	private String generateUniqueCode() {
 		String code;
 		do {
 			StringBuilder builder = new StringBuilder();

+ 21 - 0
src/microfolie/utils/JsonUtils.java

@@ -0,0 +1,21 @@
+package microfolie.utils;
+
+import org.json.JSONObject;
+
+public class JsonUtils {
+	
+	public static JSONObject error(String message) {
+		JSONObject json = new JSONObject();
+		json.put("success", false);
+		json.put("data", message);
+		return json;
+	}
+	
+	public static JSONObject success(JSONObject data) {
+		JSONObject json = new JSONObject();
+		json.put("success", true);
+		json.put("data", data);
+		return json;
+	}
+
+}