diff --git a/src/main/java/edu/group5/app/control/AuthController.java b/src/main/java/edu/group5/app/control/AuthController.java index c2f923b..7c34afd 100644 --- a/src/main/java/edu/group5/app/control/AuthController.java +++ b/src/main/java/edu/group5/app/control/AuthController.java @@ -1,7 +1,6 @@ package edu.group5.app.control; import edu.group5.app.model.AppState; -import edu.group5.app.model.organization.Organization; import edu.group5.app.model.user.User; import edu.group5.app.model.user.UserService; import edu.group5.app.utils.ParameterValidator; diff --git a/src/main/java/edu/group5/app/control/DonationController.java b/src/main/java/edu/group5/app/control/DonationController.java index 70d6444..07af6fd 100644 --- a/src/main/java/edu/group5/app/control/DonationController.java +++ b/src/main/java/edu/group5/app/control/DonationController.java @@ -83,7 +83,7 @@ public String getPaymentMethod() { */ public Map getUserDonations(int userId) { ParameterValidator.intChecker(userId, "User ID"); - return service.getDonationRepository().filterByUser(userId); + return service.getUserDonations(userId); } /** diff --git a/src/main/java/edu/group5/app/control/NavigationController.java b/src/main/java/edu/group5/app/control/NavigationController.java index 04fb5e2..92ea26a 100644 --- a/src/main/java/edu/group5/app/control/NavigationController.java +++ b/src/main/java/edu/group5/app/control/NavigationController.java @@ -63,7 +63,7 @@ public NavigationController(BorderPane root, AppState appState, UserService user */ public void showHomePage() { root.setTop(header); - root.setCenter(new HomePageView(appState, this)); + root.setCenter(new HomePageView(this)); } /** @@ -72,7 +72,7 @@ public void showHomePage() { */ public void showLoginPage() { root.setTop(loginHeader); - root.setCenter(new LoginPageView(appState, this, authController)); + root.setCenter(new LoginPageView(this, authController)); } /** @@ -81,7 +81,7 @@ public void showLoginPage() { */ public void showSignUpPage() { root.setTop(loginHeader); - root.setCenter(new SignUpPageView(appState, this, authController)); + root.setCenter(new SignUpPageView(this, authController)); } /** @@ -99,7 +99,7 @@ public void showPaymentCompletePage() { */ public void showCausesPage() { root.setTop(header); - root.setCenter(new CausesPageView(appState, this, organizationController)); + root.setCenter(new CausesPageView(this, organizationController)); } /** @@ -109,7 +109,7 @@ public void showCausesPage() { */ public void showOrganizationPage() { root.setTop(header); - root.setCenter(new OrganizationPageView(appState, this, donationController)); + root.setCenter(new OrganizationPageView(this, organizationController, donationController)); } /** @@ -118,7 +118,7 @@ public void showOrganizationPage() { */ public void showDonationPage() { root.setTop(header); - root.setCenter(new DonationPageView(appState, this, donationController)); + root.setCenter(new DonationPageView(this, donationController)); } public void showAboutUsPage() { 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 6f978b1..5eb964b 100644 --- a/src/main/java/edu/group5/app/model/donation/DonationService.java +++ b/src/main/java/edu/group5/app/model/donation/DonationService.java @@ -1,5 +1,6 @@ package edu.group5.app.model.donation; import java.time.Instant; +import java.util.Map; import java.math.BigDecimal; import java.sql.Timestamp; import edu.group5.app.model.organization.Organization; @@ -34,21 +35,21 @@ public DonationService(DonationRepository donationRepository, } /** - * Getter for the DonationRepository used by this service. - * This method allows access to the donation repository for managing donation records and retrieving donation information. - * @return the DonationRepository instance used by this service + * Gets all donations made by a specific user. + * @param userId the ID of the user + * @return a map of donations made by that user */ - public DonationRepository getDonationRepository() { - return this.donationRepository; + public Map getUserDonations(int userId) { + return donationRepository.filterByUser(userId); } /** - * Getter for the OrganizationRepository used by this service. - * This method allows access to the organization repository for validating organization information when processing donations. - * @return the OrganizationRepository instance used by this service + * Gets all donations to a specific organization. + * @param organizationId the organization ID + * @return map of donations to that organization */ - public OrganizationRepository getOrganizationRepository() { - return this.organizationRepository; + public Map getOrganizationDonations(int organizationId) { + return donationRepository.filterByOrganization(organizationId); } /** diff --git a/src/main/java/edu/group5/app/model/organization/OrganizationService.java b/src/main/java/edu/group5/app/model/organization/OrganizationService.java index d0c84a3..df4d04e 100644 --- a/src/main/java/edu/group5/app/model/organization/OrganizationService.java +++ b/src/main/java/edu/group5/app/model/organization/OrganizationService.java @@ -35,14 +35,6 @@ public OrganizationService(OrganizationRepository organizationRepository, Organi this.scraper = scraper; } - /** - * Getter for the OrganizationRepository used by this service. - * @return the OrganizationRepository instance used by this service - */ - public OrganizationRepository getOrganizationRepository() { - return this.organizationRepository; - } - /** * Retrieves all trusted organizations. * @return a map of trusted organizations by organization number diff --git a/src/main/java/edu/group5/app/model/user/User.java b/src/main/java/edu/group5/app/model/user/User.java index 54c9e16..806f1f7 100644 --- a/src/main/java/edu/group5/app/model/user/User.java +++ b/src/main/java/edu/group5/app/model/user/User.java @@ -1,5 +1,4 @@ package edu.group5.app.model.user; -import java.lang.reflect.Parameter; import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; 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 a6d316e..9d215d0 100644 --- a/src/main/java/edu/group5/app/model/user/UserService.java +++ b/src/main/java/edu/group5/app/model/user/UserService.java @@ -25,17 +25,6 @@ public UserService(UserRepository userRepository) { this.userRepository = userRepository; } - /** - * Getter for the UserRepository used by this service. - * This method allows access to the user repository for managing user data and - * performing operations such as registration and login. - * - * @return the UserRepository instance used by this service - */ - public UserRepository getUserRepository() { - return this.userRepository; - } - /** * Registers a new user with the given information. Validates the input data and * creates a new User object diff --git a/src/main/java/edu/group5/app/view/causespage/CausesPageView.java b/src/main/java/edu/group5/app/view/causespage/CausesPageView.java index 346df19..271bfa9 100644 --- a/src/main/java/edu/group5/app/view/causespage/CausesPageView.java +++ b/src/main/java/edu/group5/app/view/causespage/CausesPageView.java @@ -34,19 +34,16 @@ * a fallback "no image" is displayed.

*/ public class CausesPageView extends BorderPane { - private final AppState appState; private final NavigationController nav; private final OrganizationController orgController; private GridPane organizationGrid; private Map allOrganizations; - public CausesPageView(AppState appState, NavigationController nav, OrganizationController orgController) { - ParameterValidator.objectChecker(appState, "AppState"); + public CausesPageView(NavigationController nav, OrganizationController orgController) { ParameterValidator.objectChecker(nav, "NavigationController"); ParameterValidator.objectChecker(orgController, "OrganizationController"); - this.appState = appState; this.nav = nav; this.orgController = orgController; @@ -94,9 +91,9 @@ private BorderPane createBody() { card.updateLogo(entry.getValue().logoUrl()); } } - Organization currentOrg = appState.getCurrentOrganization(); + Organization currentOrg = orgController.getCurrentOrganization(); if (currentOrg != null && orgs.containsKey(currentOrg.orgNumber())) { - appState.setCurrentOrganization(orgs.get(currentOrg.orgNumber())); + orgController.setCurrentOrganization(orgs.get(currentOrg.orgNumber())); } }); }); @@ -165,7 +162,7 @@ private GridPane createOrganizationSection(String searchTerm) { ? org.logoUrl() : null; - OrganizationCard card = new OrganizationCard(appState, nav, org, img); + OrganizationCard card = new OrganizationCard(nav, orgController, org, img); grid.add(card, column, row); diff --git a/src/main/java/edu/group5/app/view/causespage/OrganizationCard.java b/src/main/java/edu/group5/app/view/causespage/OrganizationCard.java index c24b32a..4645d0b 100644 --- a/src/main/java/edu/group5/app/view/causespage/OrganizationCard.java +++ b/src/main/java/edu/group5/app/view/causespage/OrganizationCard.java @@ -1,9 +1,8 @@ package edu.group5.app.view.causespage; import edu.group5.app.control.NavigationController; -import edu.group5.app.model.AppState; +import edu.group5.app.control.OrganizationController; import edu.group5.app.model.organization.Organization; -import edu.group5.app.utils.ParameterValidator; import javafx.geometry.Pos; import javafx.scene.image.Image; import javafx.scene.image.ImageView; @@ -22,15 +21,16 @@ * to the organization's detail page.

*/ public class OrganizationCard extends VBox { - private final AppState appState; private final Organization organization; private final NavigationController nav; + private final OrganizationController organizationController; private StackPane imageContainer; private String currentLogoUrl; - public OrganizationCard(AppState appstate, NavigationController nav, Organization org, String img) { - this.appState = appstate; + public OrganizationCard(NavigationController nav, OrganizationController organizationController, + Organization org, String img) { this.nav = nav; + this.organizationController = organizationController; this.organization = org; setId("mainContainer"); getStylesheets().add(getClass().getResource("/browsepage/browse_org.css").toExternalForm()); @@ -43,7 +43,7 @@ public OrganizationCard(AppState appstate, NavigationController nav, Organizatio ); setOnMouseClicked(e -> { - appstate.setCurrentOrganization(getOrganizationWithCurrentLogo()); + organizationController.setCurrentOrganization(getOrganizationWithCurrentLogo()); nav.showOrganizationPage(); }); diff --git a/src/main/java/edu/group5/app/view/donationpage/DonationPageView.java b/src/main/java/edu/group5/app/view/donationpage/DonationPageView.java index 61ca29c..ed0288c 100644 --- a/src/main/java/edu/group5/app/view/donationpage/DonationPageView.java +++ b/src/main/java/edu/group5/app/view/donationpage/DonationPageView.java @@ -2,7 +2,6 @@ import edu.group5.app.control.DonationController; import edu.group5.app.control.NavigationController; -import edu.group5.app.model.AppState; import edu.group5.app.utils.ParameterValidator; import javafx.geometry.Insets; import javafx.geometry.Pos; @@ -28,7 +27,6 @@ * payment method buttons, donation button, and a back to organization page button.

*/ public class DonationPageView extends BorderPane { - private final AppState appState; private final NavigationController nav; private final DonationController donationController; @@ -37,12 +35,10 @@ public class DonationPageView extends BorderPane { private Node selectedPaymentMethod = null; private Button donateBtn; - public DonationPageView(AppState appState, NavigationController nav, DonationController donationController) { - ParameterValidator.objectChecker(appState, "AppState"); + public DonationPageView(NavigationController nav, DonationController donationController) { ParameterValidator.objectChecker(nav, "NavigationController"); ParameterValidator.objectChecker(donationController, "DonationController"); - this.appState = appState; this.nav = nav; this.donationController = donationController; @@ -219,7 +215,7 @@ private void selectPaymentMethod(Node element) { selectedPaymentMethod.getStyleClass().add("payment-method-selected"); String paymentMethod = (String) element.getUserData(); - appState.setCurrentPaymentMethod(paymentMethod); + donationController.setPaymentMethod(paymentMethod); updateDonationButtonState(); } @@ -243,7 +239,7 @@ private void clearSelection() { } private void updateDonationAmount(BigDecimal amount) { - appState.setCurrentDonationAmount(amount); + donationController.setDonationAmount(amount); } private BigDecimal parseAmount(String amountStr) { diff --git a/src/main/java/edu/group5/app/view/homepage/HomePageView.java b/src/main/java/edu/group5/app/view/homepage/HomePageView.java index c24b89b..137e0b1 100644 --- a/src/main/java/edu/group5/app/view/homepage/HomePageView.java +++ b/src/main/java/edu/group5/app/view/homepage/HomePageView.java @@ -1,7 +1,6 @@ package edu.group5.app.view.homepage; import edu.group5.app.control.NavigationController; -import edu.group5.app.model.AppState; import javafx.geometry.Pos; import javafx.scene.control.Button; import javafx.scene.control.ScrollPane; @@ -19,11 +18,9 @@ * and an about us button. The page also has a charity image at the bottom.

*/ public class HomePageView extends BorderPane { - private final AppState appState; private final NavigationController nav; - public HomePageView(AppState appState, NavigationController nav) { - this.appState = appState; + public HomePageView(NavigationController nav) { this.nav = nav; getStylesheets().add(getClass().getResource("/homepage/homepage.css").toExternalForm()); diff --git a/src/main/java/edu/group5/app/view/loginpage/LoginPageView.java b/src/main/java/edu/group5/app/view/loginpage/LoginPageView.java index 11b3ba7..927a8af 100644 --- a/src/main/java/edu/group5/app/view/loginpage/LoginPageView.java +++ b/src/main/java/edu/group5/app/view/loginpage/LoginPageView.java @@ -2,7 +2,6 @@ import edu.group5.app.control.NavigationController; import edu.group5.app.control.AuthController; -import edu.group5.app.model.AppState; import javafx.geometry.Pos; import javafx.scene.control.Button; import javafx.scene.control.Label; @@ -21,7 +20,6 @@ * a login box, an email box, a login button, and a register button.

*/ public class LoginPageView extends BorderPane { - private final AppState appState; private final NavigationController nav; private final AuthController authController; @@ -29,8 +27,7 @@ public class LoginPageView extends BorderPane { private PasswordField passwordField; private Label errorLabel; - public LoginPageView(AppState appState, NavigationController nav, AuthController authController) { - this.appState = appState; + public LoginPageView(NavigationController nav, AuthController authController) { this.nav = nav; this.authController = authController; diff --git a/src/main/java/edu/group5/app/view/loginpage/SignUpPageView.java b/src/main/java/edu/group5/app/view/loginpage/SignUpPageView.java index 8638a1f..bdcfb54 100644 --- a/src/main/java/edu/group5/app/view/loginpage/SignUpPageView.java +++ b/src/main/java/edu/group5/app/view/loginpage/SignUpPageView.java @@ -2,7 +2,6 @@ import edu.group5.app.control.NavigationController; import edu.group5.app.control.AuthController; -import edu.group5.app.model.AppState; import javafx.geometry.Pos; import javafx.scene.control.Button; import javafx.scene.control.Label; @@ -22,7 +21,6 @@ * a password field, a sign up button, and an back to login button.

*/ public class SignUpPageView extends BorderPane { - private final AppState appState; private final NavigationController nav; private final AuthController authController; @@ -32,8 +30,7 @@ public class SignUpPageView extends BorderPane { private PasswordField passwordField; private Label errorLabel; - public SignUpPageView(AppState appState, NavigationController nav, AuthController authController) { - this.appState = appState; + public SignUpPageView(NavigationController nav, AuthController authController) { this.nav = nav; this.authController = authController; diff --git a/src/main/java/edu/group5/app/view/organizationpage/OrganizationPageView.java b/src/main/java/edu/group5/app/view/organizationpage/OrganizationPageView.java index 2268d4d..3bea2ff 100644 --- a/src/main/java/edu/group5/app/view/organizationpage/OrganizationPageView.java +++ b/src/main/java/edu/group5/app/view/organizationpage/OrganizationPageView.java @@ -2,7 +2,7 @@ import edu.group5.app.control.DonationController; import edu.group5.app.control.NavigationController; -import edu.group5.app.model.AppState; +import edu.group5.app.control.OrganizationController; import edu.group5.app.model.organization.Organization; import javafx.geometry.Insets; import javafx.geometry.Pos; @@ -29,16 +29,21 @@ * donation page, and a back button to return to the causes page.

*/ public class OrganizationPageView extends BorderPane { - private final AppState appState; private final NavigationController nav; + private final OrganizationController organizationController; private final DonationController donationController; - public OrganizationPageView(AppState appState, NavigationController nav, DonationController donationController) { - this.appState = appState; + public OrganizationPageView(NavigationController nav, + OrganizationController organizationController, + DonationController donationController) { this.nav = nav; + this.organizationController = organizationController; this.donationController = donationController; - getStylesheets().add(Objects.requireNonNull(getClass().getResource("/organizationpage/organizationpage.css")).toExternalForm()); + getStylesheets().add(Objects + .requireNonNull(getClass() + .getResource("/organizationpage/organizationpage.css")) + .toExternalForm()); VBox content = new VBox(); content.getChildren().addAll(createBackButton(), createBody()); @@ -84,7 +89,7 @@ private StackPane createImageContainer() { imageContainer.setPrefWidth(120); imageContainer.setMaxWidth(120); - Organization org = appState.getCurrentOrganization(); + Organization org = organizationController.getCurrentOrganization(); if (org != null && org.logoUrl() != null && !org.logoUrl().isBlank()) { ImageView logo = new ImageView(new Image(org.logoUrl(), true)); logo.setId("logo"); @@ -106,7 +111,7 @@ private StackPane createImageContainer() { } private VBox createOrgInfoSection() { - Organization org = appState.getCurrentOrganization(); + Organization org = organizationController.getCurrentOrganization(); VBox orgInfoSection = new VBox(); orgInfoSection.setSpacing(50); diff --git a/src/main/java/edu/group5/app/view/userpage/UserPageView.java b/src/main/java/edu/group5/app/view/userpage/UserPageView.java index 5e2370a..c46af3c 100644 --- a/src/main/java/edu/group5/app/view/userpage/UserPageView.java +++ b/src/main/java/edu/group5/app/view/userpage/UserPageView.java @@ -19,12 +19,9 @@ import javafx.scene.layout.BorderPane; import javafx.scene.layout.FlowPane; import javafx.scene.layout.HBox; -import javafx.scene.layout.Priority; import javafx.scene.layout.VBox; import javafx.scene.text.Text; import java.text.SimpleDateFormat; - -import java.math.RoundingMode; import java.util.*; @@ -51,13 +48,15 @@ public UserPageView(AppState appState, NavigationController nav, AuthController } private HBox createProfileSection() { - ImageView avatar = new ImageView(new Image(Objects.requireNonNull(getClass().getResourceAsStream("/userpage/account_circle.png")))); + ImageView avatar = new ImageView(new Image(Objects + .requireNonNull(getClass() + .getResourceAsStream("/userpage/account_circle.png")))); avatar.setFitWidth(150); avatar.setFitHeight(150); avatar.setPreserveRatio(true); avatar.setId("avatar"); - User currentUser = appState.getCurrentUser(); + User currentUser = authController.getCurrentUser(); Text name = new Text(currentUser.getFirstName() + " " + currentUser.getLastName()); name.setId("profile-name"); @@ -133,7 +132,7 @@ private VBox createDonationsSection() { donationsBox.getStyleClass().add("donation-list"); donationsBox.setPadding(new Insets(10)); - User currentUser = appState.getCurrentUser(); + User currentUser = authController.getCurrentUser(); Map userDonations = donationController.getUserDonations(currentUser.getUserId()); diff --git a/src/test/java/edu/group5/app/model/donation/DonationServiceTest.java b/src/test/java/edu/group5/app/model/donation/DonationServiceTest.java index 3ed1aec..f57b559 100644 --- a/src/test/java/edu/group5/app/model/donation/DonationServiceTest.java +++ b/src/test/java/edu/group5/app/model/donation/DonationServiceTest.java @@ -61,16 +61,6 @@ void testConstructorThrowsIfOrganizationRepositoryIsNull() { assertEquals("OrganizationRepository cannot be null", exception.getMessage()); } - @Test - void testGetDonationRepository() { - assertEquals(donationRepository, donationService.getDonationRepository()); - } - - @Test - void testGetOrganizationRepository() { - assertEquals(organizationRepository, donationService.getOrganizationRepository()); - } - @Test void donateReturnsFalseIfCustomerNull() { boolean result = donationService.donate(null, diff --git a/src/test/java/edu/group5/app/model/organization/OrganizationServiceTest.java b/src/test/java/edu/group5/app/model/organization/OrganizationServiceTest.java index 2d76391..78f3e1a 100644 --- a/src/test/java/edu/group5/app/model/organization/OrganizationServiceTest.java +++ b/src/test/java/edu/group5/app/model/organization/OrganizationServiceTest.java @@ -43,11 +43,6 @@ void constructor_throwsIfScraperIsNull() { assertEquals("OrganizationScraper cannot be null", ex.getMessage()); } - @Test - void testGetOrganizationRepository() { - assertEquals(repo, service.getOrganizationRepository()); - } - @Test void testGetTrustedOrganizationsWithLogos() { Map orgsWithLogos = service.getTrustedOrganizationsWithLogos(); diff --git a/src/test/java/edu/group5/app/model/user/UserServiceTest.java b/src/test/java/edu/group5/app/model/user/UserServiceTest.java index acec10b..99a6913 100644 --- a/src/test/java/edu/group5/app/model/user/UserServiceTest.java +++ b/src/test/java/edu/group5/app/model/user/UserServiceTest.java @@ -34,11 +34,6 @@ void constructorthrowsIfNull() { assertEquals("UserRepository cannot be null", ex.getMessage()); } - @Test - void testGetUserRepository() { - assertEquals(repo, service.getUserRepository()); - } - @Test void registerUserValid() { boolean result = service.registerUser("Customer", "Alice", "Smith",