From 2bca05591e4fa2b19beec5e69d3460285e41b5ba Mon Sep 17 00:00:00 2001 From: NariaReynhard Date: Tue, 3 Dec 2024 11:30:02 +0100 Subject: [PATCH 01/11] =?UTF-8?q?Ajout=20de=20l'affichage=20des=20solaredg?= =?UTF-8?q?e=20au=20temps=20r=C3=A9el=20(quelques=20correctifs=20sont=20to?= =?UTF-8?q?ujours=20requis=20mais=20l'application=20est=20fonctionnelle)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/application/tools/DataReader.java | 8 +- .../view/DonneesActuellesController.java | 128 +++++++++++++++++- .../application/view/affichageTpsReel.fxml | 125 +++++++++-------- 3 files changed, 195 insertions(+), 66 deletions(-) diff --git a/Code/java/src/main/java/application/tools/DataReader.java b/Code/java/src/main/java/application/tools/DataReader.java index 4490df503..482b6ade2 100644 --- a/Code/java/src/main/java/application/tools/DataReader.java +++ b/Code/java/src/main/java/application/tools/DataReader.java @@ -53,14 +53,16 @@ public static float getCo2(File datasToFetch){ return co2ToReturn; } - private static Map getDict(File datasToFetch){ + public static Map getDict(File datasToFetch){ Map dictToReturn = new HashMap<>(); try { String data = Files.readString(datasToFetch.toPath()); data = data.replace("{","").replace("}","").replace("'",""); String[] splittedValues = data.split(", |: "); - for(int i = 0; i current.lastModified()) lastestSolarEdge = current; + } + for(Map.Entry entry : DataReader.getDict(lastestSolarEdge).entrySet()){ + Text tempText = new Text(entry.getKey()); + tempText.setId(entry.getKey()); + TextField tempField = new TextField(String.valueOf(entry.getValue())); + tempField.setId(entry.getValue().toString()); + tempField.setEditable(false); + container.getChildren().add(tempText); + container.getChildren().add(tempField); + } + return solaredge; + } private void initWeb(){ String pathSvg = Objects.requireNonNull(DonneesActuellesController.class.getClassLoader().getResource("application/svg/demoSVG.html")).toString(); @@ -171,11 +240,12 @@ private void updateDisplayedDatas(){ public void displayedListUpdate(String room) throws Exception { + System.out.println("Debug : "+room); boolean deleted = false; Node toDelete = null; for(Node n : displayedDatas.getChildren()){ if(n instanceof TitledPane checking){ - if (checking.getText().equals(room)){ + if (checking.getText().equals(room.toUpperCase())){ toDelete = n; deleted = true; } @@ -193,7 +263,7 @@ public void displayedListUpdateSoft(String room) throws Exception { private void updateRoom(String room) throws Exception { TitledPane roomdatas = new TitledPane(); - roomdatas.setText(room); + roomdatas.setText(room.toUpperCase()); VBox datasStorage = new VBox(); datasStorage.setSpacing(5); Text tempTitle = new Text(TEXTVALUES.TEMPTITLE.getDisplayText()); @@ -238,7 +308,6 @@ private void updateRoom(String room) throws Exception { private float getCorrespondingData(String room, DATA toFetch) throws URISyntaxException, IOException, Exception { room=room.toUpperCase(); File folder = new File(Objects.requireNonNull(DonneesActuellesController.class.getClassLoader().getResource("application/capteur/AM107/"+room)).toURI()); - System.out.println(folder.getAbsolutePath()); if(folder.exists()) { File[] allDatas = folder.listFiles(); assert allDatas != null; @@ -257,6 +326,53 @@ private float getCorrespondingData(String room, DATA toFetch) throws URISyntaxEx throw new Exception("Erreur de lecture de fichier"); } + private void newWarning(String room){ + boolean exists = false; + for(Node existingrooms : warnings.getChildren()){ + if (existingrooms instanceof Button){ + if (existingrooms.getId().equals(room.toLowerCase())) { + exists = true; + } + } + } + if(!exists) { + Button warningRoom = notificationHandle(room); + this.warnings.getChildren().add(warningRoom); + } + } + + private void newAlert(String room){ + boolean exists = false; + for(Node existingrooms : alerts.getChildren()){ + if (existingrooms instanceof Button){ + if (existingrooms.getId().equals(room.toLowerCase())) { + exists = true; + } + } + } + if(!exists) { + Button alertButton = notificationHandle(room); + this.alerts.getChildren().add(alertButton); + } + } + + private Button notificationHandle(String room) { + Button newButton = new Button(); + newButton.setText(room.toUpperCase()); + newButton.setId(room.toLowerCase()); + newButton.setMaxHeight(Double.MAX_VALUE); + newButton.setMaxWidth(Double.MAX_VALUE); + newButton.addEventHandler(MouseEvent.MOUSE_CLICKED, event -> { + try { + displayedListUpdate(room); + } catch (Exception e) { + throw new RuntimeException(e); + } + } + ); + return newButton; + } + private class controlUpdateThread implements Runnable{ boolean terminated; diff --git a/Code/java/src/main/resources/application/view/affichageTpsReel.fxml b/Code/java/src/main/resources/application/view/affichageTpsReel.fxml index f6ac51ed0..6a3cb5a04 100644 --- a/Code/java/src/main/resources/application/view/affichageTpsReel.fxml +++ b/Code/java/src/main/resources/application/view/affichageTpsReel.fxml @@ -38,11 +38,12 @@ + - + @@ -51,7 +52,7 @@ - + @@ -63,6 +64,16 @@ + + + + + + + + + + @@ -85,65 +96,65 @@ -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - + + + + + - - - - - - + - - + + - + + + + + + + + + - - - + + + + + + + + + + + +
+ + + + +
From f0d25c40b91847b7800668d5cb9c0597cff32f11 Mon Sep 17 00:00:00 2001 From: NariaReynhard Date: Tue, 3 Dec 2024 16:47:39 +0100 Subject: [PATCH 02/11] =?UTF-8?q?Progr=C3=A8s=20sur=20l'affichage=20et=20l?= =?UTF-8?q?a=20gestion=20du=20changement=20de=20fen=C3=AAtre.=20Manque=20t?= =?UTF-8?q?ests=20sur=20le=20fonctionnement=20des=20threads?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Code/java/dependency-reduced-pom.xml | 6 +- Code/java/pom.xml | 5 ++ .../java/application/tools/DataReader.java | 21 ++++++ .../view/DonneesActuellesController.java | 71 ++++++++++--------- 4 files changed, 68 insertions(+), 35 deletions(-) diff --git a/Code/java/dependency-reduced-pom.xml b/Code/java/dependency-reduced-pom.xml index 8a3ed32c9..120bb5201 100644 --- a/Code/java/dependency-reduced-pom.xml +++ b/Code/java/dependency-reduced-pom.xml @@ -1,9 +1,9 @@ 4.0.0 - sae-s2.01-2023 - DailyBank - DailyBank App V2 + sae-s3.01-2024 + SweetShops + SweetShops APP IoT 1.0 diff --git a/Code/java/pom.xml b/Code/java/pom.xml index 4af7851c6..a608e8337 100644 --- a/Code/java/pom.xml +++ b/Code/java/pom.xml @@ -22,6 +22,11 @@ javafx-controls ${javafx.version} + + org.json + json + 20230618 + org.openjfx javafx-fxml diff --git a/Code/java/src/main/java/application/tools/DataReader.java b/Code/java/src/main/java/application/tools/DataReader.java index 482b6ade2..8c93223bc 100644 --- a/Code/java/src/main/java/application/tools/DataReader.java +++ b/Code/java/src/main/java/application/tools/DataReader.java @@ -1,5 +1,7 @@ package application.tools; +import org.json.JSONObject; + import java.io.File; import java.io.IOException; import java.nio.file.Files; @@ -69,4 +71,23 @@ public static Map getDict(File datasToFetch){ } return dictToReturn; } + + public static Map getSolarDict (File datasToFetch){ + Map dictToReturn = new HashMap<>(); + try { + JSONObject datas = new JSONObject(Files.readString(datasToFetch.toPath())); + for (String firstKey : datas.keySet()) { + Object firstValue = datas.get(firstKey); + if(firstValue instanceof JSONObject currentData){ + for(String secondKey : currentData.keySet()){ + Object secondValue = currentData.get(secondKey); + dictToReturn.put(firstKey+"."+secondKey, Float.parseFloat(secondValue.toString())); + } + } + } + } catch (IOException e) { + throw new RuntimeException(e); + } + return dictToReturn; + } } diff --git a/Code/java/src/main/java/application/view/DonneesActuellesController.java b/Code/java/src/main/java/application/view/DonneesActuellesController.java index 74851c97a..54efe99b1 100644 --- a/Code/java/src/main/java/application/view/DonneesActuellesController.java +++ b/Code/java/src/main/java/application/view/DonneesActuellesController.java @@ -50,7 +50,6 @@ private String getDisplayText(){ public class JSBridge { public void handleClick(String room) { - System.out.println("Room clicked: " + room); try { displayedListUpdate(room); } catch (Exception e) { @@ -61,6 +60,7 @@ public void handleClick(String room) { private Node webviewerMemory; private Node displayedDatasMemory; + private TitledPane solarEdgeDataMemory; private Stage containingStage; @FXML @@ -86,16 +86,18 @@ public void handleClick(String room) { @FXML private void changeInterface()throws Exception { if(am107.isSelected()){ - mainContainer.setCenter(displayedDatas); - Node temp = mainContainer.getRight(); - mainContainer.setRight(displayedDatasMemory); - displayedDatasMemory=temp; + if(mainContainer.getCenter() instanceof TitledPane) { + solarEdgeDataMemory = (TitledPane) mainContainer.getCenter(); + mainContainer.setCenter(webviewerMemory); + mainContainer.setRight(displayedDatasMemory); + } }else if(solaredge.isSelected()){ - webviewerMemory=mainContainer.getCenter(); - Node temp = mainContainer.getRight(); - mainContainer.setCenter(displayedDatasMemory); - displayedDatasMemory=temp; - mainContainer.setRight(null); + if(mainContainer.getCenter() instanceof ScrollPane) { + webviewerMemory = mainContainer.getCenter(); + displayedDatasMemory = mainContainer.getRight(); + mainContainer.setCenter(solarEdgeDataMemory); + mainContainer.setRight(null); + } }else{ throw new Exception("Une a été rencontrée lors de la séléction des capteurs."); } @@ -108,7 +110,7 @@ private void changeInterface()throws Exception { public void initContext(Stage _containingStage) { this.containingStage = _containingStage; - this.displayedDatasMemory = setUpSolaredge(); + setUpSolaredge(); this.initWeb(); controlUpdateThread checkingRunnable = new controlUpdateThread(); Thread checkingThread = new Thread(checkingRunnable); @@ -120,37 +122,33 @@ public void initContext(Stage _containingStage) { newWarning("B113"); } - private Node setUpSolaredge(){ - TitledPane solaredge = new TitledPane(); - solaredge.setText("Solaredge"); - solaredge.setCollapsible(false); - solaredge.setExpanded(true); - solaredge.setId("solaredge"); + private void setUpSolaredge(){ + solarEdgeDataMemory = new TitledPane(); + solarEdgeDataMemory.setText("Solaredge"); + solarEdgeDataMemory.setCollapsible(false); + solarEdgeDataMemory.setExpanded(true); + solarEdgeDataMemory.setId("solaredge"); VBox container = new VBox(); container.setFillWidth(true); - solaredge.setContent(container); + solarEdgeDataMemory.setContent(container); File solarEdgefolder = null; try { solarEdgefolder = new File(Objects.requireNonNull(DonneesActuellesController.class.getClassLoader().getResource("application/capteur/solaredge")).toURI()); } catch (URISyntaxException e) { throw new RuntimeException(e); } - System.out.println(solarEdgefolder.getAbsolutePath()); - System.out.println(solarEdgefolder.exists()); File lastestSolarEdge = Objects.requireNonNull(solarEdgefolder.listFiles())[0]; for(File current : Objects.requireNonNull(solarEdgefolder.listFiles())){ if (lastestSolarEdge.lastModified()> current.lastModified()) lastestSolarEdge = current; } - for(Map.Entry entry : DataReader.getDict(lastestSolarEdge).entrySet()){ - Text tempText = new Text(entry.getKey()); - tempText.setId(entry.getKey()); - TextField tempField = new TextField(String.valueOf(entry.getValue())); - tempField.setId(entry.getValue().toString()); - tempField.setEditable(false); - container.getChildren().add(tempText); - container.getChildren().add(tempField); - } - return solaredge; + Map solarDatas = DataReader.getSolarDict(lastestSolarEdge); + Text tempText = new Text("Puissance actuelle"); + tempText.setId("power"); + TextField tempField = new TextField(String.valueOf(solarDatas.get("currentPower.power"))+" Watts"); + tempField.setId(solarDatas.get("currentPower.power").toString()); + tempField.setEditable(false); + container.getChildren().add(tempText); + container.getChildren().add(tempField); } private void initWeb(){ String pathSvg = Objects.requireNonNull(DonneesActuellesController.class.getClassLoader().getResource("application/svg/demoSVG.html")).toString(); @@ -240,7 +238,6 @@ private void updateDisplayedDatas(){ public void displayedListUpdate(String room) throws Exception { - System.out.println("Debug : "+room); boolean deleted = false; Node toDelete = null; for(Node n : displayedDatas.getChildren()){ @@ -383,7 +380,14 @@ public controlUpdateThread(){ @Override public void run() { Map fileAmount = new HashMap<>(); - File mainFolder = new File(Objects.requireNonNull(DonneesActuellesController.class.getClassLoader().getResource("application/capteur/AM107")).toString()); + File mainFolder, solaredgeFile; + try { + solaredgeFile = new File(DonneesActuellesController.class.getClassLoader().getResource("application/capteur/solaredge").toURI()); + mainFolder = new File(Objects.requireNonNull(DonneesActuellesController.class.getClassLoader().getResource("application/capteur/AM107")).toURI()); + } catch (URISyntaxException e) { + throw new RuntimeException(e); + } + int numberOfSolarDatas= Objects.requireNonNull(solaredgeFile.listFiles()).length; for(File folder : Objects.requireNonNull(mainFolder.listFiles())){ fileAmount.put(folder, Objects.requireNonNull(folder.listFiles()).length); } @@ -397,6 +401,9 @@ public void run() { } } } + if(numberOfSolarDatas < Objects.requireNonNull(solaredgeFile.listFiles()).length){ + setUpSolaredge(); + } } } From 59251bd7e48fcd965a235750f0e544918ad6ac7f Mon Sep 17 00:00:00 2001 From: NariaReynhard Date: Wed, 4 Dec 2024 16:53:26 +0100 Subject: [PATCH 03/11] =?UTF-8?q?ajout=20d'un=20syst=C3=A8me=20de=20d?= =?UTF-8?q?=C3=A9tection=20de=20modification=20des=20fichiers?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../view/DonneesActuellesController.java | 219 +++++++++++------- 1 file changed, 135 insertions(+), 84 deletions(-) diff --git a/Code/java/src/main/java/application/view/DonneesActuellesController.java b/Code/java/src/main/java/application/view/DonneesActuellesController.java index 54efe99b1..ea7b408f9 100644 --- a/Code/java/src/main/java/application/view/DonneesActuellesController.java +++ b/Code/java/src/main/java/application/view/DonneesActuellesController.java @@ -16,17 +16,18 @@ import java.io.File; import java.io.IOException; import java.net.URISyntaxException; -import java.util.HashMap; +import java.nio.file.*; import java.util.Map; import java.util.Objects; import netscape.javascript.JSObject; public class DonneesActuellesController { - private enum DATA{ + private enum DATA { TEMP, CO2, HUM } - private enum TEXTVALUES{ + + private enum TEXTVALUES { TEMPTITLE("Température : "), TEMPID("Temp"), TEMPUNIT("°C"), @@ -39,11 +40,11 @@ private enum TEXTVALUES{ private final String displayText; - TEXTVALUES(String displayText){ + TEXTVALUES(String displayText) { this.displayText = displayText; } - private String getDisplayText(){ + private String getDisplayText() { return displayText; } } @@ -84,24 +85,25 @@ public void handleClick(String room) { private RadioMenuItem solaredge; @FXML - private void changeInterface()throws Exception { - if(am107.isSelected()){ - if(mainContainer.getCenter() instanceof TitledPane) { + private void changeInterface() throws Exception { + if (am107.isSelected()) { + if (mainContainer.getCenter() instanceof TitledPane) { solarEdgeDataMemory = (TitledPane) mainContainer.getCenter(); mainContainer.setCenter(webviewerMemory); mainContainer.setRight(displayedDatasMemory); } - }else if(solaredge.isSelected()){ - if(mainContainer.getCenter() instanceof ScrollPane) { + } else if (solaredge.isSelected()) { + if (mainContainer.getCenter() instanceof ScrollPane) { webviewerMemory = mainContainer.getCenter(); displayedDatasMemory = mainContainer.getRight(); mainContainer.setCenter(solarEdgeDataMemory); mainContainer.setRight(null); } - }else{ + } else { throw new Exception("Une a été rencontrée lors de la séléction des capteurs."); } } + @FXML private WebView iutschematics; private WebEngine webEngine; @@ -109,10 +111,10 @@ private void changeInterface()throws Exception { private IoTMainFrame main = new IoTMainFrame(); public void initContext(Stage _containingStage) { - this.containingStage = _containingStage; + this.containingStage = _containingStage; setUpSolaredge(); this.initWeb(); - controlUpdateThread checkingRunnable = new controlUpdateThread(); + controlUpdateThread checkingRunnable = new controlUpdateThread(this); Thread checkingThread = new Thread(checkingRunnable); checkingThread.start(); /* @@ -120,9 +122,10 @@ public void initContext(Stage _containingStage) { */ newWarning("b113"); newWarning("B113"); - } + } - private void setUpSolaredge(){ + private void setUpSolaredge() { + System.out.println("set up..."); solarEdgeDataMemory = new TitledPane(); solarEdgeDataMemory.setText("Solaredge"); solarEdgeDataMemory.setCollapsible(false); @@ -131,75 +134,76 @@ private void setUpSolaredge(){ VBox container = new VBox(); container.setFillWidth(true); solarEdgeDataMemory.setContent(container); - File solarEdgefolder = null; + File solarEdgefolder; try { solarEdgefolder = new File(Objects.requireNonNull(DonneesActuellesController.class.getClassLoader().getResource("application/capteur/solaredge")).toURI()); } catch (URISyntaxException e) { throw new RuntimeException(e); } File lastestSolarEdge = Objects.requireNonNull(solarEdgefolder.listFiles())[0]; - for(File current : Objects.requireNonNull(solarEdgefolder.listFiles())){ - if (lastestSolarEdge.lastModified()> current.lastModified()) lastestSolarEdge = current; + for (File current : Objects.requireNonNull(solarEdgefolder.listFiles())) { + if (lastestSolarEdge.lastModified() < current.lastModified()) lastestSolarEdge = current; } Map solarDatas = DataReader.getSolarDict(lastestSolarEdge); Text tempText = new Text("Puissance actuelle"); tempText.setId("power"); - TextField tempField = new TextField(String.valueOf(solarDatas.get("currentPower.power"))+" Watts"); + TextField tempField = new TextField(solarDatas.get("currentPower.power") + " Watts"); tempField.setId(solarDatas.get("currentPower.power").toString()); tempField.setEditable(false); container.getChildren().add(tempText); container.getChildren().add(tempField); } - private void initWeb(){ + + private void initWeb() { String pathSvg = Objects.requireNonNull(DonneesActuellesController.class.getClassLoader().getResource("application/svg/demoSVG.html")).toString(); webEngine = iutschematics.getEngine(); webEngine.load(pathSvg); webEngine.documentProperty().addListener((observable, oldValue, newValue) -> { - if(newValue != null){ + if (newValue != null) { JSObject window = (JSObject) webEngine.executeScript("window"); window.setMember("javaBridge", jsBridge); webEngine.executeScript(""" - document.querySelectorAll('g').forEach(function(element) { - element.addEventListener('click', function(event) { - // Get the id of the element itself - var id = element.getAttribute('id'); - // Pass the id to the Java method - javaBridge.handleClick(id); - }); - }); - """); + document.querySelectorAll('g').forEach(function(element) { + element.addEventListener('click', function(event) { + // Get the id of the element itself + var id = element.getAttribute('id'); + // Pass the id to the Java method + javaBridge.handleClick(id); + }); + }); + """); } }); } - public void displayDialog(){ + public void displayDialog() { this.containingStage.show(); } - public void setMain(IoTMainFrame newMain){ + public void setMain(IoTMainFrame newMain) { main = newMain; } @FXML - private void menu(){ + private void menu() { main.start(containingStage); } @FXML - private void ecranAnterieur(){ + private void ecranAnterieur() { main.choixTypeDonneesAnterieures(containingStage); } @FXML - private void fermer(){ + private void fermer() { this.containingStage.close(); } @FXML - private void updateDisplayedDatas(){ + private void updateDisplayedDatas() { for (Node titledPaneNode : displayedDatas.getChildren()) { if (titledPaneNode instanceof TitledPane titledPane) { VBox container = (VBox) titledPane.getContent(); @@ -240,18 +244,18 @@ private void updateDisplayedDatas(){ public void displayedListUpdate(String room) throws Exception { boolean deleted = false; Node toDelete = null; - for(Node n : displayedDatas.getChildren()){ - if(n instanceof TitledPane checking){ - if (checking.getText().equals(room.toUpperCase())){ + for (Node n : displayedDatas.getChildren()) { + if (n instanceof TitledPane checking) { + if (checking.getText().equals(room.toUpperCase())) { toDelete = n; deleted = true; } } - if(deleted) break; + if (deleted) break; } - if(!deleted) { + if (!deleted) { updateRoom(room); - }else displayedDatas.getChildren().remove(toDelete); + } else displayedDatas.getChildren().remove(toDelete); } public void displayedListUpdateSoft(String room) throws Exception { @@ -265,10 +269,10 @@ private void updateRoom(String room) throws Exception { datasStorage.setSpacing(5); Text tempTitle = new Text(TEXTVALUES.TEMPTITLE.getDisplayText()); tempTitle.setId(TEXTVALUES.TEMPID.getDisplayText()); - TextField tempRoom = new TextField(getCorrespondingData(room, DATA.TEMP)+ TEXTVALUES.TEMPUNIT.getDisplayText()); + TextField tempRoom = new TextField(getCorrespondingData(room, DATA.TEMP) + TEXTVALUES.TEMPUNIT.getDisplayText()); tempRoom.setId(TEXTVALUES.TEMPID.getDisplayText()); tempRoom.setEditable(false); - if(!temp.isSelected()){ + if (!temp.isSelected()) { tempTitle.setVisible(false); tempTitle.setManaged(false); tempRoom.setVisible(false); @@ -276,10 +280,10 @@ private void updateRoom(String room) throws Exception { } Text co2Title = new Text(TEXTVALUES.CO2TITLE.getDisplayText()); co2Title.setId(TEXTVALUES.CO2ID.getDisplayText()); - TextField co2Room = new TextField(getCorrespondingData(room, DATA.CO2)+ TEXTVALUES.CO2UNIT.getDisplayText()); + TextField co2Room = new TextField(getCorrespondingData(room, DATA.CO2) + TEXTVALUES.CO2UNIT.getDisplayText()); co2Room.setId(TEXTVALUES.CO2ID.getDisplayText()); co2Room.setEditable(false); - if(!co2.isSelected()){ + if (!co2.isSelected()) { co2Title.setVisible(false); co2Title.setManaged(false); co2Room.setVisible(false); @@ -287,10 +291,10 @@ private void updateRoom(String room) throws Exception { } Text humTitle = new Text(TEXTVALUES.HUMIDITYTITLE.getDisplayText()); humTitle.setId(TEXTVALUES.HUMIDITYID.getDisplayText()); - TextField humRoom = new TextField(getCorrespondingData(room, DATA.HUM)+ TEXTVALUES.HUMIDITYUNIT.getDisplayText()); + TextField humRoom = new TextField(getCorrespondingData(room, DATA.HUM) + TEXTVALUES.HUMIDITYUNIT.getDisplayText()); humRoom.setId(TEXTVALUES.HUMIDITYID.getDisplayText()); humRoom.setEditable(false); - if(!humidity.isSelected()){ + if (!humidity.isSelected()) { humTitle.setVisible(false); humTitle.setManaged(false); humRoom.setVisible(false); @@ -302,15 +306,15 @@ private void updateRoom(String room) throws Exception { roomdatas.setExpanded(true); } - private float getCorrespondingData(String room, DATA toFetch) throws URISyntaxException, IOException, Exception { - room=room.toUpperCase(); - File folder = new File(Objects.requireNonNull(DonneesActuellesController.class.getClassLoader().getResource("application/capteur/AM107/"+room)).toURI()); - if(folder.exists()) { + private float getCorrespondingData(String room, DATA toFetch) throws Exception { + room = room.toUpperCase(); + File folder = new File(Objects.requireNonNull(DonneesActuellesController.class.getClassLoader().getResource("application/capteur/AM107/" + room)).toURI()); + if (folder.exists()) { File[] allDatas = folder.listFiles(); assert allDatas != null; File captorData = allDatas[0]; - for(File current : allDatas){ - if(current.lastModified() > captorData.lastModified()){ + for (File current : allDatas) { + if (current.lastModified() > captorData.lastModified()) { captorData = current; } } @@ -323,31 +327,31 @@ private float getCorrespondingData(String room, DATA toFetch) throws URISyntaxEx throw new Exception("Erreur de lecture de fichier"); } - private void newWarning(String room){ + private void newWarning(String room) { boolean exists = false; - for(Node existingrooms : warnings.getChildren()){ - if (existingrooms instanceof Button){ + for (Node existingrooms : warnings.getChildren()) { + if (existingrooms instanceof Button) { if (existingrooms.getId().equals(room.toLowerCase())) { exists = true; } } } - if(!exists) { + if (!exists) { Button warningRoom = notificationHandle(room); this.warnings.getChildren().add(warningRoom); } } - private void newAlert(String room){ + private void newAlert(String room) { boolean exists = false; - for(Node existingrooms : alerts.getChildren()){ - if (existingrooms instanceof Button){ + for (Node existingrooms : alerts.getChildren()) { + if (existingrooms instanceof Button) { if (existingrooms.getId().equals(room.toLowerCase())) { exists = true; } } } - if(!exists) { + if (!exists) { Button alertButton = notificationHandle(room); this.alerts.getChildren().add(alertButton); } @@ -370,45 +374,92 @@ private Button notificationHandle(String room) { return newButton; } - private class controlUpdateThread implements Runnable{ + private static class controlUpdateThread implements Runnable { boolean terminated; + DonneesActuellesController controller; - public controlUpdateThread(){ - terminated = false; + controlUpdateThread(DonneesActuellesController controller) { + this.terminated = false; + this.controller = controller; } - @Override public void run() { - Map fileAmount = new HashMap<>(); - File mainFolder, solaredgeFile; + // Récupérer le chemin du dossier dans les ressources + Path resourcePath; try { - solaredgeFile = new File(DonneesActuellesController.class.getClassLoader().getResource("application/capteur/solaredge").toURI()); - mainFolder = new File(Objects.requireNonNull(DonneesActuellesController.class.getClassLoader().getResource("application/capteur/AM107")).toURI()); + resourcePath = Path.of(DonneesActuellesController.class.getClassLoader().getResource("application/capteur/solaredge").toURI()); } catch (URISyntaxException e) { throw new RuntimeException(e); } - int numberOfSolarDatas= Objects.requireNonNull(solaredgeFile.listFiles()).length; - for(File folder : Objects.requireNonNull(mainFolder.listFiles())){ - fileAmount.put(folder, Objects.requireNonNull(folder.listFiles()).length); + + // Vérifier que le dossier existe + if (!Files.exists(resourcePath) || !Files.isDirectory(resourcePath)) { + System.out.println("Le dossier n'existe pas : " + resourcePath); + return; + } + + // Initialiser le WatchService + WatchService watchService; + try { + watchService = FileSystems.getDefault().newWatchService(); + resourcePath.register(watchService, StandardWatchEventKinds.ENTRY_CREATE, + StandardWatchEventKinds.ENTRY_DELETE, StandardWatchEventKinds.ENTRY_MODIFY); + } catch (IOException e) { + throw new RuntimeException(e); } - while(!terminated){ - for(File folder : Objects.requireNonNull(mainFolder.listFiles())){ - if(Objects.requireNonNull(folder.listFiles()).length>fileAmount.get(folder)){ - try { - displayedListUpdateSoft(folder.getName().toUpperCase()); - } catch (Exception e) { - throw new RuntimeException(e); + + // Compter initialement les fichiers + int previousFileCount = countFilesInDirectory(resourcePath); + System.out.println("Nombre initial de fichiers : " + previousFileCount); + + System.out.println("Surveillance du dossier : " + resourcePath); + + while (true) { + try { + // Attendre un événement + WatchKey key = watchService.take(); + for (WatchEvent event : key.pollEvents()) { + // Type de changement + WatchEvent.Kind kind = event.kind(); + + // Nom du fichier modifié + Path changedFile = (Path) event.context(); + System.out.println("Changement détecté : " + kind.name() + " -> " + changedFile); + controller.setUpSolaredge(); + // Recompter les fichiers + int currentFileCount = countFilesInDirectory(resourcePath); + if (currentFileCount != previousFileCount) { + System.out.println("Le nombre de fichiers a changé ! Nouveau nombre : " + currentFileCount); + previousFileCount = currentFileCount; } } + // Réinitialiser la clé + boolean valid = key.reset(); + if (!valid) { + System.out.println("La clé WatchService n'est plus valide. Arrêt."); + break; + } + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + System.out.println("Surveillance interrompue."); + break; } - if(numberOfSolarDatas < Objects.requireNonNull(solaredgeFile.listFiles()).length){ - setUpSolaredge(); - } + } + + } + // Méthode pour compter les fichiers dans un dossier + private static int countFilesInDirectory(Path path) { + try { + return (int) Files.list(path).filter(Files::isRegularFile).count(); + } catch (IOException e) { + System.out.println("Erreur lors du comptage des fichiers : " + e.getMessage()); + return -1; } } - public void stop(){ + public void stop() { this.terminated = true; } } } + From 6ac1bc8bda2b489d2f2c29c8ca03a8d04b779593 Mon Sep 17 00:00:00 2001 From: DavidTRANMinhAnh <126153957+DavidTRANMinhAnh@users.noreply.github.com> Date: Fri, 6 Dec 2024 09:53:56 +0100 Subject: [PATCH 04/11] Add files MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Ajout des fichiers de créations (version définitive) et d'un fichier Insert (Teste avec quelques inserts) --- BD/Code/INSERTTest.sql | 98 ++++++++++++ BD/Code/ScriptBDDefinitive.sql | 271 +++++++++++++++++++++++++++++++++ 2 files changed, 369 insertions(+) create mode 100644 BD/Code/INSERTTest.sql create mode 100644 BD/Code/ScriptBDDefinitive.sql diff --git a/BD/Code/INSERTTest.sql b/BD/Code/INSERTTest.sql new file mode 100644 index 000000000..3c24ac98a --- /dev/null +++ b/BD/Code/INSERTTest.sql @@ -0,0 +1,98 @@ +-- ---------------------------------------------------------------------------- +-- Inserts pour les tables dans un ordre évitant les erreurs de contraintes +-- ---------------------------------------------------------------------------- + +-- Table PERMISSION +INSERT INTO PERMISSION (NOMPERMISSION) VALUES +('Admin'), +('Utilisateur'); + +-- Table ADRESSE +INSERT INTO ADRESSE (NORUE, VILLE, CODEPOSTAL, PAYS) VALUES +(12, 'Toulouse', '31000', 'France'), +(45, 'Paris', '75000', 'France'); + +-- Table COMPTE +INSERT INTO COMPTE (IDADRESSE, IDPERMISSION, NOM, PRENOM, MAIL, MDP) VALUES +(1, 2, 'John', 'Doe', 'john.doe@example.com', 'password123'), +(2, 1, 'Jane', 'Smith', 'jane.smith@example.com', 'securePass!'); + +-- Table CATEGORIE +INSERT INTO CATEGORIE (NOMCATEG) VALUES +('Confiseries'), +('Chocolats'); + +-- Table PRODUIT +INSERT INTO PRODUIT (IDCATEG, NOMPROD, COMPOSITION, NOTESTECH, DESCRIPTION) VALUES +(1, 'Bonbon Rouge', 'Sucre, Colorant rouge', 'Note technique 1', 'Délicieux bonbon rouge'), +(2, 'Bonbon Bleu', 'Sucre, Colorant bleu', 'Note technique 2', 'Délicieux bonbon bleu'); + +-- Table CB +INSERT INTO CB (NUMCARTE, DATEEXPIRATION, CCV) VALUES +('1234567812345678', '2025-12-31', '123'), +('8765432187654321', '2026-06-30', '456'); + +-- Table PAYPAL +INSERT INTO PAYPAL (MAIL) VALUES +('user1@gmail.com'), +('user2@gmail.com'); + +-- Table OPTIONPAIEMENT +INSERT INTO OPTIONPAIEMENT (NOMOPTION) VALUES +('Carte Bancaire'), +('PayPal'); + +-- Table METHODEPAIEMENT +INSERT INTO METHODEPAIEMENT (IDCOMPTE, IDOPTION, NUMCARTE, IDPAYPAL, STATUS) VALUES +(1, 1, '1234567812345678', NULL, 'Valide'), +(2, 2, NULL, 1, 'Valide'); + +-- Table FORMATPROD +INSERT INTO FORMATPROD (NOMFORMAT) VALUES +('Petit'), +('Grand'); + +-- Table COULEUR +INSERT INTO COULEUR (NOMCOULEUR) VALUES +('Rouge'), +('Bleu'); + +-- Table CONDITIONNEMENT +INSERT INTO CONDITIONNEMENT (NOMCONDI) VALUES +('Sachet'), +('Boîte'); + +-- Table COMMANDE +INSERT INTO COMMANDE (IDADRESSE, IDPAIEMENT, IDCOMPTE, STATUS, DATECOMMANDE, DATELIVR) VALUES +(1, 1, 1, 'Livré', '2024-11-01', '2024-11-05'), +(2, 2, 2, 'En cours', '2024-11-02', NULL); + +-- Table COMMENTAIRE +INSERT INTO COMMENTAIRE (IDCOMPTE, IDPROD, NBETOILE, CONTENU) VALUES +(1, 1, 5, 'Produit incroyable ! Très satisfait.'), +(2, 2, 3, 'Bon produit, mais quelques défauts.'); + +-- Table IMAGE +INSERT INTO IMAGE (IDPROD, NOMFICHIER) VALUES +(1, 'image1.jpg'), +(2, 'image2.jpg'); + +-- Table DISPONIBLECOULEUR +INSERT INTO DISPONIBLECOULEUR (IDCOULEUR, IDPROD) VALUES +(1, 1), +(2, 2); + +-- Table DISPONIBLECONDITIONNEMENT +INSERT INTO DISPONIBLECONDITIONNEMENT (IDCONDI, IDPROD) VALUES +(1, 1), +(2, 2); + +-- Table CONTIENT +INSERT INTO CONTIENT (IDCOMMANDE, IDPROD, QTE) VALUES +(1, 1, 2), +(2, 2, 1); + +-- Table DISPOFORMAT +INSERT INTO DISPOFORMAT (IDFORMAT, IDPROD, PRIX) VALUES +(1, 1, 3.50), +(2, 2, 5.00); diff --git a/BD/Code/ScriptBDDefinitive.sql b/BD/Code/ScriptBDDefinitive.sql new file mode 100644 index 000000000..ece2a05c0 --- /dev/null +++ b/BD/Code/ScriptBDDefinitive.sql @@ -0,0 +1,271 @@ +-- ----------------------------------------------------------------------------- +-- Génération d'une base de données pour +-- MySQL +-- ----------------------------------------------------------------------------- +-- Nom de la base : SAEDevApp1A3 +-- Projet : BDSAEDevApp +-- Auteur : IUT BLAGNAC +-- ----------------------------------------------------------------------------- + +DROP TABLE IF EXISTS DISPONIBLECONDITIONNEMENT; +DROP TABLE IF EXISTS DISPONIBLECOULEUR; +DROP TABLE IF EXISTS DISPOFORMAT; +DROP TABLE IF EXISTS CONTIENT; +DROP TABLE IF EXISTS COMMENTAIRE; +DROP TABLE IF EXISTS COMMANDE; +DROP TABLE IF EXISTS IMAGE; +DROP TABLE IF EXISTS PRODUIT; +DROP TABLE IF EXISTS CATEGORIE; +DROP TABLE IF EXISTS METHODEPAIEMENT; +DROP TABLE IF EXISTS COMPTE; +DROP TABLE IF EXISTS ADRESSE; +DROP TABLE IF EXISTS OPTIONPAIEMENT; +DROP TABLE IF EXISTS PAYPAL; +DROP TABLE IF EXISTS CB; +DROP TABLE IF EXISTS CONDITIONNEMENT; +DROP TABLE IF EXISTS FORMATPROD; +DROP TABLE IF EXISTS COULEUR; +DROP TABLE IF EXISTS PERMISSION; + +-- ----------------------------------------------------------------------------- +-- TABLE : CB +-- ----------------------------------------------------------------------------- + +CREATE TABLE CB + ( + NUMCARTE CHAR(16) NOT NULL, + DATEEXPIRATION DATE NOT NULL, + CCV CHAR(3) NOT NULL, + CONSTRAINT PK_CB PRIMARY KEY (NUMCARTE) + ) ; + +-- ----------------------------------------------------------------------------- +-- TABLE : COMMENTAIRE +-- ----------------------------------------------------------------------------- + +CREATE TABLE COMMENTAIRE + ( + IDCOMMENTAIRE INT AUTO_INCREMENT NOT NULL, + IDCOMPTE INT NOT NULL, + IDPROD INT NOT NULL, + NBETOILE INT(2) NOT NULL, + CONTENU VARCHAR(2047) NOT NULL, + CONSTRAINT PK_COMMENTAIRE PRIMARY KEY (IDCOMMENTAIRE) + ) ; + +-- ----------------------------------------------------------------------------- +-- TABLE : IMAGE +-- ----------------------------------------------------------------------------- + +CREATE TABLE IMAGE + ( + IDIMAGE INT AUTO_INCREMENT NOT NULL, + IDPROD INT NOT NULL, + NOMFICHIER VARCHAR(64) NOT NULL, + CONSTRAINT PK_IMAGE PRIMARY KEY (IDIMAGE) + ) ; + +-- ----------------------------------------------------------------------------- +-- TABLE : PAYPAL +-- ----------------------------------------------------------------------------- + +CREATE TABLE PAYPAL + ( + IDPAYPAL INT AUTO_INCREMENT NOT NULL, + MAIL VARCHAR(128) NOT NULL, + CONSTRAINT PK_PAYPAL PRIMARY KEY (IDPAYPAL) + ) ; + +-- ----------------------------------------------------------------------------- +-- TABLE : COMMANDE +-- ----------------------------------------------------------------------------- + +CREATE TABLE COMMANDE + ( + IDCOMMANDE INT AUTO_INCREMENT NOT NULL, + IDADRESSE INT NOT NULL, + IDPAIEMENT INT NOT NULL, + IDCOMPTE INT NOT NULL, + STATUS VARCHAR(16) NOT NULL, + DATECOMMANDE DATE NOT NULL, + DATELIVR DATE, + CONSTRAINT PK_COMMANDE PRIMARY KEY (IDCOMMANDE) + ) ; + +-- ----------------------------------------------------------------------------- +-- TABLE : FORMAT +-- ----------------------------------------------------------------------------- + +CREATE TABLE FORMATPROD + ( + IDFORMAT INT AUTO_INCREMENT NOT NULL, + NOMFORMAT VARCHAR(32) NOT NULL, + CONSTRAINT PK_FORMAT PRIMARY KEY (IDFORMAT) + ) ; + +-- ----------------------------------------------------------------------------- +-- TABLE : ADRESSE +-- ----------------------------------------------------------------------------- + +CREATE TABLE ADRESSE + ( + IDADRESSE INT AUTO_INCREMENT NOT NULL, + NORUE INT(4) NOT NULL, + VILLE VARCHAR(128) NOT NULL, + CODEPOSTAL CHAR(5) NOT NULL, + PAYS VARCHAR(128) NOT NULL, + CONSTRAINT PK_ADRESSE PRIMARY KEY (IDADRESSE) + ) ; + +-- ----------------------------------------------------------------------------- +-- TABLE : COULEUR +-- ----------------------------------------------------------------------------- + +CREATE TABLE COULEUR + ( + IDCOULEUR INT AUTO_INCREMENT NOT NULL, + NOMCOULEUR VARCHAR(32) NOT NULL, + CONSTRAINT PK_COULEUR PRIMARY KEY (IDCOULEUR) + ) ; + +-- ----------------------------------------------------------------------------- +-- TABLE : PERMISSION +-- ----------------------------------------------------------------------------- + +CREATE TABLE PERMISSION + ( + IDPERMISSION INT AUTO_INCREMENT NOT NULL, + NOMPERMISSION VARCHAR(64) NOT NULL, + CONSTRAINT PK_PERMISSION PRIMARY KEY (IDPERMISSION) + ) ; + +-- ----------------------------------------------------------------------------- +-- TABLE : PRODUIT +-- ----------------------------------------------------------------------------- + +CREATE TABLE PRODUIT + ( + IDPROD INT AUTO_INCREMENT NOT NULL, + IDCATEG INT NOT NULL, + NOMPROD VARCHAR(64) NOT NULL, + COMPOSITION VARCHAR(2047) NOT NULL, + NOTESTECH VARCHAR(2047) NULL, + DESCRIPTION VARCHAR(2047) NULL, + CONSTRAINT PK_PRODUIT PRIMARY KEY (IDPROD) + ) ; + +-- ----------------------------------------------------------------------------- +-- TABLE : METHODEPAIEMENT +-- ----------------------------------------------------------------------------- + +CREATE TABLE METHODEPAIEMENT + ( + IDPAIEMENT INT AUTO_INCREMENT NOT NULL, + IDCOMPTE INT NULL, + IDOPTION INT NOT NULL, + NUMCARTE CHAR(16) NULL, + IDPAYPAL INT NULL, + STATUS VARCHAR(16) NOT NULL, + CONSTRAINT PK_METHODEPAIEMENT PRIMARY KEY (IDPAIEMENT) + ) ; + +-- ----------------------------------------------------------------------------- +-- TABLE : CATEGORIE +-- ----------------------------------------------------------------------------- + +CREATE TABLE CATEGORIE + ( + IDCATEG INT AUTO_INCREMENT NOT NULL, + NOMCATEG VARCHAR(32) NOT NULL, + CONSTRAINT PK_CATEGORIE PRIMARY KEY (IDCATEG) + ) ; + +-- ----------------------------------------------------------------------------- +-- TABLE : CONDITIONNEMENT +-- ----------------------------------------------------------------------------- + +CREATE TABLE CONDITIONNEMENT + ( + IDCONDI INT AUTO_INCREMENT NOT NULL, + NOMCONDI VARCHAR(32) NOT NULL, + CONSTRAINT PK_CONDITIONNEMENT PRIMARY KEY (IDCONDI) + ) ; + +-- ----------------------------------------------------------------------------- +-- TABLE : OPTIONPAIEMENT +-- ----------------------------------------------------------------------------- + +CREATE TABLE OPTIONPAIEMENT + ( + IDOPTION INT AUTO_INCREMENT NOT NULL, + NOMOPTION VARCHAR(32) NOT NULL, + CONSTRAINT PK_OPTIONPAIEMENT PRIMARY KEY (IDOPTION) + ) ; + +-- ----------------------------------------------------------------------------- +-- TABLE : COMPTE +-- ----------------------------------------------------------------------------- + +CREATE TABLE COMPTE + ( + IDCOMPTE INT AUTO_INCREMENT NOT NULL, + IDADRESSE INT NOT NULL, + IDPERMISSION INT NOT NULL, + NOM VARCHAR(32) NOT NULL, + PRENOM VARCHAR(32) NOT NULL, + MAIL VARCHAR(128) NOT NULL, + MDP VARCHAR(128) NOT NULL, + CONSTRAINT PK_COMPTE PRIMARY KEY (IDCOMPTE) + ) ; + +-- ----------------------------------------------------------------------------- +-- TABLE : DISPONIBLECOULEUR +-- ----------------------------------------------------------------------------- + +CREATE TABLE DISPONIBLECOULEUR + ( + IDCOULEUR INT NOT NULL, + IDPROD INT NOT NULL, + CONSTRAINT PK_DISPONIBLECOULEUR PRIMARY KEY (IDCOULEUR, IDPROD) + ) ; + +-- ----------------------------------------------------------------------------- +-- TABLE : DISPONIBLECONDITIONNEMENT +-- ----------------------------------------------------------------------------- + +CREATE TABLE DISPONIBLECONDITIONNEMENT + ( + IDCONDI INT NOT NULL, + IDPROD INT NOT NULL, + CONSTRAINT PK_DISPONIBLECONDITIONNEMENT PRIMARY KEY (IDCONDI, IDPROD) + ) ; + +-- ----------------------------------------------------------------------------- +-- TABLE : CONTIENT +-- ----------------------------------------------------------------------------- + +CREATE TABLE CONTIENT + ( + IDCOMMANDE INT NOT NULL, + IDPROD INT NOT NULL, + QTE INT(4) NOT NULL, + CONSTRAINT PK_CONTIENT PRIMARY KEY (IDCOMMANDE, IDPROD) + ) ; + +-- ----------------------------------------------------------------------------- +-- TABLE : DISPOFORMAT +-- ----------------------------------------------------------------------------- + +CREATE TABLE DISPOFORMAT + ( + IDFORMAT INT NOT NULL, + IDPROD INT NOT NULL, + PRIX DECIMAL(5,2) NOT NULL, + CONSTRAINT PK_DISPOFORMAT PRIMARY KEY (IDFORMAT, IDPROD) + ) ; + +-- ----------------------------------------------------------------------------- +-- CREATION DES REFERENCES DE TABLE +-- ----------------------------------------------------------------------------- + + From 1c9a5cf27e352cd816dff01c90523a908d666d6c Mon Sep 17 00:00:00 2001 From: DavidTRANMinhAnh <126153957+DavidTRANMinhAnh@users.noreply.github.com> Date: Fri, 6 Dec 2024 10:24:24 +0100 Subject: [PATCH 05/11] Delete BD/Code/ScriptBDDefinitive.sql Mauvaise version --- BD/Code/ScriptBDDefinitive.sql | 271 --------------------------------- 1 file changed, 271 deletions(-) delete mode 100644 BD/Code/ScriptBDDefinitive.sql diff --git a/BD/Code/ScriptBDDefinitive.sql b/BD/Code/ScriptBDDefinitive.sql deleted file mode 100644 index ece2a05c0..000000000 --- a/BD/Code/ScriptBDDefinitive.sql +++ /dev/null @@ -1,271 +0,0 @@ --- ----------------------------------------------------------------------------- --- Génération d'une base de données pour --- MySQL --- ----------------------------------------------------------------------------- --- Nom de la base : SAEDevApp1A3 --- Projet : BDSAEDevApp --- Auteur : IUT BLAGNAC --- ----------------------------------------------------------------------------- - -DROP TABLE IF EXISTS DISPONIBLECONDITIONNEMENT; -DROP TABLE IF EXISTS DISPONIBLECOULEUR; -DROP TABLE IF EXISTS DISPOFORMAT; -DROP TABLE IF EXISTS CONTIENT; -DROP TABLE IF EXISTS COMMENTAIRE; -DROP TABLE IF EXISTS COMMANDE; -DROP TABLE IF EXISTS IMAGE; -DROP TABLE IF EXISTS PRODUIT; -DROP TABLE IF EXISTS CATEGORIE; -DROP TABLE IF EXISTS METHODEPAIEMENT; -DROP TABLE IF EXISTS COMPTE; -DROP TABLE IF EXISTS ADRESSE; -DROP TABLE IF EXISTS OPTIONPAIEMENT; -DROP TABLE IF EXISTS PAYPAL; -DROP TABLE IF EXISTS CB; -DROP TABLE IF EXISTS CONDITIONNEMENT; -DROP TABLE IF EXISTS FORMATPROD; -DROP TABLE IF EXISTS COULEUR; -DROP TABLE IF EXISTS PERMISSION; - --- ----------------------------------------------------------------------------- --- TABLE : CB --- ----------------------------------------------------------------------------- - -CREATE TABLE CB - ( - NUMCARTE CHAR(16) NOT NULL, - DATEEXPIRATION DATE NOT NULL, - CCV CHAR(3) NOT NULL, - CONSTRAINT PK_CB PRIMARY KEY (NUMCARTE) - ) ; - --- ----------------------------------------------------------------------------- --- TABLE : COMMENTAIRE --- ----------------------------------------------------------------------------- - -CREATE TABLE COMMENTAIRE - ( - IDCOMMENTAIRE INT AUTO_INCREMENT NOT NULL, - IDCOMPTE INT NOT NULL, - IDPROD INT NOT NULL, - NBETOILE INT(2) NOT NULL, - CONTENU VARCHAR(2047) NOT NULL, - CONSTRAINT PK_COMMENTAIRE PRIMARY KEY (IDCOMMENTAIRE) - ) ; - --- ----------------------------------------------------------------------------- --- TABLE : IMAGE --- ----------------------------------------------------------------------------- - -CREATE TABLE IMAGE - ( - IDIMAGE INT AUTO_INCREMENT NOT NULL, - IDPROD INT NOT NULL, - NOMFICHIER VARCHAR(64) NOT NULL, - CONSTRAINT PK_IMAGE PRIMARY KEY (IDIMAGE) - ) ; - --- ----------------------------------------------------------------------------- --- TABLE : PAYPAL --- ----------------------------------------------------------------------------- - -CREATE TABLE PAYPAL - ( - IDPAYPAL INT AUTO_INCREMENT NOT NULL, - MAIL VARCHAR(128) NOT NULL, - CONSTRAINT PK_PAYPAL PRIMARY KEY (IDPAYPAL) - ) ; - --- ----------------------------------------------------------------------------- --- TABLE : COMMANDE --- ----------------------------------------------------------------------------- - -CREATE TABLE COMMANDE - ( - IDCOMMANDE INT AUTO_INCREMENT NOT NULL, - IDADRESSE INT NOT NULL, - IDPAIEMENT INT NOT NULL, - IDCOMPTE INT NOT NULL, - STATUS VARCHAR(16) NOT NULL, - DATECOMMANDE DATE NOT NULL, - DATELIVR DATE, - CONSTRAINT PK_COMMANDE PRIMARY KEY (IDCOMMANDE) - ) ; - --- ----------------------------------------------------------------------------- --- TABLE : FORMAT --- ----------------------------------------------------------------------------- - -CREATE TABLE FORMATPROD - ( - IDFORMAT INT AUTO_INCREMENT NOT NULL, - NOMFORMAT VARCHAR(32) NOT NULL, - CONSTRAINT PK_FORMAT PRIMARY KEY (IDFORMAT) - ) ; - --- ----------------------------------------------------------------------------- --- TABLE : ADRESSE --- ----------------------------------------------------------------------------- - -CREATE TABLE ADRESSE - ( - IDADRESSE INT AUTO_INCREMENT NOT NULL, - NORUE INT(4) NOT NULL, - VILLE VARCHAR(128) NOT NULL, - CODEPOSTAL CHAR(5) NOT NULL, - PAYS VARCHAR(128) NOT NULL, - CONSTRAINT PK_ADRESSE PRIMARY KEY (IDADRESSE) - ) ; - --- ----------------------------------------------------------------------------- --- TABLE : COULEUR --- ----------------------------------------------------------------------------- - -CREATE TABLE COULEUR - ( - IDCOULEUR INT AUTO_INCREMENT NOT NULL, - NOMCOULEUR VARCHAR(32) NOT NULL, - CONSTRAINT PK_COULEUR PRIMARY KEY (IDCOULEUR) - ) ; - --- ----------------------------------------------------------------------------- --- TABLE : PERMISSION --- ----------------------------------------------------------------------------- - -CREATE TABLE PERMISSION - ( - IDPERMISSION INT AUTO_INCREMENT NOT NULL, - NOMPERMISSION VARCHAR(64) NOT NULL, - CONSTRAINT PK_PERMISSION PRIMARY KEY (IDPERMISSION) - ) ; - --- ----------------------------------------------------------------------------- --- TABLE : PRODUIT --- ----------------------------------------------------------------------------- - -CREATE TABLE PRODUIT - ( - IDPROD INT AUTO_INCREMENT NOT NULL, - IDCATEG INT NOT NULL, - NOMPROD VARCHAR(64) NOT NULL, - COMPOSITION VARCHAR(2047) NOT NULL, - NOTESTECH VARCHAR(2047) NULL, - DESCRIPTION VARCHAR(2047) NULL, - CONSTRAINT PK_PRODUIT PRIMARY KEY (IDPROD) - ) ; - --- ----------------------------------------------------------------------------- --- TABLE : METHODEPAIEMENT --- ----------------------------------------------------------------------------- - -CREATE TABLE METHODEPAIEMENT - ( - IDPAIEMENT INT AUTO_INCREMENT NOT NULL, - IDCOMPTE INT NULL, - IDOPTION INT NOT NULL, - NUMCARTE CHAR(16) NULL, - IDPAYPAL INT NULL, - STATUS VARCHAR(16) NOT NULL, - CONSTRAINT PK_METHODEPAIEMENT PRIMARY KEY (IDPAIEMENT) - ) ; - --- ----------------------------------------------------------------------------- --- TABLE : CATEGORIE --- ----------------------------------------------------------------------------- - -CREATE TABLE CATEGORIE - ( - IDCATEG INT AUTO_INCREMENT NOT NULL, - NOMCATEG VARCHAR(32) NOT NULL, - CONSTRAINT PK_CATEGORIE PRIMARY KEY (IDCATEG) - ) ; - --- ----------------------------------------------------------------------------- --- TABLE : CONDITIONNEMENT --- ----------------------------------------------------------------------------- - -CREATE TABLE CONDITIONNEMENT - ( - IDCONDI INT AUTO_INCREMENT NOT NULL, - NOMCONDI VARCHAR(32) NOT NULL, - CONSTRAINT PK_CONDITIONNEMENT PRIMARY KEY (IDCONDI) - ) ; - --- ----------------------------------------------------------------------------- --- TABLE : OPTIONPAIEMENT --- ----------------------------------------------------------------------------- - -CREATE TABLE OPTIONPAIEMENT - ( - IDOPTION INT AUTO_INCREMENT NOT NULL, - NOMOPTION VARCHAR(32) NOT NULL, - CONSTRAINT PK_OPTIONPAIEMENT PRIMARY KEY (IDOPTION) - ) ; - --- ----------------------------------------------------------------------------- --- TABLE : COMPTE --- ----------------------------------------------------------------------------- - -CREATE TABLE COMPTE - ( - IDCOMPTE INT AUTO_INCREMENT NOT NULL, - IDADRESSE INT NOT NULL, - IDPERMISSION INT NOT NULL, - NOM VARCHAR(32) NOT NULL, - PRENOM VARCHAR(32) NOT NULL, - MAIL VARCHAR(128) NOT NULL, - MDP VARCHAR(128) NOT NULL, - CONSTRAINT PK_COMPTE PRIMARY KEY (IDCOMPTE) - ) ; - --- ----------------------------------------------------------------------------- --- TABLE : DISPONIBLECOULEUR --- ----------------------------------------------------------------------------- - -CREATE TABLE DISPONIBLECOULEUR - ( - IDCOULEUR INT NOT NULL, - IDPROD INT NOT NULL, - CONSTRAINT PK_DISPONIBLECOULEUR PRIMARY KEY (IDCOULEUR, IDPROD) - ) ; - --- ----------------------------------------------------------------------------- --- TABLE : DISPONIBLECONDITIONNEMENT --- ----------------------------------------------------------------------------- - -CREATE TABLE DISPONIBLECONDITIONNEMENT - ( - IDCONDI INT NOT NULL, - IDPROD INT NOT NULL, - CONSTRAINT PK_DISPONIBLECONDITIONNEMENT PRIMARY KEY (IDCONDI, IDPROD) - ) ; - --- ----------------------------------------------------------------------------- --- TABLE : CONTIENT --- ----------------------------------------------------------------------------- - -CREATE TABLE CONTIENT - ( - IDCOMMANDE INT NOT NULL, - IDPROD INT NOT NULL, - QTE INT(4) NOT NULL, - CONSTRAINT PK_CONTIENT PRIMARY KEY (IDCOMMANDE, IDPROD) - ) ; - --- ----------------------------------------------------------------------------- --- TABLE : DISPOFORMAT --- ----------------------------------------------------------------------------- - -CREATE TABLE DISPOFORMAT - ( - IDFORMAT INT NOT NULL, - IDPROD INT NOT NULL, - PRIX DECIMAL(5,2) NOT NULL, - CONSTRAINT PK_DISPOFORMAT PRIMARY KEY (IDFORMAT, IDPROD) - ) ; - --- ----------------------------------------------------------------------------- --- CREATION DES REFERENCES DE TABLE --- ----------------------------------------------------------------------------- - - From 0ed95b8c27b099650c5f02b5e1d2c8f1b7221b7b Mon Sep 17 00:00:00 2001 From: DavidTRANMinhAnh <126153957+DavidTRANMinhAnh@users.noreply.github.com> Date: Fri, 6 Dec 2024 10:24:41 +0100 Subject: [PATCH 06/11] Delete BD/Code/INSERTTest.sql Mauvaise version --- BD/Code/INSERTTest.sql | 98 ------------------------------------------ 1 file changed, 98 deletions(-) delete mode 100644 BD/Code/INSERTTest.sql diff --git a/BD/Code/INSERTTest.sql b/BD/Code/INSERTTest.sql deleted file mode 100644 index 3c24ac98a..000000000 --- a/BD/Code/INSERTTest.sql +++ /dev/null @@ -1,98 +0,0 @@ --- ---------------------------------------------------------------------------- --- Inserts pour les tables dans un ordre évitant les erreurs de contraintes --- ---------------------------------------------------------------------------- - --- Table PERMISSION -INSERT INTO PERMISSION (NOMPERMISSION) VALUES -('Admin'), -('Utilisateur'); - --- Table ADRESSE -INSERT INTO ADRESSE (NORUE, VILLE, CODEPOSTAL, PAYS) VALUES -(12, 'Toulouse', '31000', 'France'), -(45, 'Paris', '75000', 'France'); - --- Table COMPTE -INSERT INTO COMPTE (IDADRESSE, IDPERMISSION, NOM, PRENOM, MAIL, MDP) VALUES -(1, 2, 'John', 'Doe', 'john.doe@example.com', 'password123'), -(2, 1, 'Jane', 'Smith', 'jane.smith@example.com', 'securePass!'); - --- Table CATEGORIE -INSERT INTO CATEGORIE (NOMCATEG) VALUES -('Confiseries'), -('Chocolats'); - --- Table PRODUIT -INSERT INTO PRODUIT (IDCATEG, NOMPROD, COMPOSITION, NOTESTECH, DESCRIPTION) VALUES -(1, 'Bonbon Rouge', 'Sucre, Colorant rouge', 'Note technique 1', 'Délicieux bonbon rouge'), -(2, 'Bonbon Bleu', 'Sucre, Colorant bleu', 'Note technique 2', 'Délicieux bonbon bleu'); - --- Table CB -INSERT INTO CB (NUMCARTE, DATEEXPIRATION, CCV) VALUES -('1234567812345678', '2025-12-31', '123'), -('8765432187654321', '2026-06-30', '456'); - --- Table PAYPAL -INSERT INTO PAYPAL (MAIL) VALUES -('user1@gmail.com'), -('user2@gmail.com'); - --- Table OPTIONPAIEMENT -INSERT INTO OPTIONPAIEMENT (NOMOPTION) VALUES -('Carte Bancaire'), -('PayPal'); - --- Table METHODEPAIEMENT -INSERT INTO METHODEPAIEMENT (IDCOMPTE, IDOPTION, NUMCARTE, IDPAYPAL, STATUS) VALUES -(1, 1, '1234567812345678', NULL, 'Valide'), -(2, 2, NULL, 1, 'Valide'); - --- Table FORMATPROD -INSERT INTO FORMATPROD (NOMFORMAT) VALUES -('Petit'), -('Grand'); - --- Table COULEUR -INSERT INTO COULEUR (NOMCOULEUR) VALUES -('Rouge'), -('Bleu'); - --- Table CONDITIONNEMENT -INSERT INTO CONDITIONNEMENT (NOMCONDI) VALUES -('Sachet'), -('Boîte'); - --- Table COMMANDE -INSERT INTO COMMANDE (IDADRESSE, IDPAIEMENT, IDCOMPTE, STATUS, DATECOMMANDE, DATELIVR) VALUES -(1, 1, 1, 'Livré', '2024-11-01', '2024-11-05'), -(2, 2, 2, 'En cours', '2024-11-02', NULL); - --- Table COMMENTAIRE -INSERT INTO COMMENTAIRE (IDCOMPTE, IDPROD, NBETOILE, CONTENU) VALUES -(1, 1, 5, 'Produit incroyable ! Très satisfait.'), -(2, 2, 3, 'Bon produit, mais quelques défauts.'); - --- Table IMAGE -INSERT INTO IMAGE (IDPROD, NOMFICHIER) VALUES -(1, 'image1.jpg'), -(2, 'image2.jpg'); - --- Table DISPONIBLECOULEUR -INSERT INTO DISPONIBLECOULEUR (IDCOULEUR, IDPROD) VALUES -(1, 1), -(2, 2); - --- Table DISPONIBLECONDITIONNEMENT -INSERT INTO DISPONIBLECONDITIONNEMENT (IDCONDI, IDPROD) VALUES -(1, 1), -(2, 2); - --- Table CONTIENT -INSERT INTO CONTIENT (IDCOMMANDE, IDPROD, QTE) VALUES -(1, 1, 2), -(2, 2, 1); - --- Table DISPOFORMAT -INSERT INTO DISPOFORMAT (IDFORMAT, IDPROD, PRIX) VALUES -(1, 1, 3.50), -(2, 2, 5.00); From 25c6247fd34c4b8c7f7707aca2fbcbde2e113bfa Mon Sep 17 00:00:00 2001 From: DavidTRANMinhAnh <126153957+DavidTRANMinhAnh@users.noreply.github.com> Date: Fri, 6 Dec 2024 10:25:50 +0100 Subject: [PATCH 07/11] Add files via upload MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Ajout de la bonne version de la création de la BD --- BD/Code/ScriptBDDefinitive.sql | 379 +++++++++++++++++++++++++++++++++ 1 file changed, 379 insertions(+) create mode 100644 BD/Code/ScriptBDDefinitive.sql diff --git a/BD/Code/ScriptBDDefinitive.sql b/BD/Code/ScriptBDDefinitive.sql new file mode 100644 index 000000000..6927d1e7e --- /dev/null +++ b/BD/Code/ScriptBDDefinitive.sql @@ -0,0 +1,379 @@ +-- ----------------------------------------------------------------------------- +-- Génération d'une base de données pour +-- MySQL +-- ----------------------------------------------------------------------------- +-- Nom de la base : SAEDevApp1A3 +-- Projet : BDSAEDevApp +-- Auteur : IUT BLAGNAC +-- ----------------------------------------------------------------------------- + +DROP TABLE IF EXISTS DISPONIBLECONDITIONNEMENT; +DROP TABLE IF EXISTS DISPONIBLECOULEUR; +DROP TABLE IF EXISTS DISPOFORMAT; +DROP TABLE IF EXISTS CONTIENT; +DROP TABLE IF EXISTS COMMENTAIRE; +DROP TABLE IF EXISTS COMMANDE; +DROP TABLE IF EXISTS IMAGE; +DROP TABLE IF EXISTS PRODUIT; +DROP TABLE IF EXISTS CATEGORIE; +DROP TABLE IF EXISTS METHODEPAIEMENT; +DROP TABLE IF EXISTS COMPTE; +DROP TABLE IF EXISTS ADRESSE; +DROP TABLE IF EXISTS OPTIONPAIEMENT; +DROP TABLE IF EXISTS PAYPAL; +DROP TABLE IF EXISTS CB; +DROP TABLE IF EXISTS CONDITIONNEMENT; +DROP TABLE IF EXISTS FORMATPROD; +DROP TABLE IF EXISTS COULEUR; +DROP TABLE IF EXISTS PERMISSION; + +-- ----------------------------------------------------------------------------- +-- TABLE : CB +-- ----------------------------------------------------------------------------- + +CREATE TABLE CB + ( + NUMCARTE CHAR(16) NOT NULL, + DATEEXPIRATION DATE NOT NULL, + CCV CHAR(3) NOT NULL, + CONSTRAINT PK_CB PRIMARY KEY (NUMCARTE) + ) ; + +-- ----------------------------------------------------------------------------- +-- TABLE : COMMENTAIRE +-- ----------------------------------------------------------------------------- + +CREATE TABLE COMMENTAIRE + ( + IDCOMMENTAIRE INT AUTO_INCREMENT NOT NULL, + IDCOMPTE INT NOT NULL, + IDPROD INT NOT NULL, + NBETOILE INT(2) NOT NULL, + CONTENU VARCHAR(2047) NOT NULL, + CONSTRAINT PK_COMMENTAIRE PRIMARY KEY (IDCOMMENTAIRE) + ) ; + +-- ----------------------------------------------------------------------------- +-- TABLE : IMAGE +-- ----------------------------------------------------------------------------- + +CREATE TABLE IMAGE + ( + IDIMAGE INT AUTO_INCREMENT NOT NULL, + IDPROD INT NOT NULL, + NOMFICHIER VARCHAR(64) NOT NULL, + CONSTRAINT PK_IMAGE PRIMARY KEY (IDIMAGE) + ) ; + +-- ----------------------------------------------------------------------------- +-- TABLE : PAYPAL +-- ----------------------------------------------------------------------------- + +CREATE TABLE PAYPAL + ( + IDPAYPAL INT AUTO_INCREMENT NOT NULL, + MAIL VARCHAR(128) NOT NULL, + CONSTRAINT PK_PAYPAL PRIMARY KEY (IDPAYPAL) + ) ; + +-- ----------------------------------------------------------------------------- +-- TABLE : COMMANDE +-- ----------------------------------------------------------------------------- + +CREATE TABLE COMMANDE + ( + IDCOMMANDE INT AUTO_INCREMENT NOT NULL, + IDADRESSE INT NOT NULL, + IDPAIEMENT INT NOT NULL, + IDCOMPTE INT NOT NULL, + STATUS VARCHAR(16) NOT NULL, + DATECOMMANDE DATE NOT NULL, + DATELIVR DATE, + CONSTRAINT PK_COMMANDE PRIMARY KEY (IDCOMMANDE) + ) ; + +-- ----------------------------------------------------------------------------- +-- TABLE : FORMAT +-- ----------------------------------------------------------------------------- + +CREATE TABLE FORMATPROD + ( + IDFORMAT INT AUTO_INCREMENT NOT NULL, + NOMFORMAT VARCHAR(32) NOT NULL, + CONSTRAINT PK_FORMAT PRIMARY KEY (IDFORMAT) + ) ; + +-- ----------------------------------------------------------------------------- +-- TABLE : ADRESSE +-- ----------------------------------------------------------------------------- + +CREATE TABLE ADRESSE + ( + IDADRESSE INT AUTO_INCREMENT NOT NULL, + NORUE INT(4) NOT NULL, + VILLE VARCHAR(128) NOT NULL, + CODEPOSTAL CHAR(5) NOT NULL, + PAYS VARCHAR(128) NOT NULL, + CONSTRAINT PK_ADRESSE PRIMARY KEY (IDADRESSE) + ) ; + +-- ----------------------------------------------------------------------------- +-- TABLE : COULEUR +-- ----------------------------------------------------------------------------- + +CREATE TABLE COULEUR + ( + IDCOULEUR INT AUTO_INCREMENT NOT NULL, + NOMCOULEUR VARCHAR(32) NOT NULL, + CONSTRAINT PK_COULEUR PRIMARY KEY (IDCOULEUR) + ) ; + +-- ----------------------------------------------------------------------------- +-- TABLE : PERMISSION +-- ----------------------------------------------------------------------------- + +CREATE TABLE PERMISSION + ( + IDPERMISSION INT AUTO_INCREMENT NOT NULL, + NOMPERMISSION VARCHAR(64) NOT NULL, + CONSTRAINT PK_PERMISSION PRIMARY KEY (IDPERMISSION) + ) ; + +-- ----------------------------------------------------------------------------- +-- TABLE : PRODUIT +-- ----------------------------------------------------------------------------- + +CREATE TABLE PRODUIT + ( + IDPROD INT AUTO_INCREMENT NOT NULL, + IDCATEG INT NOT NULL, + NOMPROD VARCHAR(64) NOT NULL, + COMPOSITION VARCHAR(2047) NOT NULL, + NOTESTECH VARCHAR(2047) NULL, + DESCRIPTION VARCHAR(2047) NULL, + CONSTRAINT PK_PRODUIT PRIMARY KEY (IDPROD) + ) ; + +-- ----------------------------------------------------------------------------- +-- TABLE : METHODEPAIEMENT +-- ----------------------------------------------------------------------------- + +CREATE TABLE METHODEPAIEMENT + ( + IDPAIEMENT INT AUTO_INCREMENT NOT NULL, + IDCOMPTE INT NULL, + IDOPTION INT NOT NULL, + NUMCARTE CHAR(16) NULL, + IDPAYPAL INT NULL, + STATUS VARCHAR(16) NOT NULL, + CONSTRAINT PK_METHODEPAIEMENT PRIMARY KEY (IDPAIEMENT) + ) ; + +-- ----------------------------------------------------------------------------- +-- TABLE : CATEGORIE +-- ----------------------------------------------------------------------------- + +CREATE TABLE CATEGORIE + ( + IDCATEG INT AUTO_INCREMENT NOT NULL, + NOMCATEG VARCHAR(32) NOT NULL, + CONSTRAINT PK_CATEGORIE PRIMARY KEY (IDCATEG) + ) ; + +-- ----------------------------------------------------------------------------- +-- TABLE : CONDITIONNEMENT +-- ----------------------------------------------------------------------------- + +CREATE TABLE CONDITIONNEMENT + ( + IDCONDI INT AUTO_INCREMENT NOT NULL, + NOMCONDI VARCHAR(32) NOT NULL, + CONSTRAINT PK_CONDITIONNEMENT PRIMARY KEY (IDCONDI) + ) ; + +-- ----------------------------------------------------------------------------- +-- TABLE : OPTIONPAIEMENT +-- ----------------------------------------------------------------------------- + +CREATE TABLE OPTIONPAIEMENT + ( + IDOPTION INT AUTO_INCREMENT NOT NULL, + NOMOPTION VARCHAR(32) NOT NULL, + CONSTRAINT PK_OPTIONPAIEMENT PRIMARY KEY (IDOPTION) + ) ; + +-- ----------------------------------------------------------------------------- +-- TABLE : COMPTE +-- ----------------------------------------------------------------------------- + +CREATE TABLE COMPTE + ( + IDCOMPTE INT AUTO_INCREMENT NOT NULL, + IDADRESSE INT NOT NULL, + IDPERMISSION INT NOT NULL, + NOM VARCHAR(32) NOT NULL, + PRENOM VARCHAR(32) NOT NULL, + MAIL VARCHAR(128) NOT NULL, + MDP VARCHAR(128) NOT NULL, + CONSTRAINT PK_COMPTE PRIMARY KEY (IDCOMPTE) + ) ; + +-- ----------------------------------------------------------------------------- +-- TABLE : DISPONIBLECOULEUR +-- ----------------------------------------------------------------------------- + +CREATE TABLE DISPONIBLECOULEUR + ( + IDCOULEUR INT NOT NULL, + IDPROD INT NOT NULL, + CONSTRAINT PK_DISPONIBLECOULEUR PRIMARY KEY (IDCOULEUR, IDPROD) + ) ; + +-- ----------------------------------------------------------------------------- +-- TABLE : DISPONIBLECONDITIONNEMENT +-- ----------------------------------------------------------------------------- + +CREATE TABLE DISPONIBLECONDITIONNEMENT + ( + IDCONDI INT NOT NULL, + IDPROD INT NOT NULL, + CONSTRAINT PK_DISPONIBLECONDITIONNEMENT PRIMARY KEY (IDCONDI, IDPROD) + ) ; + +-- ----------------------------------------------------------------------------- +-- TABLE : CONTIENT +-- ----------------------------------------------------------------------------- + +CREATE TABLE CONTIENT + ( + IDCOMMANDE INT NOT NULL, + IDPROD INT NOT NULL, + QTE INT(4) NOT NULL, + CONSTRAINT PK_CONTIENT PRIMARY KEY (IDCOMMANDE, IDPROD) + ) ; + +-- ----------------------------------------------------------------------------- +-- TABLE : DISPOFORMAT +-- ----------------------------------------------------------------------------- + +CREATE TABLE DISPOFORMAT + ( + IDFORMAT INT NOT NULL, + IDPROD INT NOT NULL, + PRIX DECIMAL(5,2) NOT NULL, + CONSTRAINT PK_DISPOFORMAT PRIMARY KEY (IDFORMAT, IDPROD) + ) ; + +-- ----------------------------------------------------------------------------- +-- CREATION DES REFERENCES DE TABLE +-- ----------------------------------------------------------------------------- + +ALTER TABLE COMMENTAIRE ADD ( + CONSTRAINT FK_COMMENTAIRE_COMPTE + FOREIGN KEY (IDCOMPTE) + REFERENCES COMPTE (IDCOMPTE)) ; + +ALTER TABLE COMMENTAIRE ADD ( + CONSTRAINT FK_COMMENTAIRE_PRODUIT + FOREIGN KEY (IDPROD) + REFERENCES PRODUIT (IDPROD)) ; + +ALTER TABLE IMAGE ADD ( + CONSTRAINT FK_IMAGE_PRODUIT + FOREIGN KEY (IDPROD) + REFERENCES PRODUIT (IDPROD)) ; + +ALTER TABLE COMMANDE ADD ( + CONSTRAINT FK_COMMANDE_ADRESSE + FOREIGN KEY (IDADRESSE) + REFERENCES ADRESSE (IDADRESSE)) ; + +ALTER TABLE COMMANDE ADD ( + CONSTRAINT FK_COMMANDE_METHODEPAIEMENT + FOREIGN KEY (IDPAIEMENT) + REFERENCES METHODEPAIEMENT (IDPAIEMENT)) ; + +ALTER TABLE COMMANDE ADD ( + CONSTRAINT FK_COMMANDE_COMPTE + FOREIGN KEY (IDCOMPTE) + REFERENCES COMPTE (IDCOMPTE)) ; + +ALTER TABLE PRODUIT ADD ( + CONSTRAINT FK_PRODUIT_CATEGORIE + FOREIGN KEY (IDCATEG) + REFERENCES CATEGORIE (IDCATEG)) ; + +ALTER TABLE METHODEPAIEMENT ADD ( + CONSTRAINT FK_METHODEPAIEMENT_COMPTE + FOREIGN KEY (IDCOMPTE) + REFERENCES COMPTE (IDCOMPTE)) ; + +ALTER TABLE METHODEPAIEMENT ADD ( + CONSTRAINT FK_METHODEPAIEMENT_OPTIONPAIEM + FOREIGN KEY (IDOPTION) + REFERENCES OPTIONPAIEMENT (IDOPTION)) ; + +ALTER TABLE METHODEPAIEMENT ADD ( + CONSTRAINT FK_METHODEPAIEMENT_CB + FOREIGN KEY (NUMCARTE) + REFERENCES CB (NUMCARTE)) ; + +ALTER TABLE METHODEPAIEMENT ADD ( + CONSTRAINT FK_METHODEPAIEMENT_PAYPAL + FOREIGN KEY (IDPAYPAL) + REFERENCES PAYPAL (IDPAYPAL)) ; + +ALTER TABLE COMPTE ADD ( + CONSTRAINT FK_COMPTE_ADRESSE + FOREIGN KEY (IDADRESSE) + REFERENCES ADRESSE (IDADRESSE)) ; + +ALTER TABLE COMPTE ADD ( + CONSTRAINT FK_COMPTE_PERMISSION + FOREIGN KEY (IDPERMISSION) + REFERENCES PERMISSION (IDPERMISSION)) ; + +ALTER TABLE DISPONIBLECOULEUR ADD ( + CONSTRAINT FK_DISPONIBLECOULEUR_COULEUR + FOREIGN KEY (IDCOULEUR) + REFERENCES COULEUR (IDCOULEUR)) ; + +ALTER TABLE DISPONIBLECOULEUR ADD ( + CONSTRAINT FK_DISPONIBLECOULEUR_PRODUIT + FOREIGN KEY (IDPROD) + REFERENCES PRODUIT (IDPROD)) ; + +ALTER TABLE DISPONIBLECONDITIONNEMENT ADD ( + CONSTRAINT FK_DISPONIBLECONDITIONNEMENT_C + FOREIGN KEY (IDCONDI) + REFERENCES CONDITIONNEMENT (IDCONDI)) ; + +ALTER TABLE DISPONIBLECONDITIONNEMENT ADD ( + CONSTRAINT FK_DISPONIBLECONDITIONNEMENT_P + FOREIGN KEY (IDPROD) + REFERENCES PRODUIT (IDPROD)) ; + +ALTER TABLE CONTIENT ADD ( + CONSTRAINT FK_CONTIENT_COMMANDE + FOREIGN KEY (IDCOMMANDE) + REFERENCES COMMANDE (IDCOMMANDE)) ; + +ALTER TABLE CONTIENT ADD ( + CONSTRAINT FK_CONTIENT_PRODUIT + FOREIGN KEY (IDPROD) + REFERENCES PRODUIT (IDPROD)) ; + +ALTER TABLE DISPOFORMAT ADD ( + CONSTRAINT FK_DISPOFORMAT_FORMAT + FOREIGN KEY (IDFORMAT) + REFERENCES FORMATPROD (IDFORMAT)) ; + +ALTER TABLE DISPOFORMAT ADD ( + CONSTRAINT FK_DISPOFORMAT_PRODUIT + FOREIGN KEY (IDPROD) + REFERENCES PRODUIT (IDPROD)) ; + + +-- ----------------------------------------------------------------------------- +-- FIN DE GENERATION +-- ----------------------------------------------------------------------------- From 01bc30d9ef2a1f4c07a1c248ead45e568bfc75dc Mon Sep 17 00:00:00 2001 From: DavidTRANMinhAnh <126153957+DavidTRANMinhAnh@users.noreply.github.com> Date: Fri, 6 Dec 2024 11:41:05 +0100 Subject: [PATCH 08/11] Add files via upload MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Version corrigé des inserts --- BD/Code/INSERT.sql | 199 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 199 insertions(+) create mode 100644 BD/Code/INSERT.sql diff --git a/BD/Code/INSERT.sql b/BD/Code/INSERT.sql new file mode 100644 index 000000000..db3a66ada --- /dev/null +++ b/BD/Code/INSERT.sql @@ -0,0 +1,199 @@ +-- ---------------------------------------------------------------------------- +-- Inserts pour les tables dans un ordre évitant les erreurs de contraintes +-- ---------------------------------------------------------------------------- + +-- Table PERMISSION +INSERT INTO PERMISSION (NOMPERMISSION) VALUES +('Admin'), +('Utilisateur'); + +-- Table ADRESSE +INSERT INTO ADRESSE (NORUE, VILLE, CODEPOSTAL, PAYS) VALUES +(12, 'Toulouse', '31000', 'France'), +(45, 'Paris', '75000', 'France'), +(1, 'Marseille', '13000', 'France'), +(22, 'Lyon', '69000', 'France'), +(38, 'Nice', '06000', 'France'), +(14, 'Bordeaux', '33000', 'France'), +(56, 'Lille', '59000', 'France'), +(67, 'Strasbourg', '67000', 'France'), +(29, 'Nantes', '44000', 'France'), +(84, 'Montpellier', '34000', 'France'), +(99, 'Rennes', '35000', 'France'), +(10, 'Brest', '29200', 'France'); + +-- Table COMPTE +INSERT INTO COMPTE (IDADRESSE, IDPERMISSION, NOM, PRENOM, MAIL, MDP) VALUES +(1, 2, 'John', 'Doe', 'john.doe@example.com', 'password123'), +(2, 1, 'Jane', 'Smith', 'jane.smith@example.com', 'securePass!'), +(1, 1, 'David', 'Tran', 'david.tran@example.com', 'adminPass1'), +(2, 1, 'Pierre', 'Cornu', 'pierre.cornu@example.com', 'adminPass2'), +(3, 1, 'Raphael', 'Lamothe', 'raphael.lamothe@example.com', 'adminPass3'), +(4, 1, 'Naria', 'Savary', 'naria.savary@example.com', 'adminPass4'), +(5, 2, 'John', 'Doe', 'john.doe@example.com', 'password123'), +(6, 2, 'Jane', 'Smith', 'jane.smith@example.com', 'securePass!'), +(7, 2, 'Alice', 'Brown', 'alice.brown@example.com', 'alicePass2024'), +(8, 2, 'Michael', 'Johnson', 'michael.johnson@example.com', 'michael123'), +(9, 2, 'Sophia', 'Williams', 'sophia.williams@example.com', 'sophiaPass987'), +(10, 2, 'James', 'Jones', 'james.jones@example.com', 'james789Pass'); + +-- Table CATEGORIE +INSERT INTO CATEGORIE (NOMCATEG) VALUES +('GELIFIES'), +('ARTISANAUX'), +('K''ROKANTE'), +('VEGANDY'), +('CHOUPIPOP'), +('CHOCOBOOM'), +('PRALOUP'), +('FONDOO'), +('CHOCOCRAQ'); + +-- Table PRODUIT +INSERT INTO PRODUIT (IDCATEG, NOMPROD, COMPOSITION, NOTESTECH, DESCRIPTION) VALUES +(1, 'Bonbon Rouge', 'Sucre, Colorant rouge', 'Note technique 1', 'Délicieux bonbon rouge'), +(2, 'Bonbon Bleu', 'Sucre, Colorant bleu', 'Note technique 2', 'Délicieux bonbon bleu'), +(1, 'Bonbon Cerise', 'Sucre, Colorant rouge, Arôme cerise', 'Note technique 3', 'Délicieux bonbon au goût de cerise'), +(1, 'Bonbon Pêche', 'Sucre, Colorant orange, Arôme pêche', 'Note technique 4', 'Bonbon fruité à la saveur de pêche'), +(2, 'Bonbon Miel', 'Sucre, Miel, Arôme naturel', 'Note technique 5', 'Bonbon au goût doux et sucré de miel'), +(2, 'Bonbon Noisette', 'Sucre, Noisette grillée', 'Note technique 6', 'Bonbon aux saveurs délicates de noisette grillée'), +(3, 'Bonbon Crousti-Pop', 'Sucre, Riz soufflé, Arôme caramel', 'Note technique 7', 'Bonbon croquant avec du riz soufflé au caramel'), +(3, 'Bonbon Croque-Cacao', 'Sucre, Pépites de cacao', 'Note technique 8', 'Bonbon croquant avec des morceaux de cacao intense'), +(4, 'Bonbon Veggie', 'Sucre, Carottes, Arôme naturel', 'Note technique 9', 'Bonbon à la carotte avec une touche sucrée et saine'), +(4, 'Bonbon Pomme Verte', 'Sucre, Colorant vert, Arôme pomme', 'Note technique 10', 'Bonbon frais au goût de pomme verte'), +(5, 'Bonbon Popcorn', 'Sucre, Popcorn, Arôme caramel', 'Note technique 11', 'Bonbon au goût popcorn sucré avec un arôme de caramel'), +(5, 'Bonbon Cola', 'Sucre, Arôme cola', 'Note technique 12', 'Bonbon au goût rafraîchissant de cola'), +(6, 'Bonbon Épicé', 'Sucre, Cannelle, Gingembre', 'Note technique 13', 'Bonbon épicé avec une combinaison de cannelle et gingembre'), +(6, 'Bonbon Curry', 'Sucre, Curry, Arôme naturel', 'Note technique 14', 'Bonbon au goût spécial et épicé de curry'), +(7, 'Bonbon Praliné', 'Sucre, Praliné, Chocolat', 'Note technique 15', 'Bonbon crémeux au praliné avec une enrobée de chocolat'), +(7, 'Bonbon Chocolat', 'Sucre, Cacao, Lait', 'Note technique 16', 'Bonbon au chocolat riche et crémeux'), +(8, 'Bonbon Fondant', 'Sucre, Sirop de glucose', 'Note technique 17', 'Bonbon fondant avec une texture douce et sucrée'), +(8, 'Bonbon Fondue', 'Sucre, Chocolat fondu', 'Note technique 18', 'Bonbon à la texture fondante avec du chocolat fondu'), +(9, 'Bonbon Craquant', 'Sucre, Amandes grillées', 'Note technique 19', 'Bonbon croquant avec des morceaux d’amandes grillées'), +(9, 'Bonbon Fudge', 'Sucre, Beurre, Lait', 'Note technique 20', 'Bonbon au goût crémeux et sucré de fudge'), +(1, 'Bonbon Fraise', 'Sucre, Colorant rouge, Arôme fraise', 'Note technique 23', 'Bonbon sucré au délicieux goût de fraise'), +(1, 'Bonbon Framboise', 'Sucre, Colorant rose, Arôme framboise', 'Note technique 24', 'Bonbon fruité avec une saveur douce de framboise'), +(2, 'Bonbon Vanille', 'Sucre, Vanille naturelle', 'Note technique 25', 'Bonbon au goût crémeux de vanille pure'), +(2, 'Bonbon Praliné Caramel', 'Sucre, Caramel, Praliné', 'Note technique 26', 'Bonbon savoureux avec une touche de praliné et caramel'), +(3, 'Bonbon Caramel Croquant', 'Sucre, Caramel, Amandes', 'Note technique 27', 'Bonbon croquant avec du caramel et des amandes grillées'), +(3, 'Bonbon Pop Corn', 'Sucre, Riz soufflé, Beurre', 'Note technique 28', 'Bonbon à la texture légère de popcorn avec un goût sucré'), +(4, 'Bonbon Mangue', 'Sucre, Mangue, Arôme tropical', 'Note technique 29', 'Bonbon fruité avec une saveur exotique de mangue'), +(4, 'Bonbon Citron Vert', 'Sucre, Arôme citron vert', 'Note technique 30', 'Bonbon au goût rafraîchissant de citron vert'), +(5, 'Bonbon Sucette', 'Sucre, Arôme fruits rouges', 'Note technique 31', 'Sucette au goût de fruits rouges sucrés'), +(5, 'Bonbon Cola Fizz', 'Sucre, Arôme cola, Acide citrique', 'Note technique 32', 'Bonbon au goût cola avec une touche acidulée'), +(6, 'Bonbon Gingembre Citron', 'Sucre, Gingembre, Citron', 'Note technique 33', 'Bonbon épicé et frais avec du gingembre et du citron'), +(6, 'Bonbon Chili Mangue', 'Sucre, Piment, Mangue', 'Note technique 34', 'Bonbon avec un mélange piquant de chili et mangue'), +(7, 'Bonbon Chocolat Noir', 'Sucre, Cacao pur', 'Note technique 35', 'Bonbon au chocolat noir intense et riche'), +(7, 'Bonbon Chocolat Praliné', 'Sucre, Chocolat, Praliné', 'Note technique 36', 'Bonbon au chocolat avec une garniture crémeuse de praliné'), +(8, 'Bonbon Crème Brûlée', 'Sucre, Crème, Vanille', 'Note technique 37', 'Bonbon au goût de crème brûlée avec une texture fondante'), +(8, 'Bonbon Tiramisu', 'Sucre, Café, Mascarpone', 'Note technique 38', 'Bonbon au goût de tiramisu, crémeux et raffiné'), +(9, 'Bonbon Amandes Salées', 'Sucre, Amandes, Sel', 'Note technique 39', 'Bonbon sucré-salé avec des amandes grillées et un peu de sel'), +(9, 'Bonbon Nougat', 'Sucre, Amandes, Miel', 'Note technique 40', 'Bonbon au nougat doux avec des amandes croquantes'), +(1, 'Bonbon Cerise Noire', 'Sucre, Arôme cerise noire', 'Note technique 43', 'Bonbon au délicieux goût de cerise noire'), +(2, 'Bonbon Orange Sanguine', 'Sucre, Arôme orange sanguine', 'Note technique 44', 'Bonbon fruité avec un goût d’orange sanguine'), +(1, 'Bonbon Ananas', 'Sucre, Arôme ananas', 'Note technique 45', 'Bonbon sucré au goût frais d\'ananas'), +(1, 'Bonbon Melon', 'Sucre, Arôme melon', 'Note technique 46', 'Bonbon avec un goût sucré et rafraîchissant de melon'), +(2, 'Bonbon Pistache', 'Sucre, Pistache, Arôme naturel', 'Note technique 47', 'Bonbon avec une saveur douce et légèrement salée de pistache'), +(2, 'Bonbon Banane', 'Sucre, Arôme banane', 'Note technique 48', 'Bonbon au goût exotique de banane mûre'), +(3, 'Bonbon Chocolat Caramel', 'Sucre, Cacao, Caramel', 'Note technique 49', 'Bonbon au chocolat avec une touche de caramel sucré'), +(3, 'Bonbon Chocolat au Lait Praliné', 'Sucre, Chocolat au lait, Praliné', 'Note technique 50', 'Bonbon crémeux au chocolat au lait et à la garniture de praliné'), +(4, 'Bonbon Ananas-Coco', 'Sucre, Ananas, Coco', 'Note technique 51', 'Bonbon avec une saveur tropicale d\'ananas et de noix de coco'), +(4, 'Bonbon Kiwi', 'Sucre, Arôme kiwi', 'Note technique 52', 'Bonbon fruité avec une saveur acidulée de kiwi'), +(5, 'Bonbon Framboise-Litchi', 'Sucre, Framboise, Litchi', 'Note technique 53', 'Bonbon au goût sucré et exotique de framboise et litchi'), +(5, 'Bonbon Orange Menthe', 'Sucre, Arôme orange, Menthe', 'Note technique 54', 'Bonbon frais avec un mélange d\'orange et de menthe'), +(6, 'Bonbon Pomme Cannelle', 'Sucre, Pomme, Cannelle', 'Note technique 55', 'Bonbon doux et épicé avec des arômes de pomme et de cannelle'), +(6, 'Bonbon Poivre-Rose', 'Sucre, Poivre rose, Arôme fruité', 'Note technique 56', 'Bonbon épicé avec une pointe de poivre rose et de fruits'), +(7, 'Bonbon Chocolat Amandes', 'Sucre, Chocolat, Amandes', 'Note technique 57', 'Bonbon au chocolat intense avec des morceaux croquants d\'amandes'), +(7, 'Bonbon Praliné Coco', 'Sucre, Praliné, Noix de coco', 'Note technique 58', 'Bonbon au praliné doux et à la noix de coco râpée'), +(8, 'Bonbon Caramel Vanille', 'Sucre, Caramel, Vanille', 'Note technique 59', 'Bonbon au goût riche de caramel et de vanille'), +(8, 'Bonbon Chocolat Blanc Vanille', 'Sucre, Chocolat blanc, Vanille', 'Note technique 60', 'Bonbon au chocolat blanc crémeux et à la vanille douce'), +(9, 'Bonbon Fruits Secs', 'Sucre, Raisins secs, Amandes', 'Note technique 61', 'Bonbon croquant avec des fruits secs et des raisins'), +(9, 'Bonbon Cacao Noisettes', 'Sucre, Cacao, Noisettes', 'Note technique 62', 'Bonbon avec une saveur riche de cacao et de noisettes grillées'), +(1, 'Bonbon Abricot', 'Sucre, Arôme abricot', 'Note technique 65', 'Bonbon sucré au goût d\'abricot bien mûr'), +(1, 'Bonbon Framboise Menthe', 'Sucre, Arôme framboise, Menthe', 'Note technique 66', 'Bonbon rafraîchissant avec un mélange de framboise et menthe'), +(2, 'Bonbon Caramel Beurre Salé', 'Sucre, Beurre salé, Caramel', 'Note technique 67', 'Bonbon doux et salé au caramel beurre salé'), +(2, 'Bonbon Café Noisette', 'Sucre, Café, Noisette', 'Note technique 68', 'Bonbon énergisant avec un mélange de café et de noisettes grillées'), +(3, 'Bonbon Choco-Coco', 'Sucre, Chocolat, Noix de coco râpée', 'Note technique 69', 'Bonbon au chocolat avec une garniture de noix de coco râpée'), +(3, 'Bonbon Choco-Menthe', 'Sucre, Chocolat, Menthe', 'Note technique 70', 'Bonbon au chocolat avec une touche rafraîchissante de menthe'), +(4, 'Bonbon Citron Basilic', 'Sucre, Arôme citron, Basilic', 'Note technique 71', 'Bonbon au goût sucré-acidulé de citron et une pointe de basilic frais'), +(4, 'Bonbon Fraise-Banane', 'Sucre, Arôme fraise, Arôme banane', 'Note technique 72', 'Bonbon sucré avec un mélange de fraise et banane'), +(5, 'Bonbon Orange Miel', 'Sucre, Arôme orange, Miel', 'Note technique 73', 'Bonbon doux et fruité avec un mélange d\'orange et de miel'), +(5, 'Bonbon Citron-Pamplemousse', 'Sucre, Arôme citron, Arôme pamplemousse', 'Note technique 74', 'Bonbon fruité avec une saveur rafraîchissante de citron et pamplemousse'), +(6, 'Bonbon Gingembre Orange', 'Sucre, Gingembre, Arôme orange', 'Note technique 75', 'Bonbon épicé et rafraîchissant avec du gingembre et de l\'orange'), +(6, 'Bonbon Citron Piment', 'Sucre, Citron, Piment', 'Note technique 76', 'Bonbon épicé et citronné pour les amateurs de saveurs fortes'), +(7, 'Bonbon Chocolat Fraise', 'Sucre, Chocolat, Arôme fraise', 'Note technique 77', 'Bonbon au chocolat avec une touche fruitée de fraise'), +(7, 'Bonbon Chocolat Caramel Noisettes', 'Sucre, Chocolat, Caramel, Noisettes', 'Note technique 78', 'Bonbon au chocolat avec une touche de caramel et des noisettes croquantes'), +(8, 'Bonbon Praliné Café', 'Sucre, Praliné, Café', 'Note technique 79', 'Bonbon doux au praliné avec une touche de café intense'), +(8, 'Bonbon Crème de Marron', 'Sucre, Crème de marron', 'Note technique 80', 'Bonbon crémeux à la saveur douce et sucrée de marron'), +(9, 'Bonbon Pépites de Chocolat', 'Sucre, Chocolat, Pépites de chocolat', 'Note technique 81', 'Bonbon croquant avec des morceaux de chocolat fondant'), +(9, 'Bonbon Amande Chocolat', 'Sucre, Amandes, Chocolat', 'Note technique 82', 'Bonbon avec des amandes croquantes et une couverture de chocolat fondant'); + +-- Table CB +INSERT INTO CB (NUMCARTE, DATEEXPIRATION, CCV) VALUES +('1234567812345678', '2025-12-31', '123'), +('8765432187654321', '2026-06-30', '456'); + +-- Table PAYPAL +INSERT INTO PAYPAL (MAIL) VALUES +('john.doe@example.com'), +('jane.smith@example.com'); + +-- Table OPTIONPAIEMENT +INSERT INTO OPTIONPAIEMENT (NOMOPTION) VALUES +('Carte Bancaire'), +('PayPal'); + +-- Table METHODEPAIEMENT +INSERT INTO METHODEPAIEMENT (IDCOMPTE, IDOPTION, NUMCARTE, IDPAYPAL, STATUS) VALUES +(1, 1, '1234567812345678', NULL, 'Valide'), +(2, 2, NULL, 1, 'Valide'); + +-- Table FORMATPROD +INSERT INTO FORMATPROD (NOMFORMAT) VALUES +('Petit'), +('Grand'); + +-- Table COULEUR +INSERT INTO COULEUR (NOMCOULEUR) VALUES +('Rouge'), +('Bleu'); + +-- Table CONDITIONNEMENT +INSERT INTO CONDITIONNEMENT (NOMCONDI) VALUES +('Sachet'), +('Boîte'); + +-- Table COMMANDE +INSERT INTO COMMANDE (IDADRESSE, IDPAIEMENT, IDCOMPTE, STATUS, DATECOMMANDE, DATELIVR) VALUES +(1, 1, 1, 'Livré', '2024-11-01', '2024-11-05'), +(2, 2, 2, 'En cours', '2024-11-02', NULL); + +-- Table COMMENTAIRE +INSERT INTO COMMENTAIRE (IDCOMPTE, IDPROD, NBETOILE, CONTENU) VALUES +(1, 1, 5, 'Produit incroyable ! Très satisfait.'), +(2, 2, 3, 'Bon produit, mais quelques défauts.'); + +-- Table IMAGE +INSERT INTO IMAGE (IDPROD, NOMFICHIER) VALUES +(1, 'image1.jpg'), +(2, 'image2.jpg'); + +-- Table DISPONIBLECOULEUR +INSERT INTO DISPONIBLECOULEUR (IDCOULEUR, IDPROD) VALUES +(1, 1), +(2, 2); + +-- Table DISPONIBLECONDITIONNEMENT +INSERT INTO DISPONIBLECONDITIONNEMENT (IDCONDI, IDPROD) VALUES +(1, 1), +(2, 2); + +-- Table CONTIENT +INSERT INTO CONTIENT (IDCOMMANDE, IDPROD, QTE) VALUES +(1, 1, 2), +(2, 2, 1); + +-- Table DISPOFORMAT +INSERT INTO DISPOFORMAT (IDFORMAT, IDPROD, PRIX) VALUES +(1, 1, 3.50), +(2, 2, 5.00); From a328a73df12e83407a15a436a662fa2799653b5f Mon Sep 17 00:00:00 2001 From: DavidTranMinhAnh Date: Fri, 6 Dec 2024 14:32:25 +0100 Subject: [PATCH 09/11] Docs Techs Ajouts des documentations techniques pour l'application java et python --- .../Documentations/Documentation utilisateur | 1 - .../DocumentationTechniqueJava copy.adoc | 41 +++++++++++++++++++ .../DocumentationTechniquePython.adoc | 34 +++++++++++++++ 3 files changed, 75 insertions(+), 1 deletion(-) delete mode 100644 Documentation/Documentations/Documentation utilisateur create mode 100644 Documentation/Documentations/DocumentationTechniqueJava copy.adoc create mode 100644 Documentation/Documentations/DocumentationTechniquePython.adoc diff --git a/Documentation/Documentations/Documentation utilisateur b/Documentation/Documentations/Documentation utilisateur deleted file mode 100644 index 8b1378917..000000000 --- a/Documentation/Documentations/Documentation utilisateur +++ /dev/null @@ -1 +0,0 @@ - diff --git a/Documentation/Documentations/DocumentationTechniqueJava copy.adoc b/Documentation/Documentations/DocumentationTechniqueJava copy.adoc new file mode 100644 index 000000000..f39c463d5 --- /dev/null +++ b/Documentation/Documentations/DocumentationTechniqueJava copy.adoc @@ -0,0 +1,41 @@ += Cahier de recette - Plateforme d'ecommerce - Sweetshop +:toc: +:toc-title: Sommaire +:Entreprise: LudoRama +:Equipe: LudoRama + +== Présentation de l'application +(Présentation rapide de l'application) +== Procédure d'installation +=== Pour le développement +(comment installer l'environnement de développement) + + +== Pour le poste + + +== Use Case Global +(Expliquer le use case global)(types d'utilisateurs, spécificités...) + + +== Architecture +=== Architecture générale +(Architecture générale en terme de sous-systèmes et rôle de chaque élément : fichier de données, fichier de configuration, parties de l'application, ...) +=== Ressources externes utilisées et rôles +( API utilisées avec lien d'accès web + lien doc en ligne, ...) +=== Structuration en package de l'application +(Structuration en packages de l’application documentée. Principes retenus pour cette structuration qui doivent être justifiés. Si des patterns particuliers sont utilisés (MVC, ...), les expliquer clairement.) +=== Élements essentiels +(Eléments essentiels à connaître, spécificités, … nécessaires à la mise en œuvre du développement. Cette partie peut être illustrée par un diagramme de séquence. Par exemple, une structure récurrente de classes peut être décrite ici (contrôleurs de dialogues, contrôleurs de vue, …), les threads utilisés, ...) + + +== Fonctionnalités + +=== Package : src/main/java/ +==== control +==== tools +==== view + +=== Package : src/main/ressources/ +Vu qu'il y a que les fxml, juste des screens et des explications si possibles. + diff --git a/Documentation/Documentations/DocumentationTechniquePython.adoc b/Documentation/Documentations/DocumentationTechniquePython.adoc new file mode 100644 index 000000000..b01c76447 --- /dev/null +++ b/Documentation/Documentations/DocumentationTechniquePython.adoc @@ -0,0 +1,34 @@ += Cahier de recette - Plateforme d'ecommerce - Sweetshop +:toc: +:toc-title: Sommaire +:Entreprise: LudoRama +:Equipe: LudoRama + +== Présentation de l'application +(Présentation rapide de l'application) +== Procédure d'installation +=== Pour le développement +(comment installer l'environnement de développement) + + +== Pour le poste + + +== Use Case Global +(Expliquer le use case global)(types d'utilisateurs, spécificités...) + + +== Architecture +=== Architecture générale +(Architecture générale en terme de sous-systèmes et rôle de chaque élément : fichier de données, fichier de configuration, parties de l'application, ...) +=== Ressources externes utilisées et rôles +( API utilisées avec lien d'accès web + lien doc en ligne, ...) +=== Structuration en package de l'application +(Structuration en packages de l’application documentée. Principes retenus pour cette structuration qui doivent être justifiés. Si des patterns particuliers sont utilisés (MVC, ...), les expliquer clairement.) +=== Élements essentiels +(Eléments essentiels à connaître, spécificités, … nécessaires à la mise en œuvre du développement. Cette partie peut être illustrée par un diagramme de séquence. Par exemple, une structure récurrente de classes peut être décrite ici (contrôleurs de dialogues, contrôleurs de vue, …), les threads utilisés, ...) + + +== Fonctionnalités + + From 03a990988afb55fbef378b6dc8789df081d044ab Mon Sep 17 00:00:00 2001 From: NariaReynhard Date: Fri, 6 Dec 2024 14:44:00 +0100 Subject: [PATCH 10/11] =?UTF-8?q?Modification=20en=20directe=20fonctionnel?= =?UTF-8?q?le=20(manque=20=C3=A0=20l'int=C3=A9grer=20aux=20capteurs=20AM10?= =?UTF-8?q?7,=20=C3=A0=20g=C3=A9rer=20les=20alertes=20et=20=C3=A0=20s'assu?= =?UTF-8?q?rer=20que=20le=20target=20soit=20mis=20=C3=A0=20jour=20quand=20?= =?UTF-8?q?le=20python=20envoi=20de=20nouveaux=20fichiers)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../view/DonneesActuellesController.java | 57 ++++++++++++------- 1 file changed, 36 insertions(+), 21 deletions(-) diff --git a/Code/java/src/main/java/application/view/DonneesActuellesController.java b/Code/java/src/main/java/application/view/DonneesActuellesController.java index ea7b408f9..90903b550 100644 --- a/Code/java/src/main/java/application/view/DonneesActuellesController.java +++ b/Code/java/src/main/java/application/view/DonneesActuellesController.java @@ -2,6 +2,7 @@ import application.control.IoTMainFrame; import application.tools.DataReader; +import javafx.application.Platform; import javafx.fxml.FXML; import javafx.scene.Node; import javafx.scene.control.*; @@ -17,6 +18,8 @@ import java.io.IOException; import java.net.URISyntaxException; import java.nio.file.*; +import java.util.Arrays; +import java.util.Comparator; import java.util.Map; import java.util.Objects; @@ -112,11 +115,13 @@ private void changeInterface() throws Exception { public void initContext(Stage _containingStage) { this.containingStage = _containingStage; + solarEdgeDataMemory = new TitledPane(); setUpSolaredge(); this.initWeb(); controlUpdateThread checkingRunnable = new controlUpdateThread(this); Thread checkingThread = new Thread(checkingRunnable); checkingThread.start(); + containingStage.setOnCloseRequest(event -> checkingRunnable.stop()); /* Test pour les notifications */ @@ -126,32 +131,42 @@ public void initContext(Stage _containingStage) { private void setUpSolaredge() { System.out.println("set up..."); - solarEdgeDataMemory = new TitledPane(); solarEdgeDataMemory.setText("Solaredge"); solarEdgeDataMemory.setCollapsible(false); solarEdgeDataMemory.setExpanded(true); solarEdgeDataMemory.setId("solaredge"); - VBox container = new VBox(); - container.setFillWidth(true); - solarEdgeDataMemory.setContent(container); - File solarEdgefolder; - try { - solarEdgefolder = new File(Objects.requireNonNull(DonneesActuellesController.class.getClassLoader().getResource("application/capteur/solaredge")).toURI()); - } catch (URISyntaxException e) { - throw new RuntimeException(e); + + if (solarEdgeDataMemory.getContent() == null) { + solarEdgeDataMemory.setContent(new VBox()); } - File lastestSolarEdge = Objects.requireNonNull(solarEdgefolder.listFiles())[0]; - for (File current : Objects.requireNonNull(solarEdgefolder.listFiles())) { - if (lastestSolarEdge.lastModified() < current.lastModified()) lastestSolarEdge = current; + + try { + File solarEdgefolder = new File(Objects.requireNonNull(DonneesActuellesController.class.getClassLoader() + .getResource("application/capteur/solaredge")).toURI()); + File[] files = Objects.requireNonNull(solarEdgefolder.listFiles()); + + // Identify the latest file + File latestFile = Arrays.stream(files) + .max(Comparator.comparing(File::lastModified)) + .orElseThrow(() -> new RuntimeException("No files found in directory")); + + Map solarDatas = DataReader.getSolarDict(latestFile); + + // Update the UI + Platform.runLater(() -> { + VBox container = (VBox) solarEdgeDataMemory.getContent(); + container.getChildren().clear(); // Clear old elements + + // Add new elements + Text powerLabel = new Text("Puissance actuelle"); + TextField powerValue = new TextField(solarDatas.get("currentPower.power") + " Watts"); + powerValue.setEditable(false); + container.getChildren().addAll(powerLabel, powerValue); + }); + + } catch (Exception e) { + System.out.println("Error in setUpSolaredge: " + e.getMessage()); } - Map solarDatas = DataReader.getSolarDict(lastestSolarEdge); - Text tempText = new Text("Puissance actuelle"); - tempText.setId("power"); - TextField tempField = new TextField(solarDatas.get("currentPower.power") + " Watts"); - tempField.setId(solarDatas.get("currentPower.power").toString()); - tempField.setEditable(false); - container.getChildren().add(tempText); - container.getChildren().add(tempField); } private void initWeb() { @@ -425,7 +440,7 @@ public void run() { // Nom du fichier modifié Path changedFile = (Path) event.context(); System.out.println("Changement détecté : " + kind.name() + " -> " + changedFile); - controller.setUpSolaredge(); + Platform.runLater(() -> controller.setUpSolaredge()); // Recompter les fichiers int currentFileCount = countFilesInDirectory(resourcePath); if (currentFileCount != previousFileCount) { From 5c76f79e6ed51fb817e740930894f143f625dc38 Mon Sep 17 00:00:00 2001 From: NariaReynhard Date: Fri, 6 Dec 2024 15:31:05 +0100 Subject: [PATCH 11/11] javadoc --- .../java/application/tools/DataReader.java | 49 +++++++++ .../view/DonneesActuellesController.java | 102 ++++++++++++++++-- 2 files changed, 144 insertions(+), 7 deletions(-) diff --git a/Code/java/src/main/java/application/tools/DataReader.java b/Code/java/src/main/java/application/tools/DataReader.java index 8c93223bc..af90f719c 100644 --- a/Code/java/src/main/java/application/tools/DataReader.java +++ b/Code/java/src/main/java/application/tools/DataReader.java @@ -11,6 +11,11 @@ import java.util.Map; public class DataReader { + /** + * Récupère les températures des fichiers donnés. + * @param datasToFetch Liste des fichiers contenant les données. + * @return Une liste de valeurs float représentant les températures. + */ public static List getTemps(List datasToFetch){ List tempsToReturn = new ArrayList<>(); for (File readData : datasToFetch) { @@ -19,6 +24,12 @@ public static List getTemps(List datasToFetch){ return tempsToReturn; } + /** + * Récupère la température d'un fichier donné. + * Retourne -275 si la température n'est pas trouvée. + * @param datasToFetch Le fichier contenant les données. + * @return La valeur float de la température, ou -275 en cas d'erreur. + */ public static float getTemps(File datasToFetch){ //-275 étant inférieur au 0 absolu, c'est une valeur absurde qui sera détectable de manière automatique float tempToReturn = -275; @@ -26,6 +37,11 @@ public static float getTemps(File datasToFetch){ return tempToReturn; } + /** + * Récupère les valeurs d'humidité des fichiers donnés. + * @param datasToFetch Liste des fichiers contenant les données. + * @return Une liste de valeurs float représentant les humidités. + */ public static List getHumidities(List datasToFetch){ List humiditiesToReturn = new ArrayList<>(); @@ -35,12 +51,23 @@ public static List getHumidities(List datasToFetch){ return humiditiesToReturn; } + /** + * Récupère la valeur d'humidité d'un fichier donné. + * Retourne -1 si l'humidité n'est pas trouvée. + * @param datasToFetch Le fichier contenant les données. + * @return La valeur float de l'humidité, ou -1 en cas d'erreur. + */ public static float getHumidities(File datasToFetch){ float humidityToReturn = -1; humidityToReturn = getDict(datasToFetch).get("humidity"); return humidityToReturn; } + /** + * Récupère les niveaux de CO2 des fichiers donnés. + * @param datasToFetch Liste des fichiers contenant les données. + * @return Une liste de valeurs float représentant les niveaux de CO2. + */ public static List getCo2(List datasToFetch){ List co2ToReturn = new ArrayList<>(); for(File currentFile : datasToFetch){ @@ -49,12 +76,26 @@ public static List getCo2(List datasToFetch){ return co2ToReturn; } + /** + * Récupère le niveau de CO2 d'un fichier donné. + * Retourne -1 si le niveau de CO2 n'est pas trouvé. + * @param datasToFetch Le fichier contenant les données. + * @return La valeur float du CO2, ou -1 en cas d'erreur. + */ public static float getCo2(File datasToFetch){ float co2ToReturn = -1; co2ToReturn = getDict(datasToFetch).get("co2"); return co2ToReturn; } + /** + * Transforme le contenu d'un fichier en une carte (Map) de clés et de valeurs. + * Les clés sont des chaînes de caractères, et les valeurs sont des nombres float. + * Si une valeur ne peut pas être convertie, elle est ignorée. + * @param datasToFetch Le fichier contenant les données à lire. + * @return Une Map avec les données extraites du fichier. + * @throws RuntimeException en cas d'erreur de lecture du fichier. + */ public static Map getDict(File datasToFetch){ Map dictToReturn = new HashMap<>(); try { @@ -72,6 +113,14 @@ public static Map getDict(File datasToFetch){ return dictToReturn; } + /** + * Transforme le contenu d'un fichier JSON contenant des données SolarEdge + * en une carte (Map) de clés et de valeurs imbriquées. + * Les clés sont composées du chemin complet (e.g., "parent.enfant"). + * @param datasToFetch Le fichier JSON contenant les données SolarEdge. + * @return Une Map avec les données extraites et transformées. + * @throws RuntimeException en cas d'erreur de lecture du fichier. + */ public static Map getSolarDict (File datasToFetch){ Map dictToReturn = new HashMap<>(); try { diff --git a/Code/java/src/main/java/application/view/DonneesActuellesController.java b/Code/java/src/main/java/application/view/DonneesActuellesController.java index 90903b550..bddbbe127 100644 --- a/Code/java/src/main/java/application/view/DonneesActuellesController.java +++ b/Code/java/src/main/java/application/view/DonneesActuellesController.java @@ -87,6 +87,13 @@ public void handleClick(String room) { @FXML private RadioMenuItem solaredge; + /** + * Change l'interface affichée en fonction du capteur sélectionné. + * Si "AM107" est sélectionné, affiche l'interface correspondante. + * Si "SolarEdge" est sélectionné, affiche les données SolarEdge. + * @throws Exception en cas d'erreur lors du changement d'interface. + */ + @FXML private void changeInterface() throws Exception { if (am107.isSelected()) { @@ -113,9 +120,19 @@ private void changeInterface() throws Exception { private final JSBridge jsBridge = new JSBridge(); private IoTMainFrame main = new IoTMainFrame(); + /** + * Initialise le contexte du contrôleur avec la fenêtre principale donnée. + * Configure les capteurs, initialise les threads de mise à jour, + * et met en place les gestionnaires d'événements de fermeture. + * @param _containingStage La fenêtre principale (Stage) de l'application. + */ public void initContext(Stage _containingStage) { this.containingStage = _containingStage; solarEdgeDataMemory = new TitledPane(); + solarEdgeDataMemory.setText("Solaredge"); + solarEdgeDataMemory.setCollapsible(false); + solarEdgeDataMemory.setExpanded(true); + solarEdgeDataMemory.setId("solaredge"); setUpSolaredge(); this.initWeb(); controlUpdateThread checkingRunnable = new controlUpdateThread(this); @@ -129,12 +146,13 @@ public void initContext(Stage _containingStage) { newWarning("B113"); } + /** + * Configure et met à jour l'interface utilisateur pour afficher les données SolarEdge. + * Charge les fichiers récents contenant les données SolarEdge et les affiche. + * En cas d'erreur, capture et signale l'exception. + */ private void setUpSolaredge() { - System.out.println("set up..."); - solarEdgeDataMemory.setText("Solaredge"); - solarEdgeDataMemory.setCollapsible(false); - solarEdgeDataMemory.setExpanded(true); - solarEdgeDataMemory.setId("solaredge"); + if (solarEdgeDataMemory.getContent() == null) { solarEdgeDataMemory.setContent(new VBox()); @@ -169,6 +187,10 @@ private void setUpSolaredge() { } } + /** + * Initialise la vue Web (WebView) pour afficher un fichier SVG interactif. + * Configure l'interaction entre JavaScript et Java via une passerelle JS. + */ private void initWeb() { String pathSvg = Objects.requireNonNull(DonneesActuellesController.class.getClassLoader().getResource("application/svg/demoSVG.html")).toString(); @@ -194,24 +216,40 @@ private void initWeb() { }); } + /** + * Affiche la fenêtre principale associée au contrôleur. + */ public void displayDialog() { this.containingStage.show(); } + /** + * Définit le cadre principal (IoTMainFrame) utilisé par ce contrôleur. + * @param newMain Le nouvel objet IoTMainFrame. + */ public void setMain(IoTMainFrame newMain) { main = newMain; } + /** + * Charge l'interface du menu principal via le cadre principal (IoTMainFrame). + */ @FXML private void menu() { main.start(containingStage); } + /** + * Retourne à l'écran précédent qui permet de choisir le type de données antérieures. + */ @FXML private void ecranAnterieur() { main.choixTypeDonneesAnterieures(containingStage); } + /** + * Ferme la fenêtre principale associée à ce contrôleur. + */ @FXML private void fermer() { this.containingStage.close(); @@ -255,7 +293,12 @@ private void updateDisplayedDatas() { } } - + /** + * Ajoute ou supprime une salle spécifique de la liste des données affichées. + * Si la salle est déjà affichée, elle est supprimée. Sinon, elle est ajoutée. + * @param room Le nom de la salle à gérer. + * @throws Exception si une erreur survient lors de la mise à jour. + */ public void displayedListUpdate(String room) throws Exception { boolean deleted = false; Node toDelete = null; @@ -273,10 +316,23 @@ public void displayedListUpdate(String room) throws Exception { } else displayedDatas.getChildren().remove(toDelete); } + /** + * Ajoute ou met à jour les données pour une salle spécifique dans l'affichage. + * Contrairement à `displayedListUpdate`, cette méthode ne supprime pas les salles existantes. + * @param room Le nom de la salle à mettre à jour. + * @throws Exception si une erreur survient lors de la mise à jour. + */ public void displayedListUpdateSoft(String room) throws Exception { updateRoom(room); } + /** + * Met à jour l'affichage des données pour une salle spécifique. + * Ajoute une section avec les données de température, CO2 et humidité, si disponibles. + * Les champs sont masqués si leur catégorie n'est pas cochée. + * @param room Le nom de la salle pour laquelle les données doivent être affichées. + * @throws Exception si une erreur survient lors de la récupération des données. + */ private void updateRoom(String room) throws Exception { TitledPane roomdatas = new TitledPane(); roomdatas.setText(room.toUpperCase()); @@ -321,6 +377,14 @@ private void updateRoom(String room) throws Exception { roomdatas.setExpanded(true); } + /** + * Récupère les données correspondantes (température, CO2 ou humidité) + * pour une salle spécifique à partir des fichiers disponibles. + * @param room Le nom de la salle. + * @param toFetch Le type de donnée à récupérer (TEMP, CO2, HUM). + * @return La valeur correspondante sous forme de float. + * @throws Exception si une erreur survient lors de la lecture des fichiers. + */ private float getCorrespondingData(String room, DATA toFetch) throws Exception { room = room.toUpperCase(); File folder = new File(Objects.requireNonNull(DonneesActuellesController.class.getClassLoader().getResource("application/capteur/AM107/" + room)).toURI()); @@ -342,6 +406,11 @@ private float getCorrespondingData(String room, DATA toFetch) throws Exception { throw new Exception("Erreur de lecture de fichier"); } + /** + * Ajoute un bouton d'avertissement pour une salle spécifique dans la liste des avertissements. + * Si un bouton pour cette salle existe déjà, aucun nouvel ajout n'est effectué. + * @param room Le nom de la salle pour laquelle un avertissement doit être créé. + */ private void newWarning(String room) { boolean exists = false; for (Node existingrooms : warnings.getChildren()) { @@ -357,6 +426,11 @@ private void newWarning(String room) { } } + /** + * Ajoute un bouton d'alerte pour une salle spécifique dans la liste des alertes. + * Si un bouton pour cette salle existe déjà, aucun nouvel ajout n'est effectué. + * @param room Le nom de la salle pour laquelle une alerte doit être créée. + */ private void newAlert(String room) { boolean exists = false; for (Node existingrooms : alerts.getChildren()) { @@ -372,6 +446,12 @@ private void newAlert(String room) { } } + /** + * Crée un bouton pour une notification (alerte ou avertissement) + * pour une salle spécifique. Ce bouton permet d'interagir avec l'affichage des données. + * @param room Le nom de la salle associée à la notification. + * @return Un objet Button configuré. + */ private Button notificationHandle(String room) { Button newButton = new Button(); newButton.setText(room.toUpperCase()); @@ -462,7 +542,12 @@ public void run() { } } - // Méthode pour compter les fichiers dans un dossier + + /** + * Compte le nombre de fichiers dans un dossier donné. + * @param path Le chemin du dossier. + * @return Le nombre de fichiers trouvés. + */ private static int countFilesInDirectory(Path path) { try { return (int) Files.list(path).filter(Files::isRegularFile).count(); @@ -472,6 +557,9 @@ private static int countFilesInDirectory(Path path) { } } + /** + * Arrête le thread de mise à jour en modifiant l'état `terminated` à true. + */ public void stop() { this.terminated = true; }