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

---
 fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/JsonInsertQuery.java |  144 ++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 144 insertions(+), 0 deletions(-)

diff --git a/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/JsonInsertQuery.java b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/JsonInsertQuery.java
new file mode 100644
index 0000000..c9b6930
--- /dev/null
+++ b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/JsonInsertQuery.java
@@ -0,0 +1,144 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxcommons.tools.database.queries;
+
+import com.megatim.fdxcommons.tools.database.contrat.DefaultPreparedStatementProcessor;
+import com.megatim.fdxcommons.tools.database.contrat.JsonTypeFichierInsertMetaData;
+import com.megatim.fdxcommons.tools.database.contrat.PreparedStatementProcessor;
+import com.megatim.fdxcommons.tools.database.contrat.QueryMetaData;
+import com.megatim.fdxcommons.tools.database.contrat.TypeFichierDataColumn;
+import com.megatim.fdxcommons.tools.database.contrat.TypeFichierDataRow;
+import com.megatim.fdxcommons.tools.database.queries.metadata.DefaultTypeFichierDataColumn;
+import com.megatim.fdxcommons.tools.database.queries.metadata.JsonApiTypeFichierInsertData;
+import com.megatim.fdxcommons.tools.database.queries.metadata.JsonFdxParsedDataIterator;
+import com.megatim.fdxcommons.tools.database.queries.metadata.QueryParam;
+import com.megatim.fdxcommons.tools.database.tables.appcolumns.IndexColumnDefinition;
+import com.megatim.fdxcommons.tools.database.tables.appcolumns.ParentIdColumnDefinition;
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ *
+ * @author ASUS
+ */
+public class JsonInsertQuery implements QueryMetaData<Void> {
+
+    private final Connection connection;
+    private final JsonFdxParsedDataIterator parsedDataIterator;
+    private final List<DefaultTypeFichierDataColumn> dataColumnsToAdd;
+
+    public JsonInsertQuery(Connection connection, JsonFdxParsedDataIterator parsedDataIterator, List<DefaultTypeFichierDataColumn> dataColumnsToAdd) {
+        this.connection = connection;
+        this.parsedDataIterator = parsedDataIterator;
+        this.dataColumnsToAdd = dataColumnsToAdd;
+    }
+
+    @Override
+    public Void execute() throws Exception {
+        List<JsonApiTypeFichierInsertData> rows = parsedDataIterator.rows();
+
+        for (JsonApiTypeFichierInsertData insertMetaData : rows) {
+            String query = insertQueryString(insertMetaData.columnNames(), insertMetaData.tableName(), false);
+
+            TypeFichierDataRow row = insertMetaData.row();
+
+            System.out.println("---------------- parentQuery-----------------------");
+            System.out.println(query);
+            System.out.println("-----------------------------------");
+
+            try ( PreparedStatement statement = connection.prepareStatement(query);) {
+                execute(statement, row, dataColumnsToAdd, null);
+                ResultSet resultSet = statement.executeQuery();
+
+                if (resultSet.next()) {
+                    Long fdxIndex = resultSet.getLong(1);
+                    insertChildren(insertMetaData.children(), fdxIndex);
+                }
+            }
+        }
+        return null;
+    }
+
+    private void insertChildren(List<JsonTypeFichierInsertMetaData> data, Long parentId) throws Exception {
+        if (!data.isEmpty()) {
+            for (JsonTypeFichierInsertMetaData insertData : data) {
+                insertChild(insertData, parentId);
+            }
+        }
+
+    }
+
+    private void insertChild(JsonTypeFichierInsertMetaData child, Long parentId) throws Exception {
+        String childQuery = insertQueryString(child.columnNames(), child.tableName(), true);
+        System.out.println("------------------ childQuery---------------------------");
+        System.out.println(childQuery);
+        System.out.println("---------------------------------------------------------");
+
+        try ( PreparedStatement statement = connection.prepareStatement(childQuery);) {
+
+            TypeFichierDataRow row = child.row();
+            execute(statement, row, dataColumnsToAdd, parentId);
+            ResultSet resultSet = statement.executeQuery();
+
+            if (resultSet.next()) {
+                Long fdxIndex = resultSet.getLong(1);
+                insertChildren(child.children(), fdxIndex);
+            }
+        }
+    }
+
+    private String insertQueryString(List<String> columnNames, String tableName, boolean parentIdPresent) {
+        List<String> insertColumns = new ArrayList<>(columnNames);
+
+        for (DefaultTypeFichierDataColumn dc : dataColumnsToAdd) {
+            insertColumns.add(dc.column());
+        }
+
+        if (parentIdPresent) {
+            insertColumns.add(new ParentIdColumnDefinition().name());// Ajout de la clé du parent
+        }
+        StringBuilder query = new StringBuilder("INSERT INTO " + tableName + "(");
+
+        insertColumns.forEach(column -> query.append(column).append(","));
+
+        query.replace(query.length() - 1, query.length(), ") VALUES(");
+
+        insertColumns.forEach(s -> query.append("?,"));
+
+        query.replace(query.length() - 1, query.length(), ")");
+
+        query.append(" RETURNING ").append(new IndexColumnDefinition().name()).append(";");
+
+        return query.toString();
+    }
+
+    private void execute(PreparedStatement preparedStatement, TypeFichierDataRow row, List<DefaultTypeFichierDataColumn> dataColumnsToAdd, Long parentId) throws SQLException, Exception {
+
+        List<QueryParam> queryParameters = new ArrayList<>();
+
+        if (row != null) {
+            for (TypeFichierDataColumn dataColumn : row.columns()) {
+                queryParameters.add(new QueryParam(dataColumn.column(), dataColumn.value()));
+            }
+        }
+
+        //On ajoute les colonnes de dataColumnsToAdd
+        for (DefaultTypeFichierDataColumn dc : dataColumnsToAdd) {
+            queryParameters.add(new QueryParam(dc.column(), dc.value()));
+        }
+
+        if (parentId != null && parentId != 0L) {
+            queryParameters.add(new QueryParam(new ParentIdColumnDefinition().name(), parentId));//Ajout clé du parent
+        }
+
+        PreparedStatementProcessor statementProcessor = new DefaultPreparedStatementProcessor(0);
+        statementProcessor.process(preparedStatement, queryParameters);
+
+    }
+}

--
Gitblit v1.10.0