Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
34 changes: 34 additions & 0 deletions src/main/java/application/user/UserStatistics.java
Original file line number Diff line number Diff line change
@@ -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<String> userFavoriteOrganizations(User user) {
List<String> favoriteOrganizations = donationDao.getFavoriteOrganizations(user.getID());
return favoriteOrganizations;
}

public List<String> userDonations(User user) {
List<String> 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;
}
}
100 changes: 100 additions & 0 deletions src/main/java/persistence/DonationDao.java
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,106 @@ public List<Donation> findByUser(long userId) {
}
}

public List<String> 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<String> list = new ArrayList<>();
while (rs.next()) list.add(mapRowSimple(rs));
return list;
} catch (SQLException e) {
throw new RuntimeException(e);
}
}

public List<String> 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<String> 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)";
}




Expand Down
Loading