From 23a46b4be35277e06ec89f48730eeb694e686be8 Mon Sep 17 00:00:00 2001
From: Kenmegne <stephanie.kenmegne@gmail.com>
Date: Thu, 18 Jun 2026 15:40:06 +0000
Subject: [PATCH] add fdx-commons and fdx-consultation

---
 apifdxweb/api/apifdxweb-core-impl/src/main/java/com/megatim/apifdxweb/core/impl/helper/DataProductionOperationsImpl.java |  171 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 171 insertions(+), 0 deletions(-)

diff --git a/apifdxweb/api/apifdxweb-core-impl/src/main/java/com/megatim/apifdxweb/core/impl/helper/DataProductionOperationsImpl.java b/apifdxweb/api/apifdxweb-core-impl/src/main/java/com/megatim/apifdxweb/core/impl/helper/DataProductionOperationsImpl.java
new file mode 100644
index 0000000..5afd744
--- /dev/null
+++ b/apifdxweb/api/apifdxweb-core-impl/src/main/java/com/megatim/apifdxweb/core/impl/helper/DataProductionOperationsImpl.java
@@ -0,0 +1,171 @@
+package com.megatim.apifdxweb.core.impl.helper;
+
+import com.megatim.apifdxweb.core.ifaces.helper.DataProductionOperations;
+import com.megatim.apifdxweb.core.ifaces.helper.RoutingChecker;
+import com.megatim.apifdxweb.model.request.UpdateRequest;
+import com.megatim.apifdxweb.tools.AppContext;
+import com.megatim.commons.tools.exceptions.ApplicationServerException;
+import com.megatim.fdxcommons.core.ifaces.helper.DataInMemoryHandler;
+import com.megatim.fdxcommons.model.dataproduction.DataProduction;
+import com.megatim.fdxcommons.model.dataproduction.DataProductionSource;
+import com.megatim.fdxcommons.model.pojo.CriteriaEntityFromView;
+import com.megatim.fdxcommons.tools.database.connection.DBConnection;
+import com.megatim.fdxcommons.tools.database.queries.metadata.QueryCriterion;
+import com.megatim.fdxcommons.tools.database.tables.FdxApiTable;
+import com.megatim.fdxcommons.tools.exceptions.CommonRessourceNotFoundException;
+import com.megatim.fdxcommons.tools.utils.CriteriaEntityFromViewToQueryCriterion;
+import java.sql.Connection;
+import java.time.LocalDateTime;
+import java.util.LinkedHashMap;
+import java.util.List;
+import javax.annotation.Resource;
+import javax.enterprise.context.Dependent;
+import javax.inject.Inject;
+import javax.sql.DataSource;
+
+/**
+ *
+ * @author Gabuntu
+ */
+@Dependent
+public class DataProductionOperationsImpl implements DataProductionOperations {
+
+    @Resource(lookup = AppContext.JNDI_NAME)
+    private DataSource dataSource;
+
+    @Inject
+    private DataInMemoryHandler dataInMemoryHandler;
+
+    @Inject
+    private RoutingChecker routingChecker;
+
+    @Override
+    public void saveAll(String codeTypeFichier, List<LinkedHashMap<String, Object>> datas, String connectedParticipant) {
+
+        stopIfProductionNotPermitted(codeTypeFichier, connectedParticipant);
+
+        try ( Connection connection = new DBConnection(dataSource).connection()) {
+            connection.setAutoCommit(false);
+
+            DataProduction dataProduction = newDataProduction(codeTypeFichier, connectedParticipant);
+            table(connection, codeTypeFichier).insert((List<LinkedHashMap<String, Object>>) datas, dataProduction);
+
+            connection.commit();
+        } catch (Exception ex) {
+            throw new ApplicationServerException(ex.getMessage());
+        }
+    }
+
+    @Override
+    public void saveOne(String codeTypeFichier, LinkedHashMap<String, Object> data, String connectedParticipant) {
+
+        stopIfProductionNotPermitted(codeTypeFichier, connectedParticipant);
+
+        try ( Connection connection = new DBConnection(dataSource).connection()) {
+            connection.setAutoCommit(false);
+
+            DataProduction dataProduction = newDataProduction(codeTypeFichier, connectedParticipant);
+            table(connection, codeTypeFichier).insert(data, dataProduction);
+
+            connection.commit();
+        } catch (Exception ex) {
+            throw new ApplicationServerException(ex.getMessage());
+        }
+    }
+
+    @Override
+    public void updateAll(String codeTypeFichier, UpdateRequest updateRequest, String connectedParticipant) {
+
+        stopIfProductionNotPermitted(codeTypeFichier, connectedParticipant);
+
+        try ( Connection connection = new DBConnection(dataSource).connection()) {
+            connection.setAutoCommit(false);
+
+            QueryCriterion queryCriterion = new CriteriaEntityFromViewToQueryCriterion(updateRequest.getCriteriaEntityFromView()).queryCriterion();
+            table(connection, codeTypeFichier).update(updateRequest.getDataToUpdate(), queryCriterion);
+
+            connection.commit();
+        } catch (Exception ex) {
+            throw new ApplicationServerException(ex.getMessage());
+        }
+    }
+
+    @Override
+    public void updateOne(String codeTypeFichier, UpdateRequest updateRequest, String connectedParticipant) {
+
+        stopIfProductionNotPermitted(codeTypeFichier, connectedParticipant);
+
+        try ( Connection connection = new DBConnection(dataSource).connection()) {
+            connection.setAutoCommit(false);
+
+            QueryCriterion queryCriterion = new CriteriaEntityFromViewToQueryCriterion(updateRequest.getCriteriaEntityFromView()).queryCriterion();
+            table(connection, codeTypeFichier).updateOne(updateRequest.getDataToUpdate(), queryCriterion);
+
+            connection.commit();
+        } catch (Exception ex) {
+            throw new ApplicationServerException(ex.getMessage());
+        }
+    }
+
+    @Override
+    public void deleteAll(String codeTypeFichier, CriteriaEntityFromView criterionFromView, String connectedParticipant) {
+
+        stopIfProductionNotPermitted(codeTypeFichier, connectedParticipant);
+
+        try ( Connection connection = new DBConnection(dataSource).connection()) {
+            connection.setAutoCommit(false);
+
+            QueryCriterion queryCriterion = new CriteriaEntityFromViewToQueryCriterion(criterionFromView).queryCriterion();
+            table(connection, codeTypeFichier).delete(queryCriterion);
+
+            connection.commit();
+        } catch (Exception ex) {
+            throw new ApplicationServerException(ex.getMessage());
+        }
+    }
+
+    @Override
+    public void deleteOne(String codeTypeFichier, CriteriaEntityFromView criterionFromView, String connectedParticipant) {
+
+        stopIfProductionNotPermitted(codeTypeFichier, connectedParticipant);
+
+        try ( Connection connection = new DBConnection(dataSource).connection()) {
+            connection.setAutoCommit(false);
+
+            QueryCriterion queryCriterion = new CriteriaEntityFromViewToQueryCriterion(criterionFromView).queryCriterion();
+            table(connection, codeTypeFichier).deleteOne(queryCriterion);
+
+            connection.commit();
+        } catch (Exception ex) {
+            throw new ApplicationServerException(ex.getMessage());
+        }
+    }
+
+    private FdxApiTable table(Connection connection, String codeTypeFichier) {
+        return new FdxApiTable(codeTypeFichier, versionReferentiel(), connection);
+    }
+
+    private DataProduction newDataProduction(String codeTypeFichier, String codeParticipant) {
+        DataProduction dataProduction = new DataProduction();
+        dataProduction.setDateProduction(LocalDateTime.now());
+        dataProduction.setReferentielVersion(versionReferentiel());
+        dataProduction.setCodeTypeFichier(codeTypeFichier);
+        dataProduction.setCodeParticipant(codeParticipant);
+        dataProduction.setSource(DataProductionSource.API);
+
+        return dataProduction;
+    }
+
+    private String versionReferentiel() {
+        return dataInMemoryHandler.getDataInMemory().getReferentielEnCours().getVersion();
+    }
+
+    private void stopIfProductionNotPermitted(String codeTypeFichier, String connectedParticipant) {
+        if (dataInMemoryHandler.getDataInMemory().getReferentielEnCours() == null) {
+            throw new CommonRessourceNotFoundException("Aucun référentiel en cours");
+        }
+        routingChecker.stopIfTypeFichierNotExists(codeTypeFichier, dataInMemoryHandler.getDataInMemory());
+        routingChecker.stopIfNotProducer(codeTypeFichier, dataInMemoryHandler.getDataInMemory(), connectedParticipant);
+    }
+
+}

--
Gitblit v1.10.0