From 69ec2474c492b8eb60b51b8b1fb64621aad421d2 Mon Sep 17 00:00:00 2001 From: emilfa Date: Thu, 9 Apr 2026 11:45:56 +0200 Subject: [PATCH] docs: renamed LoginController to AuthController and updated javadoc in controller clases to be more descriptive --- ...ginController.java => AuthController.java} | 59 ++++++++++++++----- .../app/control/DonationController.java | 39 ++++++++++-- .../app/control/NavigationController.java | 14 ++--- .../app/control/OrganizationController.java | 14 ++--- .../app/view/causespage/CausesPageView.java | 2 +- .../app/view/loginpage/LoginPageView.java | 10 ++-- .../app/view/loginpage/SignInPageView.java | 10 ++-- .../app/view/userpage/UserPageView.java | 20 +++---- 8 files changed, 111 insertions(+), 57 deletions(-) rename src/main/java/edu/group5/app/control/{LoginController.java => AuthController.java} (54%) diff --git a/src/main/java/edu/group5/app/control/LoginController.java b/src/main/java/edu/group5/app/control/AuthController.java similarity index 54% rename from src/main/java/edu/group5/app/control/LoginController.java rename to src/main/java/edu/group5/app/control/AuthController.java index d9cb35e..7e22cba 100644 --- a/src/main/java/edu/group5/app/control/LoginController.java +++ b/src/main/java/edu/group5/app/control/AuthController.java @@ -8,30 +8,48 @@ import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; /** - * A controller that handles the logic pertaining to {@link User} - * sign in, login and logout via {@link UserService}. + * Controller responsible for authentication-related operations. + * + *

Coordinates between {@link AppState}, {@link NavigationController} + * and {@link UserService} to: + *

+ *

*/ -public class LoginController { +public class AuthController { private final AppState appState; private final NavigationController nav; private final UserService userService; - public LoginController(AppState appState, NavigationController nav, UserService userService) { + public AuthController(AppState appState, NavigationController nav, UserService userService) { this.appState = appState; this.nav = nav; this.userService = userService; } /** - * Handles the sign in of a new {@link User}. + * Handles the registration of a {@link User}. * - * @param view view connected to the sign in. - * @param firstName first name of the {@link User}. - * @param lastName last name of the {@link User}. - * @param email email of the {@link User}. - * @param passwordChars password of the {@link User}. + * + * + *

If the registration is successful, the user is stored in {@link AppState} and + * the application navigates to the home page. Otherwise, an error message + * is displayed in the provided view.

+ * + * @param view the view used to display feedback to the user + * @param firstName the user's first name + * @param lastName the user's last name + * @param email the user's email + * @param passwordChars the user's password */ - public void handleSignIn(SignInPageView view, String firstName, String lastName, String email, char[] passwordChars) { + public void handleSignUp(SignInPageView view, String firstName, String lastName, String email, char[] passwordChars) { if (firstName == null || firstName.trim().isEmpty() || lastName == null || lastName.trim().isEmpty() || email == null || email.trim().isEmpty() || @@ -60,9 +78,18 @@ public void handleSignIn(SignInPageView view, String firstName, String lastName, /** * Handles the login of a {@link User}. * - * @param view view connected to the login. - * @param email email of the {@link User}. - * @param passwordChars password of the {@link User}. + * + * + * If the login is successful, the user is stored in {@link AppState} and the + * application navigates to the home page. Otherwise, an error message is + * displayed within the provided view. + * + * @param view the view used to display feedback to the user + * @param email the user's email + * @param passwordChars the user's password */ public void handleLogin(LoginPageView view, String email, char[] passwordChars) { if (email == null || email.trim().isEmpty() || passwordChars == null || passwordChars.length == 0) { @@ -82,11 +109,15 @@ public void handleLogin(LoginPageView view, String email, char[] passwordChars) /** * Handles the logout of a {@link User}. + * + *

Clears states in {@link AppState} and the application + * navigates to the login page.

*/ public void handleLogout() { appState.setCurrentUser(null); appState.setCurrentOrganization(null); appState.setCurrentDonationAmount(null); + appState.setCurrentPaymentMethod(null); nav.showLoginPage(); } } diff --git a/src/main/java/edu/group5/app/control/DonationController.java b/src/main/java/edu/group5/app/control/DonationController.java index 5c700b0..e6fc80f 100644 --- a/src/main/java/edu/group5/app/control/DonationController.java +++ b/src/main/java/edu/group5/app/control/DonationController.java @@ -13,8 +13,17 @@ import java.util.Set; /** - * A controller that handles the logic pertaining to - * making donations and getting data via {@link DonationService}. + * Controller responsible for donation-related operations. + * + *

+ * Coordinates between {@link AppState}, {@link DonationService} + * and {@link NavigationController} to: + *

+ *

*/ public class DonationController { private final AppState appState; @@ -27,11 +36,23 @@ public DonationController(AppState appState, NavigationController nav, DonationS this.service = service; } + /** + * Retrieves all donations made by a specific user. + * + * @param userId the ID of the user + * @return a map of donations. + */ public Map getUserDonations(int userId) { return service.getDonationRepository().filterByUser(userId); } - public Set getUniqueOrganizations() { + /** + * Returns a set of unique organization IDs that the current user + * has donated to. + * + * @return a set of organization IDs + */ + public Set getUniqueOrganizationIDs() { Map userDonations = getUserDonations(appState.getCurrentUser().getUserId()); Set uniqueOrganizations = new HashSet<>(); @@ -43,8 +64,16 @@ public Set getUniqueOrganizations() { } /** - * Handles the creation of a new donation via {@link DonationService} - * and {@link AppState}. + * Processes a donation using data stored in {@link AppState}. + * + *

+ *

    + *
  • Validates the current user, organization, amount and payment method
  • + *
  • Invokes {@link DonationService#donate(Customer, int, BigDecimal, String)} to create the donation
  • + *
  • Clears temporary donation state
  • + *
  • Navigates to the payment complete view
  • + *
+ *

*/ public void handleDonate() { // Get session data from MainController diff --git a/src/main/java/edu/group5/app/control/NavigationController.java b/src/main/java/edu/group5/app/control/NavigationController.java index db16c95..2d1e6ab 100644 --- a/src/main/java/edu/group5/app/control/NavigationController.java +++ b/src/main/java/edu/group5/app/control/NavigationController.java @@ -17,7 +17,7 @@ import javafx.scene.layout.BorderPane; /** - * A controller that handles the switching of views in the root node. + * Controller responsible for navigating between views within the root node. */ public class NavigationController { private final BorderPane root; @@ -26,7 +26,7 @@ public class NavigationController { private final AppState appState; - private final LoginController loginController; + private final AuthController authController; private final DonationController donationController; private final OrganizationController organizationController; @@ -37,9 +37,9 @@ public NavigationController(BorderPane root, AppState appState, UserService user this.appState = appState; - this.loginController = new LoginController(appState, this, userService); + this.authController = new AuthController(appState, this, userService); this.donationController = new DonationController(appState, this, donationService); - this.organizationController = new OrganizationController(appState, this, organizationService); + this.organizationController = new OrganizationController(organizationService); } public void showHomePage() { @@ -49,12 +49,12 @@ public void showHomePage() { public void showLoginPage() { root.setTop(loginHeader); - root.setCenter(new LoginPageView(appState, this, loginController)); + root.setCenter(new LoginPageView(appState, this, authController)); } public void showSignInPage() { root.setTop(loginHeader); - root.setCenter(new SignInPageView(appState, this, loginController)); + root.setCenter(new SignInPageView(appState, this, authController)); } public void showPaymentCompletePage() { @@ -83,6 +83,6 @@ public void showAboutUsPage() { public void showUserPage() { root.setTop(header); - root.setCenter(new UserPageView(appState, this, loginController, donationController, organizationController)); + root.setCenter(new UserPageView(appState, this, authController, donationController, organizationController)); } } diff --git a/src/main/java/edu/group5/app/control/OrganizationController.java b/src/main/java/edu/group5/app/control/OrganizationController.java index 62a787c..fb65127 100644 --- a/src/main/java/edu/group5/app/control/OrganizationController.java +++ b/src/main/java/edu/group5/app/control/OrganizationController.java @@ -1,6 +1,5 @@ package edu.group5.app.control; -import edu.group5.app.model.AppState; import edu.group5.app.model.organization.Organization; import edu.group5.app.model.organization.OrganizationService; @@ -8,25 +7,20 @@ import java.util.concurrent.CompletableFuture; /** - * A controller that handles the data being passed to - * the view via the {@link OrganizationService}. + * Controller responsible for organization-related operations. */ public class OrganizationController { - private final AppState appState; - private final NavigationController nav; private final OrganizationService service; - public OrganizationController(AppState appState, NavigationController nav, OrganizationService service) { - this.appState = appState; - this.nav = nav; + public OrganizationController(OrganizationService service) { this.service = service; } - public Organization getOrgById(int orgId) { + public Organization getOrganizationById(int orgId) { return service.findByOrgNumber(orgId); } - public Map getTrustedOrgs() { + public Map getTrustedOrganizations() { return service.getTrustedOrganizations(); } 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 1cd6e83..45d80c5 100644 --- a/src/main/java/edu/group5/app/view/causespage/CausesPageView.java +++ b/src/main/java/edu/group5/app/view/causespage/CausesPageView.java @@ -77,7 +77,7 @@ private GridPane createOrganizationSection(String searchTerm) { } if (allOrganizations == null) { - allOrganizations = orgController.getTrustedOrgs(); + allOrganizations = orgController.getTrustedOrganizations(); //Show loading text while organizations and logos are fetched grid.add(new javafx.scene.control.Label("Loading..."), 0, 0); 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 af972e0..a6db821 100644 --- a/src/main/java/edu/group5/app/view/loginpage/LoginPageView.java +++ b/src/main/java/edu/group5/app/view/loginpage/LoginPageView.java @@ -1,7 +1,7 @@ package edu.group5.app.view.loginpage; import edu.group5.app.control.NavigationController; -import edu.group5.app.control.LoginController; +import edu.group5.app.control.AuthController; import edu.group5.app.model.AppState; import javafx.geometry.Pos; import javafx.scene.control.Button; @@ -15,16 +15,16 @@ public class LoginPageView extends BorderPane { private final AppState appState; private final NavigationController nav; - private final LoginController loginController; + private final AuthController authController; private TextField emailField; private PasswordField passwordField; private Label errorLabel; - public LoginPageView(AppState appState, NavigationController nav, LoginController loginController) { + public LoginPageView(AppState appState, NavigationController nav, AuthController authController) { this.appState = appState; this.nav = nav; - this.loginController = loginController; + this.authController = authController; HBox content = new HBox(); content.setFillHeight(true); @@ -97,7 +97,7 @@ private Button getLoginBtn() { Button loginBtn = new Button("Log In"); loginBtn.setMaxWidth(300); loginBtn.setId("login-btn"); - loginBtn.setOnMouseClicked(e -> loginController.handleLogin( + loginBtn.setOnMouseClicked(e -> authController.handleLogin( this, getEmail(), getPassword() diff --git a/src/main/java/edu/group5/app/view/loginpage/SignInPageView.java b/src/main/java/edu/group5/app/view/loginpage/SignInPageView.java index 946dae4..d823746 100644 --- a/src/main/java/edu/group5/app/view/loginpage/SignInPageView.java +++ b/src/main/java/edu/group5/app/view/loginpage/SignInPageView.java @@ -1,7 +1,7 @@ package edu.group5.app.view.loginpage; import edu.group5.app.control.NavigationController; -import edu.group5.app.control.LoginController; +import edu.group5.app.control.AuthController; import edu.group5.app.model.AppState; import javafx.geometry.Pos; import javafx.scene.control.Button; @@ -16,7 +16,7 @@ public class SignInPageView extends BorderPane { private final AppState appState; private final NavigationController nav; - private final LoginController loginController; + private final AuthController authController; private TextField nameField; private TextField surnameField; @@ -24,10 +24,10 @@ public class SignInPageView extends BorderPane { private PasswordField passwordField; private Label errorLabel; - public SignInPageView(AppState appState, NavigationController nav, LoginController loginController) { + public SignInPageView(AppState appState, NavigationController nav, AuthController authController) { this.appState = appState; this.nav = nav; - this.loginController = loginController; + this.authController = authController; HBox content = new HBox(); content.setFillHeight(true); @@ -130,7 +130,7 @@ private Button getSignInBtn() { Button signInBtn = new Button("Sign In"); signInBtn.setMaxWidth(300); signInBtn.setId("login-btn"); - signInBtn.setOnMouseClicked(e -> loginController.handleSignIn( + signInBtn.setOnMouseClicked(e -> authController.handleSignUp( this, getFirstName(), getLastName(), 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 d416916..216603d 100644 --- a/src/main/java/edu/group5/app/view/userpage/UserPageView.java +++ b/src/main/java/edu/group5/app/view/userpage/UserPageView.java @@ -3,7 +3,7 @@ import edu.group5.app.control.DonationController; import edu.group5.app.control.NavigationController; import edu.group5.app.control.OrganizationController; -import edu.group5.app.control.LoginController; +import edu.group5.app.control.AuthController; import edu.group5.app.model.AppState; import edu.group5.app.model.donation.Donation; import edu.group5.app.model.organization.Organization; @@ -27,14 +27,14 @@ public class UserPageView extends BorderPane { private final AppState appState; private final NavigationController nav; - private final LoginController loginController; + private final AuthController authController; private final DonationController donationController; private final OrganizationController organizationController; - public UserPageView(AppState appState, NavigationController nav, LoginController loginController, DonationController donationController, OrganizationController organizationController) { + public UserPageView(AppState appState, NavigationController nav, AuthController authController, DonationController donationController, OrganizationController organizationController) { this.appState = appState; this.nav = nav; - this.loginController = loginController; + this.authController = authController; this.donationController = donationController; this.organizationController = organizationController; @@ -66,7 +66,7 @@ private HBox createProfileSection() { Button logoutBtn = new Button("Logout"); logoutBtn.getStyleClass().add("logout-button"); - logoutBtn.setOnAction(e -> loginController.handleLogout()); + logoutBtn.setOnAction(e -> authController.handleLogout()); VBox info = new VBox(10, name, email, location, logoutBtn); info.setAlignment(Pos.CENTER_LEFT); @@ -85,15 +85,15 @@ private VBox createCausesSection() { User currentUser = appState.getCurrentUser(); - Set uniqueOrgs = donationController.getUniqueOrganizations(); + Set uniqueOrganizations = donationController.getUniqueOrganizationIDs(); - if (uniqueOrgs.isEmpty()) { + if (uniqueOrganizations.isEmpty()) { Label noCauses = new Label("No causes supported yet"); noCauses.setStyle("-fx-text-fill: #999;"); causesBox.getChildren().add(noCauses); } else { - for (int orgId : uniqueOrgs) { - Organization org = organizationController.getOrgById(orgId); + for (int orgId : uniqueOrganizations) { + Organization org = organizationController.getOrganizationById(orgId); if (org != null) { Label causeLabel = new Label("• " + org.name()); causesBox.getChildren().add(causeLabel); @@ -125,7 +125,7 @@ private VBox createDonationsSection() { donationsBox.getChildren().add(noDonations); } else { for (Donation donation : userDonations.values()) { - Organization org = organizationController.getOrgById(donation.organizationId()); + Organization org = organizationController.getOrganizationById(donation.organizationId()); String orgName = (org != null) ? org.name() : "Unknown Organization"; Label donationLabel = new Label(