diff --git a/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/service/APIToDatabaseService.java b/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/service/APIToDatabaseService.java index 9c50ad9..e62db7a 100644 --- a/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/service/APIToDatabaseService.java +++ b/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/service/APIToDatabaseService.java @@ -36,31 +36,32 @@ public APIToDatabaseService(DatabaseConnection connection) { */ public void addAPIDataToTable(List charities) { Connection conn = null; - // Everything charity related except categories try { conn = connection.getMySqlConnection(); - conn.setAutoCommit(false); + conn.setAutoCommit( + false); + String sql1 = """ - INSERT INTO Charities (UUID_charities, org_number, pre_approved, status) - VALUES (?, ?, ?, ?) - ON DUPLICATE KEY UPDATE - pre_approved = VALUES(pre_approved), - status = VALUES(status); - """; + INSERT INTO Charities (UUID_charities, org_number, pre_approved, status) + VALUES (?, ?, ?, ?) + ON DUPLICATE KEY UPDATE + pre_approved = VALUES(pre_approved), + status = VALUES(status); + """; String sql2 = """ - INSERT INTO CharityVanity (UUID_charity, charity_name, charity_link, description, logoURL, key_values, logoBlob) - VALUES (?, ?, ?, ?, ?, ?, ?) - ON DUPLICATE KEY UPDATE - charity_name = VALUES(charity_name), - charity_link = VALUES(charity_link), - description = VALUES(description), - logoURL = VALUES(logoURL), - key_values = VALUES(key_values), - logoBlob = VALUES(logoBlob); - """; + INSERT INTO CharityVanity (UUID_charity, charity_name, charity_link, description, logoURL, key_values, logoBlob) + VALUES (?, ?, ?, ?, ?, ?, ?) + ON DUPLICATE KEY UPDATE + charity_name = VALUES(charity_name), + charity_link = VALUES(charity_link), + description = VALUES(description), + logoURL = VALUES(logoURL), + key_values = VALUES(key_values), + logoBlob = VALUES(logoBlob); + """; try (PreparedStatement ps1 = conn.prepareStatement(sql1); PreparedStatement ps2 = conn.prepareStatement(sql2)) { @@ -68,9 +69,13 @@ INSERT INTO CharityVanity (UUID_charity, charity_name, charity_link, description for (Charity charity : charities) { String uuid; if (charity.getUUID() == null) { - uuid = UUID.randomUUID().toString(); + + uuid = + UUID.nameUUIDFromBytes( + (charity.getOrg_number() + charity.getURL() + charity.getName()).getBytes()) + .toString(); charity.setUUIDFromString(uuid); - System.out.println("API object doesnt have UUID, assigning"); + System.out.println("API object doesn't have UUID, assigning stable UUID"); } else { uuid = charity.getUUID().toString(); } @@ -90,56 +95,51 @@ INSERT INTO CharityVanity (UUID_charity, charity_name, charity_link, description ps2.setBytes(7, charity.getLogoBlob()); ps2.executeUpdate(); } - } catch (Exception e) { e.printStackTrace(); throw new RuntimeException(e); } - // -- Intergerty Check: + // Integrity Check String createTemp = """ - CREATE TEMPORARY TABLE temp_api_charities ( - org_number VARCHAR(255) PRIMARY KEY - ) - """; - + CREATE TEMPORARY TABLE temp_api_charities ( + org_number VARCHAR(255) PRIMARY KEY + ) + """; try (PreparedStatement ps = conn.prepareStatement(createTemp)) { ps.execute(); } String insertTemp = "INSERT IGNORE INTO temp_api_charities (org_number) VALUES (?)"; - try (PreparedStatement ps = conn.prepareStatement(insertTemp)) { - for (Charity charity : charities) { ps.setString(1, charity.getOrg_number().replaceAll("\\s", "")); ps.addBatch(); } - ps.executeBatch(); } String deleteSql = """ - DELETE FROM Charities c - WHERE NOT EXISTS ( - SELECT 1 FROM temp_api_charities t - WHERE t.org_number = c.org_number - ) - AND NOT EXISTS ( - SELECT 1 FROM Donations d WHERE d.charity_id = c.UUID_charities - ) - AND NOT EXISTS ( - SELECT 1 FROM Feedback f WHERE f.charity_id = c.UUID_charities - ) - AND NOT EXISTS ( - SELECT 1 FROM CharityVanity cv WHERE cv.UUID_charity = c.UUID_charities - ) - AND NOT EXISTS ( - SELECT 1 FROM CharityUsers cu WHERE cu.Charities_UUID_charities = c.UUID_charities - ); - """; + DELETE FROM Charities c + WHERE NOT EXISTS ( + SELECT 1 FROM temp_api_charities t + WHERE t.org_number = c.org_number + ) + AND NOT EXISTS ( + SELECT 1 FROM Donations d WHERE d.charity_id = c.UUID_charities + ) + AND NOT EXISTS ( + SELECT 1 FROM Feedback f WHERE f.charity_id = c.UUID_charities + ) + AND NOT EXISTS ( + SELECT 1 FROM CharityVanity cv WHERE cv.UUID_charity = c.UUID_charities + ) + AND NOT EXISTS ( + SELECT 1 FROM CharityUsers cu WHERE cu.Charities_UUID_charities = c.UUID_charities + ); + """; try (PreparedStatement ps = conn.prepareStatement(deleteSql)) { ps.executeUpdate(); @@ -156,7 +156,6 @@ AND NOT EXISTS ( } } e.printStackTrace(); - throw new RuntimeException("ERROR: Something went wrong during updating charities table."); } finally { if (conn != null) {