From b312097d0d23dc94e770f99ac2934ca75e7e786d Mon Sep 17 00:00:00 2001
From: Lucy Ciara Herud-Thomassen <86323303+LucyCiara@users.noreply.github.com>
Date: Tue, 10 Mar 2026 15:41:43 +0100
Subject: [PATCH 1/7] feat[DbWrapper]: add methods for connecting to database
---
pom.xml | 6 ++++
src/main/java/edu/group5/app/App.java | 9 +++++-
.../edu/group5/app/control/DbWrapper.java | 30 +++++++++++++++++++
src/main/resources/init.sql | 23 ++++++++++++++
src/main/resources/test_init.sql | 23 ++++++++++++++
5 files changed, 90 insertions(+), 1 deletion(-)
create mode 100644 src/main/java/edu/group5/app/control/DbWrapper.java
create mode 100644 src/main/resources/init.sql
create mode 100644 src/main/resources/test_init.sql
diff --git a/pom.xml b/pom.xml
index 7a55551..f9a8b88 100644
--- a/pom.xml
+++ b/pom.xml
@@ -62,6 +62,12 @@
slf4j-simple
2.0.9
+
+ com.h2database
+ h2
+ 2.2.224
+ runtime
+
diff --git a/src/main/java/edu/group5/app/App.java b/src/main/java/edu/group5/app/App.java
index 887fe4d..8eae42a 100644
--- a/src/main/java/edu/group5/app/App.java
+++ b/src/main/java/edu/group5/app/App.java
@@ -1,10 +1,17 @@
package edu.group5.app;
+import edu.group5.app.control.DbWrapper;
+
/**
* Hello world!
*/
public class App {
public static void main(String[] args) throws InterruptedException {
- System.out.println("Hello World!");
+ DbWrapper db = new DbWrapper("test_init.sql");
+ try {
+ System.out.println(db.connect());
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
}
}
diff --git a/src/main/java/edu/group5/app/control/DbWrapper.java b/src/main/java/edu/group5/app/control/DbWrapper.java
new file mode 100644
index 0000000..b767a49
--- /dev/null
+++ b/src/main/java/edu/group5/app/control/DbWrapper.java
@@ -0,0 +1,30 @@
+package edu.group5.app.control;
+
+import java.sql.Connection;
+import java.sql.DriverManager;
+import java.sql.SQLException;
+
+public class DbWrapper {
+ protected Connection connection;
+ private static final String CONNECTION_TYPE = "jdbc:h2:";
+ private static final String DB_SCRIPT = "INIT=RUNSCRIPT FROM 'classpath:";
+ private String connectionString;
+
+ public DbWrapper(String script) {
+ this(script, "mem:test;");
+ }
+
+ public DbWrapper(String script, String dbPath) {
+ this.connectionString = CONNECTION_TYPE + dbPath + DB_SCRIPT + script + "'";
+ }
+
+ public boolean connect() throws SQLException {
+ try {
+ this.connection = DriverManager.getConnection(this.connectionString);
+ } catch (SQLException SQLe) {
+ SQLe.printStackTrace();
+ }
+ return connection.isValid(0);
+ }
+
+}
diff --git a/src/main/resources/init.sql b/src/main/resources/init.sql
new file mode 100644
index 0000000..ff37e31
--- /dev/null
+++ b/src/main/resources/init.sql
@@ -0,0 +1,23 @@
+CREATE TABLE IF NOT EXISTS
+users (
+ user_id int PRIMARY KEY,
+ first_name varchar(20),
+ last_name varchar(20),
+ email varchar(20),
+ password_hash varchar(72)
+);
+
+CREATE TABLE IF NOT EXISTS
+donations (
+ donation_id int PRIMARY KEY,
+ user_id int NOT NULL,
+ organization_id int NOT NULL,
+ amount double NOT NULL,
+ dating timestamp NOT NULL,
+ payment_method varchar(20),
+ CONSTRAINT fk_user
+ FOREIGN KEY (user_id)
+ REFERENCES users(user_id)
+);
+
+
diff --git a/src/main/resources/test_init.sql b/src/main/resources/test_init.sql
new file mode 100644
index 0000000..e1c1c43
--- /dev/null
+++ b/src/main/resources/test_init.sql
@@ -0,0 +1,23 @@
+DROP TABLE IF EXISTS users, donations;
+
+CREATE TABLE IF NOT EXISTS
+users (
+ user_id int PRIMARY KEY,
+ first_name varchar(20),
+ last_name varchar(20),
+ email varchar(20),
+ password_hash varchar(72)
+);
+
+CREATE TABLE IF NOT EXISTS
+donations (
+ donation_id int PRIMARY KEY,
+ user_id int NOT NULL,
+ organization_id int NOT NULL,
+ amount double NOT NULL,
+ dating timestamp NOT NULL,
+ payment_method varchar(20),
+ CONSTRAINT fk_user
+ FOREIGN KEY (user_id)
+ REFERENCES users(user_id)
+);
From 1c56f3ca65b69233bfd49e50b3a3c649eec2c388 Mon Sep 17 00:00:00 2001
From: Lucy Ciara Herud-Thomassen <86323303+LucyCiara@users.noreply.github.com>
Date: Tue, 10 Mar 2026 16:10:15 +0100
Subject: [PATCH 2/7] update[DbWrapper]: remove input for script and database
paths
remove input for scripts and database paths for ease of use
---
src/main/java/edu/group5/app/App.java | 2 +-
src/main/java/edu/group5/app/control/DbWrapper.java | 13 ++++++-------
2 files changed, 7 insertions(+), 8 deletions(-)
diff --git a/src/main/java/edu/group5/app/App.java b/src/main/java/edu/group5/app/App.java
index 8eae42a..dbd2319 100644
--- a/src/main/java/edu/group5/app/App.java
+++ b/src/main/java/edu/group5/app/App.java
@@ -7,7 +7,7 @@
*/
public class App {
public static void main(String[] args) throws InterruptedException {
- DbWrapper db = new DbWrapper("test_init.sql");
+ DbWrapper db = new DbWrapper(false);
try {
System.out.println(db.connect());
} catch (Exception e) {
diff --git a/src/main/java/edu/group5/app/control/DbWrapper.java b/src/main/java/edu/group5/app/control/DbWrapper.java
index b767a49..cafd03f 100644
--- a/src/main/java/edu/group5/app/control/DbWrapper.java
+++ b/src/main/java/edu/group5/app/control/DbWrapper.java
@@ -10,12 +10,12 @@ public class DbWrapper {
private static final String DB_SCRIPT = "INIT=RUNSCRIPT FROM 'classpath:";
private String connectionString;
- public DbWrapper(String script) {
- this(script, "mem:test;");
- }
-
- public DbWrapper(String script, String dbPath) {
- this.connectionString = CONNECTION_TYPE + dbPath + DB_SCRIPT + script + "'";
+ public DbWrapper(boolean test) {
+ if (test) {
+ this.connectionString = CONNECTION_TYPE + "mem:test;" + DB_SCRIPT + "test_init.sql'";
+ } else {
+ this.connectionString = CONNECTION_TYPE + "file:./help-me-help;" + DB_SCRIPT + "init.sql'";
+ }
}
public boolean connect() throws SQLException {
@@ -26,5 +26,4 @@ public boolean connect() throws SQLException {
}
return connection.isValid(0);
}
-
}
From bdd2284ad548e2036435d1e19fc4b1fb36664726 Mon Sep 17 00:00:00 2001
From: Lucy Ciara Herud-Thomassen <86323303+LucyCiara@users.noreply.github.com>
Date: Thu, 12 Mar 2026 12:20:45 +0100
Subject: [PATCH 3/7] refactor[wrapper]&feat[DbWrapper]: move wrapper classes
to its own folder, and add a class for database communication
---
.../edu/group5/app/control/DbWrapper.java | 29 -----
.../group5/app/control/wrapper/DbWrapper.java | 113 ++++++++++++++++++
.../control/{ => wrapper}/OrgApiWrapper.java | 18 +--
.../app/control/{ => wrapper}/Wrapper.java | 15 ++-
src/main/resources/init.sql | 23 ++--
src/main/resources/test_init.sql | 25 ++--
6 files changed, 158 insertions(+), 65 deletions(-)
delete mode 100644 src/main/java/edu/group5/app/control/DbWrapper.java
create mode 100644 src/main/java/edu/group5/app/control/wrapper/DbWrapper.java
rename src/main/java/edu/group5/app/control/{ => wrapper}/OrgApiWrapper.java (85%)
rename src/main/java/edu/group5/app/control/{ => wrapper}/Wrapper.java (66%)
diff --git a/src/main/java/edu/group5/app/control/DbWrapper.java b/src/main/java/edu/group5/app/control/DbWrapper.java
deleted file mode 100644
index cafd03f..0000000
--- a/src/main/java/edu/group5/app/control/DbWrapper.java
+++ /dev/null
@@ -1,29 +0,0 @@
-package edu.group5.app.control;
-
-import java.sql.Connection;
-import java.sql.DriverManager;
-import java.sql.SQLException;
-
-public class DbWrapper {
- protected Connection connection;
- private static final String CONNECTION_TYPE = "jdbc:h2:";
- private static final String DB_SCRIPT = "INIT=RUNSCRIPT FROM 'classpath:";
- private String connectionString;
-
- public DbWrapper(boolean test) {
- if (test) {
- this.connectionString = CONNECTION_TYPE + "mem:test;" + DB_SCRIPT + "test_init.sql'";
- } else {
- this.connectionString = CONNECTION_TYPE + "file:./help-me-help;" + DB_SCRIPT + "init.sql'";
- }
- }
-
- public boolean connect() throws SQLException {
- try {
- this.connection = DriverManager.getConnection(this.connectionString);
- } catch (SQLException SQLe) {
- SQLe.printStackTrace();
- }
- return connection.isValid(0);
- }
-}
diff --git a/src/main/java/edu/group5/app/control/wrapper/DbWrapper.java b/src/main/java/edu/group5/app/control/wrapper/DbWrapper.java
new file mode 100644
index 0000000..6eb673f
--- /dev/null
+++ b/src/main/java/edu/group5/app/control/wrapper/DbWrapper.java
@@ -0,0 +1,113 @@
+package edu.group5.app.control.wrapper;
+
+import java.math.BigDecimal;
+import java.sql.Connection;
+import java.sql.DriverManager;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Timestamp;
+import java.util.ArrayList;
+import java.util.List;
+
+public class DbWrapper {
+ protected Connection connection;
+ private static final String CONNECTION_TYPE = "jdbc:h2:";
+ private static final String DB_SCRIPT = "INIT=RUNSCRIPT FROM 'classpath:";
+ private String connectionString;
+
+ public DbWrapper(boolean test) {
+ if (test) {
+ this.connectionString = CONNECTION_TYPE + "mem:test;" + DB_SCRIPT + "test_init.sql'";
+ } else {
+ this.connectionString = CONNECTION_TYPE + "file:./help-me-help;" + DB_SCRIPT + "init.sql'";
+ }
+ }
+
+ public boolean connect() throws SQLException {
+ try {
+ this.connection = DriverManager.getConnection(this.connectionString);
+ } catch (SQLException SQLe) {
+ System.out.println(SQLe.getMessage());
+ }
+ return connection.isValid(0);
+ }
+
+ public List