44import com .fasterxml .jackson .databind .ObjectMapper ;
55
66import java .sql .*;
7- import java .util .ArrayList ;
8- import java .util .List ;
9- import java .util .Map ;
107
118public class DatabaseService {
129 private static final String URL = "jdbc:sqlite:nodelink_storage.db" ;
@@ -18,66 +15,9 @@ public class DatabaseService {
1815 // Tables existantes
1916 stmt .execute ("CREATE TABLE IF NOT EXISTS ClusterTable (id TEXT PRIMARY KEY, content TEXT, updated_at DATETIME DEFAULT CURRENT_TIMESTAMP);" );
2017 stmt .execute ("CREATE TABLE IF NOT EXISTS BoneTable (id TEXT PRIMARY KEY, content TEXT, updated_at DATETIME DEFAULT CURRENT_TIMESTAMP);" );
21-
22- // NOUVELLE TABLE : PeerTable pour stocker les URLs distantes
23- stmt .execute ("CREATE TABLE IF NOT EXISTS PeerTable (url TEXT PRIMARY KEY, type TEXT, added_at DATETIME DEFAULT CURRENT_TIMESTAMP);" );
24-
25- stmt .execute ("CREATE TRIGGER IF NOT EXISTS tr_update_cluster_time AFTER UPDATE ON ClusterTable BEGIN UPDATE ClusterTable SET updated_at = CURRENT_TIMESTAMP WHERE id = old.id; END;" );
26- } catch (SQLException e ) {
27- e .printStackTrace ();
28- }
29- }
30-
31- // Méthode pour ajouter un Peer (Bone ou Cluster distant)
32- public static void addPeer (String url , String type ) throws SQLException {
33- String sql = "INSERT OR REPLACE INTO PeerTable(url, type) VALUES(?, ?)" ;
34- try (Connection conn = DriverManager .getConnection (URL );
35- PreparedStatement pstmt = conn .prepareStatement (sql )) {
36- pstmt .setString (1 , url );
37- pstmt .setString (2 , type );
38- pstmt .executeUpdate ();
39- }
40- }
41-
42- // Récupère toutes les URLs à synchroniser
43- public static List <String > getAllPeerUrls () {
44- List <String > urls = new ArrayList <>();
45- String sql = "SELECT url FROM PeerTable" ;
46- try (Connection conn = DriverManager .getConnection (URL );
47- Statement stmt = conn .createStatement ();
48- ResultSet rs = stmt .executeQuery (sql )) {
49- while (rs .next ()) {
50- urls .add (rs .getString ("url" ));
51- }
5218 } catch (SQLException e ) {
5319 e .printStackTrace ();
5420 }
55- return urls ;
56- }
57-
58- public static Map <String , String > getAllPeersWithType () {
59- Map <String , String > peers = new java .util .HashMap <>();
60- String sql = "SELECT url, type FROM PeerTable" ;
61- try (Connection conn = DriverManager .getConnection (URL );
62- Statement stmt = conn .createStatement ();
63- ResultSet rs = stmt .executeQuery (sql )) {
64- while (rs .next ()) {
65- peers .put (rs .getString ("url" ), rs .getString ("type" ));
66- }
67- } catch (SQLException e ) {
68- e .printStackTrace ();
69- }
70- return peers ;
71- }
72-
73- public static boolean removePeer (String url ) throws SQLException {
74- String sql = "DELETE FROM PeerTable WHERE url = ?" ;
75- try (Connection conn = DriverManager .getConnection (URL );
76- PreparedStatement pstmt = conn .prepareStatement (sql )) {
77- pstmt .setString (1 , url );
78- int affectedRows = pstmt .executeUpdate ();
79- return affectedRows > 0 ;
80- }
8121 }
8222
8323 public static void save (String table , String id , String content , String timestamp , boolean fromSync ) throws SQLException {
@@ -119,53 +59,6 @@ private static String injectTimestamp(String json, String ts) {
11959 }
12060 }
12161
122- public static Map <String , String > getAllRows (String table ) {
123- // Sécurité : on vérifie que la table demandée est autorisée
124- if (!table .equals ("BoneTable" ) && !table .equals ("ClusterTable" )) {
125- return new java .util .HashMap <>();
126- }
127-
128- Map <String , String > rows = new java .util .HashMap <>();
129- String sql = "SELECT id, content FROM " + table ;
130-
131- try (Connection conn = DriverManager .getConnection (URL );
132- Statement stmt = conn .createStatement ();
133- ResultSet rs = stmt .executeQuery (sql )) {
134-
135- while (rs .next ()) {
136- rows .put (rs .getString ("id" ), rs .getString ("content" ));
137- }
138- } catch (SQLException e ) {
139- System .err .println ("Erreur lors de la récupération des données : " + e .getMessage ());
140- }
141- return rows ;
142- }
143-
144- public static boolean deleteRow (String table , String id ) {
145- // Sécurité : on vérifie que la table est autorisée pour éviter l'injection SQL
146- if (!table .equals ("BoneTable" ) && !table .equals ("ClusterTable" ) && !table .equals ("PeerTable" )) {
147- return false ;
148- }
149-
150- String sql = "DELETE FROM " + table + " WHERE id = ?" ;
151- // Note : Pour PeerTable, le champ est 'url', adaptons la requête si c'est cette table
152- if (table .equals ("PeerTable" )) {
153- sql = "DELETE FROM PeerTable WHERE url = ?" ;
154- }
155-
156- try (Connection conn = DriverManager .getConnection (URL );
157- PreparedStatement pstmt = conn .prepareStatement (sql )) {
158-
159- pstmt .setString (1 , id );
160- int affectedRows = pstmt .executeUpdate ();
161- return affectedRows > 0 ; // Retourne vrai si une ligne a bien été supprimée
162-
163- } catch (SQLException e ) {
164- System .err .println ("Erreur SQL lors de la suppression (" + table + ") : " + e .getMessage ());
165- return false ;
166- }
167- }
168-
16962 public static String getTimestamp (String table , String id ) {
17063 // On valide le nom de la table pour éviter des injections SQL
17164 if (!table .equals ("BoneTable" ) && !table .equals ("ClusterTable" )) {
0 commit comments