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:
+ *
+ * - Sign-up a new user
+ * - Login in a user
+ * - Logout a user
+ *
+ *
*/
-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}.
+ *
+ * - Validates the firstname, lastname, email and password fields
+ * - Encrypts the password
+ * - Invokes {@link UserService#registerUser(String, String, String, String, String)} to register the 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}.
+ *
+ * - Validates the email and password of the user
+ * - Invokes {@link UserService#login(String, char[])} to login in the 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:
+ *
+ * - Retrieve donation data for the current user
+ * - Process new donations
+ * - Handle navigation after donation completion
+ *
+ *
*/
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(