From c072425249a2b03be10380c5e701446c6b4341b1 Mon Sep 17 00:00:00 2001 From: lukaceli Date: Tue, 24 Mar 2026 13:54:02 +0100 Subject: [PATCH 1/3] Added methods for getting user statistics. Added som simpler mapRows to use in these methods --- src/main/java/persistence/DonationDao.java | 77 ++++++++++++++++++++++ 1 file changed, 77 insertions(+) diff --git a/src/main/java/persistence/DonationDao.java b/src/main/java/persistence/DonationDao.java index ff8b783..338a92e 100644 --- a/src/main/java/persistence/DonationDao.java +++ b/src/main/java/persistence/DonationDao.java @@ -88,6 +88,83 @@ public List findByUser(long userId) { } } + public List getUserDonations(long userId) { + String sql = """ + SELECT amount, donation_date, organization_id + FROM donation + WHERE user_Id = ? + """; + + try (Connection conn = Database.getConnection()) { + PreparedStatement stmt = conn.prepareStatement(sql); + + stmt.setLong(1, userId); + ResultSet rs = stmt.executeQuery(); + List list = new ArrayList<>(); + while (rs.next()) list.add(mapRowSimple(rs)); + return list; + } catch (SQLException e) { + throw new RuntimeException(e); + } + } + + public List getFavoriteOrganizations(long userId) { + String sql = """ + SELECT organization_id, COUNT(*) AS donation_count + FROM donation + WHERE user_Id = ? + GROUP BY organization_id + ORDER BY donation_count DESC + LIMIT 3 + """; + + try (Connection conn = Database.getConnection()) { + PreparedStatement stmt = conn.prepareStatement(sql); + + stmt.setLong(1, userId); + ResultSet rs = stmt.executeQuery(); + List list = new ArrayList<>(); + while (rs.next()) list.add(mapRowFavorite(rs)); + return list; + } catch (SQLException e) { + throw new RuntimeException(e); + } + } + + public String getTotalDonationAmount(long userId) { + String sql = """ + SELECT SUM(CAST(amount as REAL)) + FROM donation + WHERE user_id = ? + """; + + try (Connection conn = Database.getConnection()) { + PreparedStatement stmt = conn.prepareStatement(sql); + + stmt.setLong(1, userId); + ResultSet rs = stmt.executeQuery(); + if (rs.next()) { + BigDecimal amount = rs.getBigDecimal(1); + return amount.toString(); + } + return "0"; + } catch (SQLException e) { + throw new RuntimeException(e); + } + + } + + private String mapRowSimple(ResultSet rs) throws SQLException { + return "Amount: " + rs.getString("amount") + + ", Date: " + rs.getString("donation_date") + + ", Organization: " + rs.getString("organization_id"); + } + + private String mapRowFavorite(ResultSet rs) throws SQLException { + return rs.getString("organization_id") + + " (" + rs.getInt("donation_count") + " donasjoner)"; + } + From e67f0dde99d0479b22f6190c1cbb98c9896d133f Mon Sep 17 00:00:00 2001 From: lukaceli Date: Tue, 24 Mar 2026 13:55:02 +0100 Subject: [PATCH 2/3] Made UserStatistics class, and added methods that fetch information from database through DonationDao --- .../java/application/user/UserStatistics.java | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 src/main/java/application/user/UserStatistics.java diff --git a/src/main/java/application/user/UserStatistics.java b/src/main/java/application/user/UserStatistics.java new file mode 100644 index 0000000..8f43f7d --- /dev/null +++ b/src/main/java/application/user/UserStatistics.java @@ -0,0 +1,29 @@ +package application.user; + +import domain.user.User; +import java.util.ArrayList; +import java.util.List; +import persistence.DonationDao; + +public class UserStatistics { + private DonationDao donationDao; + + public UserStatistics() { + this.donationDao = new DonationDao(); + } + + public List userFavoriteOrganizations(User user) { + List favoriteOrganizations = donationDao.getFavoriteOrganizations(user.getID()); + return favoriteOrganizations; + } + + public List userDonations(User user) { + List userDonationList = donationDao.getUserDonations(user.getID()); + return userDonationList; + } + + public String userTotalDonationAmount(User user) { + String totalDonations = donationDao.getTotalDonationAmount(user.getID()); + return totalDonations; + } +} From 05de8ff70f7805ad125876f92c3ebae300c8e2d1 Mon Sep 17 00:00:00 2001 From: lukaceli Date: Tue, 24 Mar 2026 14:26:29 +0100 Subject: [PATCH 3/3] Made an extra method for getting total donations made by a user. UserStatistics accesses database through donationdao. --- .../java/application/user/UserStatistics.java | 5 ++++ src/main/java/persistence/DonationDao.java | 23 +++++++++++++++++++ 2 files changed, 28 insertions(+) diff --git a/src/main/java/application/user/UserStatistics.java b/src/main/java/application/user/UserStatistics.java index 8f43f7d..64333f1 100644 --- a/src/main/java/application/user/UserStatistics.java +++ b/src/main/java/application/user/UserStatistics.java @@ -26,4 +26,9 @@ public String userTotalDonationAmount(User user) { String totalDonations = donationDao.getTotalDonationAmount(user.getID()); return totalDonations; } + + public String getTotalDonationsMade(User user) { + String totalDonationsMade = donationDao.getTotalDonationsMade(user.getID()); + return totalDonationsMade; + } } diff --git a/src/main/java/persistence/DonationDao.java b/src/main/java/persistence/DonationDao.java index 338a92e..70ddba6 100644 --- a/src/main/java/persistence/DonationDao.java +++ b/src/main/java/persistence/DonationDao.java @@ -151,6 +151,29 @@ SELECT SUM(CAST(amount as REAL)) } catch (SQLException e) { throw new RuntimeException(e); } + } + + public String getTotalDonationsMade(long userId) { + String sql = """ + SELECT COUNT(*) + FROM donation + WHERE user_id = ? + """; + + try (Connection conn = Database.getConnection()) { + PreparedStatement stmt = conn.prepareStatement(sql); + + stmt.setLong(1, userId); + ResultSet rs = stmt.executeQuery(); + if (rs.next()) { + int amount = rs.getInt(1); + String s = String.valueOf(amount); + return s; + } + return "0"; + } catch (SQLException e) { + throw new RuntimeException(e); + } }