diff --git a/src/main/java/application/user/UserStatistics.java b/src/main/java/application/user/UserStatistics.java new file mode 100644 index 0000000..64333f1 --- /dev/null +++ b/src/main/java/application/user/UserStatistics.java @@ -0,0 +1,34 @@ +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; + } + + 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 ff8b783..70ddba6 100644 --- a/src/main/java/persistence/DonationDao.java +++ b/src/main/java/persistence/DonationDao.java @@ -88,6 +88,106 @@ 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); + } + } + + 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); + } + + } + + 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)"; + } +