From 6c34cfcfe52906247daeba0027d48c74ceb83700 Mon Sep 17 00:00:00 2001 From: Fredrik Marjoni Date: Thu, 5 Mar 2026 12:47:13 +0100 Subject: [PATCH] Fix: Fix OrganizationRepository constructor and update related classes --- .../edu/group5/app/model/DBRepository.java | 4 -- .../java/edu/group5/app/model/Repository.java | 2 +- .../app/model/donation/DonationService.java | 12 ++--- .../organization/OrganizationRepository.java | 17 ++++--- .../edu/group5/app/model/user/Customer.java | 2 - .../group5/app/model/user/UserRepository.java | 48 +++++++++++++++++++ .../group5/app/model/user/UserService.java | 16 +++---- .../OrganizationRepositoryTest.java | 2 - 8 files changed, 70 insertions(+), 33 deletions(-) create mode 100644 src/main/java/edu/group5/app/model/user/UserRepository.java diff --git a/src/main/java/edu/group5/app/model/DBRepository.java b/src/main/java/edu/group5/app/model/DBRepository.java index 1196eae..9dac3c0 100644 --- a/src/main/java/edu/group5/app/model/DBRepository.java +++ b/src/main/java/edu/group5/app/model/DBRepository.java @@ -1,9 +1,5 @@ package edu.group5.app.model; - - -import java.util.HashMap; import java.util.Map; - /** * Abstract base class for repositories that store their data * in a database-related structure. diff --git a/src/main/java/edu/group5/app/model/Repository.java b/src/main/java/edu/group5/app/model/Repository.java index 5396b2f..032f307 100644 --- a/src/main/java/edu/group5/app/model/Repository.java +++ b/src/main/java/edu/group5/app/model/Repository.java @@ -12,7 +12,7 @@ public abstract class Repository { * * @param content the underlying data structure used to store entities */ - public Repository(Map content) { + protected Repository(Map content) { this.content = content; } diff --git a/src/main/java/edu/group5/app/model/donation/DonationService.java b/src/main/java/edu/group5/app/model/donation/DonationService.java index 0b6aafd..11dde6c 100644 --- a/src/main/java/edu/group5/app/model/donation/DonationService.java +++ b/src/main/java/edu/group5/app/model/donation/DonationService.java @@ -1,13 +1,11 @@ -package edu.group5.app.service; +package edu.group5.app.model.donation; import java.time.Instant; import java.math.BigDecimal; import java.sql.Timestamp; -import edu.group5.app.model.donation.Donation; import edu.group5.app.model.organization.Organization; import edu.group5.app.model.organization.OrganizationRepository; import edu.group5.app.model.user.Customer; -import edu.group5.app.model.donation.DonationRepository; /** * DonationService class provides functionality for handling donations in the system. @@ -47,16 +45,16 @@ public DonationService(DonationRepository donationRepository, * @param amount the amount of the donation * @return true if the donation is successfully processed, false otherwise */ - public boolean donate(Customer customer, int orgNumber, BigDecimal amount) { - if (customer == null || amount == null || amount.compareTo(BigDecimal.ZERO) <= 0) { + public boolean donate(Customer customer, int orgNumber, BigDecimal amount, String paymentMethod) { + if (customer == null || amount == null || amount.compareTo(BigDecimal.ZERO) <= 0 || paymentMethod.isBlank()) { return false; } Organization org = organizationRepository.findByOrgNumber(orgNumber); if (org == null) { return false; } - Donation donation = new Donation(customer.getUserId(), org.orgNumber(), - amount, Timestamp.from(Instant.now())); + Donation donation = new Donation(1, customer.getUserId(), org.orgNumber(), /* TODO fix incrementation of donation */ + amount, Timestamp.from(Instant.now()), paymentMethod); donationRepository.addDonation(donation); return true; } diff --git a/src/main/java/edu/group5/app/model/organization/OrganizationRepository.java b/src/main/java/edu/group5/app/model/organization/OrganizationRepository.java index 3147116..53b4241 100644 --- a/src/main/java/edu/group5/app/model/organization/OrganizationRepository.java +++ b/src/main/java/edu/group5/app/model/organization/OrganizationRepository.java @@ -14,10 +14,11 @@ public class OrganizationRepository extends Repository { private final HashMap grandMap; public OrganizationRepository(Object[] input) { + super(new HashMap<>()); + grandMap = new HashMap<>(); if (input == null) { throw new IllegalArgumentException("The input cannot be null"); } - grandMap = new HashMap<>(); ObjectMapper mapper = new ObjectMapper(); for (Object obj : input) { @@ -33,12 +34,7 @@ public OrganizationRepository(Object[] input) { String websiteURL = (String) contentMap.get("url"); - boolean isPreApproved = true; - if (!contentMap.containsKey("is_pre_approved")) { - isPreApproved = false; - } else if ((boolean)contentMap.get("is_pre_approved") == false) { - isPreApproved = false; - } + boolean isPreApproved = Boolean.TRUE.equals(contentMap.get("is_pre_approved")); String description = "Information about " + name; @@ -63,4 +59,11 @@ public Map getTrustedOrganizations() { return trustedOrganizations; } + public Organization findByOrgNumber(int orgNumber) { + if (orgNumber == 0 || orgNumber <= 0) { + throw new IllegalArgumentException("The Organization number must be a positive integer"); + } + return grandMap.get(orgNumber); + } + } diff --git a/src/main/java/edu/group5/app/model/user/Customer.java b/src/main/java/edu/group5/app/model/user/Customer.java index 2c221b0..5d3fa7e 100644 --- a/src/main/java/edu/group5/app/model/user/Customer.java +++ b/src/main/java/edu/group5/app/model/user/Customer.java @@ -3,8 +3,6 @@ import java.util.List; import java.util.ArrayList; -import edu.group5.app.model.organization.Organization; - /** * Customer class represents a customer in the system. * It extends the User class and includes additional functionality specific to customers, diff --git a/src/main/java/edu/group5/app/model/user/UserRepository.java b/src/main/java/edu/group5/app/model/user/UserRepository.java new file mode 100644 index 0000000..18bbd09 --- /dev/null +++ b/src/main/java/edu/group5/app/model/user/UserRepository.java @@ -0,0 +1,48 @@ +package edu.group5.app.model.user; + +import java.util.HashMap; + +import edu.group5.app.model.DBRepository; + +public class UserRepository extends DBRepository{ + + /** + * Constructs DonationRepository using Hashmap, + * and extends the content from DBRepository. + * @param content the underlying map used to store donations, + * where the key represents the donation ID + */ + public UserRepository(HashMap content) { + super(content); + if (content == null) { + throw new IllegalArgumentException("Content cannot be null"); + } + } + + /** + * Adds a new donation to the repository + *

+ * The donation is stored using its {@code donationId} as the key. + * If a donation with the same ID already exists, the donation + * will not be added. + *

+ * + * @param donation the donation to add + * @return {@code true} if the donation was successfully added, and + * {@code false} if a donation with the same ID already exists + */ + public boolean addUser(User user) { + if (user == null) { + throw new IllegalArgumentException("Donation cannot be null"); + } + if (content.containsKey(user.getUserId())){ + return false; + } + content.put(user.getUserId(), user); + return true; + } + + public User findUserByEmail(String email) { + return null; + } +} diff --git a/src/main/java/edu/group5/app/model/user/UserService.java b/src/main/java/edu/group5/app/model/user/UserService.java index a979eee..d75d380 100644 --- a/src/main/java/edu/group5/app/model/user/UserService.java +++ b/src/main/java/edu/group5/app/model/user/UserService.java @@ -23,7 +23,9 @@ public boolean registerUser(String role, String firstName, String lastName, User user; if (role.equalsIgnoreCase("Customer")) { user = new Customer(0, firstName, lastName, email, passwordHash); - } + } else { + return false; + } userRepository.addUser(user); return true; } @@ -32,13 +34,7 @@ public boolean login(String email, String password) { if (email == null || email.trim().isEmpty() || password == null) { return false; } - User user = userRepository.findByEmail(email); - if (user == null) { - return false; - } - if (user.verifyPassword(password)) { - return true; - } - return false; -} + User user = userRepository.findUserByEmail(email); + return user != null && user.verifyPassword(password); + } } diff --git a/src/test/java/edu/group5/app/model/organization/OrganizationRepositoryTest.java b/src/test/java/edu/group5/app/model/organization/OrganizationRepositoryTest.java index 184b5e7..1913988 100644 --- a/src/test/java/edu/group5/app/model/organization/OrganizationRepositoryTest.java +++ b/src/test/java/edu/group5/app/model/organization/OrganizationRepositoryTest.java @@ -3,8 +3,6 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import edu.group5.app.model.user.Customer; - import java.util.Map; import static org.junit.jupiter.api.Assertions.*;