Skip to content

Release/v2.0.0 #86

Merged
merged 126 commits into from
Apr 24, 2026
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
126 commits
Select commit Hold shift + click to select a range
050f592
refactor: replaced all the page controllers with one PageController
emilfa Mar 20, 2026
c3b2cac
refactor: made application run with new controller structure
emilfa Mar 20, 2026
316d43c
feat[utils]: Add ParameterValidator class increasing SoC and SRP
Mar 24, 2026
218a32f
update&test[utils]: Add positive and negative JUnit tests to Paramete…
Mar 24, 2026
fc087d7
refactor: changed file names and changed MainController to Navigation…
emilfa Mar 24, 2026
7da35bf
refactor: divided controllers into Navigation-, User-, Donation- and …
emilfa Mar 24, 2026
896ca24
feat: created AppState to keep track of the state of the application
emilfa Mar 24, 2026
4cecbe4
refactor: changed view to work with new controller structure
emilfa Mar 24, 2026
e0ef534
fix: removed test css borders
emilfa Mar 24, 2026
d6ce272
added jsoup dependency
Mar 24, 2026
7680c99
feat: added logoUrl atribute
Mar 24, 2026
f148875
feat: set logoUrl as null
Mar 24, 2026
632bdcb
feat: added methods to get organization logos from API
Mar 24, 2026
04c92c4
feat: added images to BrowseCards
Mar 24, 2026
27aff0f
feat: added images to BrowsePageView
Mar 24, 2026
33484e3
feat: added tests to Organization classes
Mar 24, 2026
5db4ec6
feat: added images to Organization pages
Mar 24, 2026
c8341af
refactor: removed unnessecary class variables
emilfa Mar 26, 2026
1fc75a7
refactor: renamed UserController to LoginController
emilfa Mar 26, 2026
80f5044
Merge pull request #58 from Group-5/perf/browsepage
fredrjm Mar 26, 2026
6bab090
merged release/v2.0.0 into refactor/frontend-structure
emilfa Mar 26, 2026
b031166
Merge pull request #59 from Group-5/refactor/frontend-structure
fredrjm Mar 26, 2026
18f6520
added getter and setter for PaymentMethod
Mar 30, 2026
9a4e4dc
feat: added paymentMethod to controller
Mar 30, 2026
9625956
feat: added paymentMethodSection
Mar 30, 2026
d1c9f2b
fead: added scrollpanes and formatted amount
Mar 30, 2026
b841bb5
fix: fixed the buttons for payment methods
Mar 30, 2026
4535524
feat: added backbuttons with css
Mar 30, 2026
2f11b68
update: update speed of rendering OrgCards and Org image with Paralle…
Apr 5, 2026
ed93b95
update&perf[App]: Update and infcreased performance of org.logos rend…
Apr 5, 2026
8fb60ce
refactor[wrapper]: move wrapper module from control to model
Apr 7, 2026
30dd4af
Merge pull request #60 from Group-5/feat/DonationPage
emilfa Apr 7, 2026
ff2e953
Merge pull request #61 from Group-5/refactor/wrapper
emilfa Apr 7, 2026
c5c3ce9
fix[App]: remove preloading redundancy
Apr 8, 2026
a2a087b
feat&update[OrganizationPage]: Update description to be description f…
Apr 8, 2026
456a1d6
update&test[Organization]: Update JUnit tests with new features regar…
Apr 8, 2026
fbc4ed1
update[Organization]: Update Hashmap of Organizations to be displayed…
Apr 9, 2026
4dcccb2
docs: added javadoc to controller classes
emilfa Apr 9, 2026
fe43461
update[CausesPage]: Update CausesPage to have search bare fixed at th…
Apr 9, 2026
1960fce
style[DbWrapper]: add javadocs and split lines
Apr 9, 2026
9c6134c
Merge branch 'feat/perf/ParameterValidator' into update/organization/…
Apr 9, 2026
a26914e
Merge pull request #63 from Group-5/feat/perf/ParameterValidator
lucych Apr 9, 2026
bdd4854
style[DbWrapper]: add whitespaces after try
Apr 9, 2026
8a50cc7
Merge branch 'release/v2.0.0' into style/wrapper
Apr 9, 2026
c3b0555
style[ParameterValidator]: make code conform to google checks
Apr 9, 2026
e1cda6f
feat: added javadoc to some pages, and changed signin to signup
Apr 9, 2026
ab64cda
refactor[DbWrapper&ParameterValidator]: move parameter validation in …
Apr 9, 2026
69ec247
docs: renamed LoginController to AuthController and updated javadoc i…
emilfa Apr 9, 2026
85d6951
update[UserPage]: Update Userpage with more visual appealing Javafx d…
Apr 9, 2026
2f72f75
refactor[OrgApiWrapper]: put off parameter validation to ParameterVal…
Apr 9, 2026
281d68d
chore[utils] remove placeholder util classes
Apr 9, 2026
1a5616e
fix[DbWrapper&ParameterValidator]: fix checks so empty data exports s…
Apr 9, 2026
ac86537
style[test/wrapper]: order imports and split too long lines
Apr 9, 2026
9d915ba
Update[UserPage]: Update Visual on UserPage to increase greater UX an…
Apr 9, 2026
cfef39a
fix[]UserPage: fix sizing of donation section
Apr 9, 2026
bd56a1d
feat: added javadoc to more pages
Apr 9, 2026
427f4e5
Step 3: Upgrade Spring Framework Dependency - Compile: SUCCESS
Apr 10, 2026
441155e
update[OrganizationPage]: Update OrganizationPage's description to fe…
Apr 10, 2026
4edd823
fix&update[OrganizationPage]: Fix duplication and update paragraph sp…
Apr 10, 2026
5767aaa
update[DonationPage]: Refactor donation selection, add confirmation d…
Apr 12, 2026
b1a1fb8
feat&Update[donationPage]: Add PaymentMethod and backButton from rele…
Apr 14, 2026
40b3ba9
Merge branch 'release/v2.0.0' into update/organization/description
fredrjm Apr 14, 2026
0556c5b
fix&Update[DonationPage]: fix up merge conflict problems and update d…
Apr 14, 2026
d792af2
update[LoginController]: improve password handling by clearing passwa…
Apr 14, 2026
d6c8d3b
feat[LoginController]: add dialog box for accepting privacy policy wh…
Apr 14, 2026
85f47f7
fix[UserService]: perform a check for existing emails when registerin…
Apr 14, 2026
4b70cec
Merge pull request #66 from Group-5/update/organization/description
matheagj Apr 14, 2026
f60212b
Merge pull request #70 from Group-5/feat/gdpr-compliance
emilfa Apr 14, 2026
26c615c
fix: button styling for donationpage
Apr 14, 2026
1a32ddd
fix: size of causes section
Apr 14, 2026
a921a98
Merge pull request #71 from Group-5/fix/donationpage
fredrjm Apr 16, 2026
f0b22b0
Feat[]: Merge release/v2.0.0 to resolve merge conflict
Apr 16, 2026
3904539
Merge pull request #65 from Group-5/style/wrapper
fredrjm Apr 16, 2026
2d3df56
fix[merge]: resolve conflicts and fix method name mismatches
Apr 16, 2026
b91eecd
Update[ParameterValidator]: Update codebase to use ParameterValidator…
Apr 16, 2026
996e43e
update[]: add more JavaDoc to the rest of th ecodebase
Apr 16, 2026
c67227b
update[control]: Update controller to handle control of the appstate
Apr 16, 2026
92b41fd
refactor: implement proper MVC architecture with controller-service a…
Apr 16, 2026
c350ee2
update&fix[UserPageView]: Remove appstate to increase MVC Structure
Apr 16, 2026
d9cfc51
fix: update tests and code to use new ParameterValidator error messages
Apr 16, 2026
8295379
Update[Organization]: Update rendering of organization Logo to render…
Apr 18, 2026
c4d31dc
feat[NavigationController]: Add a small about us pop up feature that …
Apr 18, 2026
3b3376f
fix[App]: fix spelling of static variable MAX_RETRIES
Apr 20, 2026
df0905e
Update[AboutUsPage]: Update AboutUs page by moving the construction o…
Apr 20, 2026
2bf176c
Update README.md
fredrjm Apr 21, 2026
d3b3174
Merge pull request #73 from Group-5/update/style/javadocAndValidation
lucych Apr 21, 2026
0eeb864
update[AuthController]: updated the text of the privacy policy for be…
Apr 21, 2026
3399f81
Merge pull request #74 from Group-5/update/privacy-policy
matheagj Apr 21, 2026
ad840a7
fix[UserService]: re-implement email checker for sign-up
Apr 21, 2026
a6982e8
Merge pull request #75 from Group-5/fix/email-check
fredrjm Apr 21, 2026
9aff5fa
Update[JUnit]: add more JUnit tests for better test coverage
Apr 21, 2026
0372fd4
Merge branch 'release/v2.0.0' into fix/testcoverage
Apr 21, 2026
4927aca
test[JUnit]: add Mockito dependency and more JUnit tests ensuring gr…
Apr 21, 2026
fe3e366
fix[OrganizationPageView]: fix picture quality on Organization logo
Apr 21, 2026
b317fbd
fix[pom.xml]: remove Mockito dependency due to it being unused in the…
Apr 21, 2026
9f9fb18
Merge pull request #76 from Group-5/fix/testcoverage
lucych Apr 21, 2026
3748fc5
Update README.md
fredrjm Apr 21, 2026
1b22059
Update[Readme]: Add more detailed information about the project
Apr 21, 2026
c4955de
update[DbWrapper]: add exception throwing for SQLException edgecase f…
Apr 21, 2026
f0430cd
test[DbWrapper]: add testing for SQLException
Apr 21, 2026
d6016d5
update[DbWrapper]: add exception throwing for exportUsers in case of …
Apr 21, 2026
35f4d49
test&update[DbWrapper]: add test for exporting user with too long Str…
Apr 21, 2026
8d24050
Merge branch 'release/v2.0.0' into test/wrapper
Apr 21, 2026
9fbe278
feat[AuthController]: add restrictions for user input that's too long
Apr 21, 2026
58d80d9
fix[SignUpPageView]: add text wrapping to prevent longer error messag…
Apr 21, 2026
8d9da1f
update[readme]: update readme with more profound information
Apr 21, 2026
7ddebcc
update[*Readme]: update readme with better show of project structure …
Apr 21, 2026
f22ad07
feat[DonationController]: prevent donations that are too large or wit…
Apr 21, 2026
380d1c6
Merge pull request #79 from Group-5/test/wrapper
fredrjm Apr 22, 2026
64088ce
Update README.md
fredrjm Apr 22, 2026
88f5663
docs[README]: clean up TODOs
Apr 22, 2026
1d94ded
chore&update[README]: update installation guide and remove TODOs
Apr 23, 2026
17470d8
fix[readme]: change interface to abstract when elaborating project st…
Apr 23, 2026
02d4379
fix[readme]: fix markdown styling in readme
Apr 23, 2026
0b3bd8e
Merge pull request #78 from Group-5/update/readme
lucych Apr 23, 2026
c8f7beb
docs: added javadoc to UserPageView
Apr 23, 2026
a09f2d2
docs: fixed parameter name in javadoc in OrganizationController
Apr 23, 2026
d809888
docs: changed parameter name in javadoc
Apr 23, 2026
6547b5b
Merge pull request #80 from Group-5/docs/userpage
fredrjm Apr 23, 2026
2330f3a
chore[user]: Add JavaDoc to UserRepository
Apr 23, 2026
75915e5
chore[wrapper]: add more proper JavaDoc to the Wrapper class description
Apr 23, 2026
46addb5
chore[user]: format JavaDoc to be more compact
Apr 23, 2026
672ec96
Merge pull request #81 from Group-5/docs/userrepo
matheagj Apr 23, 2026
ae6d4bc
chore[README]: add guide to generate and access javadoc html
Apr 23, 2026
271d9a3
Merge branch 'release/v2.0.0' into chore/update/readme-final-touches
emilfa Apr 24, 2026
6fe3a88
Merge pull request #83 from Group-5/chore/update/readme-final-touches
emilfa Apr 24, 2026
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
298 changes: 297 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1 +1,297 @@
# Help-Me-Help
# Help-Me-Help - IDATT1005 Team 5 Portfolio Project Spring 2026 :octocat:

**TEAM 5 STUDENT NAMES**

<br>
<li>Emil Fagerjord</li>
<li>Mathea Gjerde</li>
<li>Fredrik Jonathan Marjoni</li>
<li>Lucy Ciara Herud-Thomassen</li>
</br>

## Project description💻

Help-Me-Help (HmH) is a Java desktop application, developed using Maven, designed to help users donate money to legitimate charitable organizations and emergency relief initiatives.
The application fetches verified organization data from Innsamlingskontrollen (IK), a non-profit foundation that verifies fundraising activities.
Users can create profiles, track their donation history, and browse organizations by status (approved/pending).
The application prioritizes security, data persistence, and an intuitive user experience following Don Norman's interaction design principles.

## Key Features

- User authentication and profile management
- Browse verified and pending organizations with descriptions and logos
- Make donations to organizations
- View donation history
- Data persistence using H2 database
- Web scraping of organization information (descriptions, logos) from external sources

## Project structure 📁

---
The project follows a standard Maven layout and is organized into clearly separated packages according to responsibility-driven design (RDD).
All source files are stored under the `src` directory.

### Main Package Structure (`src/main`)

<pre>
src/main/java/edu/group5/app/
├── App.java (JavaFX Application entry point)
|
├── control/ (Controllers - business logic)
│ ├── AuthController.java (User login/signup handling)
│ ├── DonationController.java (Donation processing)
│ ├── NavigationController.java (Page navigation)
│ └── OrganizationController.java (Organization data access)
|
├── model/ (Business entities & repositories)
│ ├── organization/
│ │ ├── Organization.java (Organization entity)
│ │ ├── OrganizationRepository.java (Data access for organizations)
│ │ ├── OrganizationService.java (Business logic)
│ │ └── OrganizationScraper.java (Web scraping - descriptions & logos)
│ ├── user/
│ │ ├── User.java (User base class)
│ │ ├── Customer.java (Customer implementation)
│ │ ├── UserRepository.java (Data access for users)
│ │ └── UserService.java (User authentication & registration)
│ ├── donation/
│ │ ├── Donation.java (Donation entity)
│ │ ├── DonationRepository.java (Data access for donations)
│ │ └── DonationService.java (Donation processing)
│ ├── wrapper/
│ │ ├── DbWrapper.java (H2 database connection & operations)
│ │ └── OrgApiWrapper.java (Innsamlingskontrollen API client)
│ ├── AppState.java (Global application state)
│ ├── Repository.java (Base repository abstract)
│ └── DBRepository.java (Database repository abstract)
|
├── view/ (JavaFX UI components)
│ ├── loginpage/
│ │ ├── LoginPageView.java
│ │ ├── SignUpPageView.java
│ │ ├── LoginHeader.java
│ │ └── loginpage.css
│ ├── homepage/
│ │ └── HomePageView.java
│ ├── causespage/
│ │ ├── CausesPageView.java
│ │ ├── OrganizationCard.java
│ │ └── causespage.css
│ ├── organizationpage/
│ │ ├── OrganizationPageView.java
│ │ └── organizationpage.css
│ ├── donationpage/
│ │ ├── DonationPageView.java
│ │ ├── PaymentCompletePageView.java
│ │ └── donationpage.css
│ ├── userpage/
│ │ └── UserPageView.java
│ ├── aboutuspage/
│ │ └── AboutUsView.java
│ └── Header.java
|
└── utils/
└── ParameterValidator.java (Input validation utilities)

src/main/resources/ (Static assets - CSS, images, etc.)
├── header/
│ └── images/
│ └── hmh-logo.png (Application logo)
├── loginpage/
│ └── loginpage.css (Login/signup page styling)
├── homepage/
│ └── homepage.css (Home page styling)
├── causespage/
│ └── causespage.css (Organization browsing styling)
├── organizationpage/
│ └── organizationpage.css (Organization details styling)
└── donationpage/
└── donationpage.css (Donation flow styling)
</pre>

### 📦 Package Responsibilities

#### Models: Business logic and data entities

- `Organization`: Represents a charity/relief organization with status, logo, description
- `User` & `Customer`: User profiles with authentication
- `Donation`: Records of user donations
- Services and Repositories implement the business logic and data access layers

#### Controller: Bridge between UI and business logic

- `AuthController`: Handles user login/registration with password hashing (BCrypt)
- `OrganizationController`: Manages organization data retrieval and caching
- `DonationController`: Processes donations and updates user history
- `NavigationController`: Coordinates page navigation

#### View: JavaFX UI components

- Login/signup pages with form validation
- Organization browsing with filtering (approved/pending)
- Donation flow with payment confirmation
- User profile and donation history

#### Utils: Helper functions

- `ParameterValidator`: Validates null, empty, and positive values

### JUnit Tests (`src/test`)

The JUnit tests are stored under `src/test` and mirror the main package structure. These tests cover both positive and negative test of all classes (except `App.java` and UI classes) and their methods ensuring program reliability according to the specification given in the portofolie project descriptions
<pre>
src/test/java/edu/group5/app/
├── AppTest.java (Application startup tests)
├── control/
│ └── (Controller integration tests - to be added)
├── model/
│ ├── donation/
│ │ ├── DonationRepositoryTest.java (Data access layer tests)
│ │ ├── DonationServiceTest.java (Business logic tests)
│ │ └── DonationTest.java (Entity tests)
│ ├── organization/
│ │ ├── OrganizationRepositoryTest.java (Data access layer tests)
│ │ ├── OrganizationScraperTest.java (Web scraping tests - 86% coverage)
│ │ ├── OrganizationServiceTest.java (Business logic tests)
│ │ └── OrganizationTest.java (Entity tests)
│ ├── user/
│ │ ├── CustomerTest.java (Customer entity tests)
│ │ ├── UserRepositoryTest.java (Data access layer tests)
│ │ └── UserServiceTest.java (Authentication & registration tests)
│ └── wrapper/
│ ├── DbWrapperDonationsTest.java (Database wrapper tests - donations)
│ ├── DbWrapperUserTest.java (Database wrapper tests - users)
│ └── OrgApiWrapperTest.java (API client tests)
├── utils/
│ └── ParameterValidatorTest.java (Input validation tests)
└── view/
└── ViewTest.java (UI component tests)
</pre>

### Maven Layout

The project uses the standard Maven directory structure, which ensures:

- clean separation of source and test files
- compatibility with IDEs such as IntelliJ, VS Code, and Eclipse
- maintainability and easy future extensions (e.g., persistence or additional views)

## Link to repository📚

<https://git.ntnu.no/Group-5/Help-Me-Help>

## How to run the project📝

**Requirements:**

- Java JDK 25
- Maven
- JavaFX SDK 25.0.1--

**Run With Maven:** (Windows + Mac + Linux)

1. **Download and Unzip Project:**
Download project zip from the repository.

2. **Navigate to Project Folder:**
Navigate to project folder in the terminal.

```bash
cd path/to/project/ (linux + mac)
cd path\to\project\ (windows)
```

3. **Run the Application:**
Start the program by running the main class:

```bash
mvn javafx:run
```

**Run From JAR: (Windows)**

1. Download Project JAR:
Go to repository and download the JAR from the jar release.

2. Run the JAR in Terminal:

```bash
java --module-path "path\to\javafx\sdk" --add-modules javafx.controls -jar path\to\jar.jar
- Input: User interactions (login, organization selection, donation amount)
- Output: JavaFX UI displaying organizations, user profiles, donation confirmations
1. **Expected behavior:**
<br>
The program allows the user to:
- Login/signup with validation
- Browse approved organizations from Innsamlingskontrollen API
- View organization details (description, logo, status)
- Complete donation workflow
- View donation history in user profile
- Graceful error handling with user-friendly messages
---
## How to run the tests 🧪
This project uses JUnit 5 for unit testing.
All test classes mirror the main package structure and are stored in `src/test`
- ### Open the Project
Open your IDE and select **File > Open Folder**, navigating to the root folder of the project (containing `pom.xml`).
- ### Run all tests
To execute the full test suite, run:
```bash
mvn clean test

This command:

1. Cleans old build files
2. Compiles the main source code
3. Compiles the tests
4. Runs all JUnit tests

---

### Viewing test results

After the tests finish, Maven creates detailed reports here:
`target/surefire-reports/`

Each report includes:

1. Test class summaries
2. Stack traces for any failures
3. Execution times
4. Running tests in an IDE

## Accessing the javadocs
The javadoc can be generated and accessed using the following commands.

1. Generate the Javadoc HTML
```bash
mvn javadoc:javadoc
```
```
```

2. Open the HTML file
open ```target/reports/apidocs/index.html```

## References 🔗

For more references and project details, kindly refer yourself to the project report and Wiki pages

- **GitHub Wiki**: [GitHub Wiki](https://git.ntnu.no/Group-5/Help-Me-Help/wiki)

- **Innsamlingskontrollen API**: [Innsamlingskontrollen](https://app.innsamlingskontrollen.no/api/public/v1/all)

---
7 changes: 6 additions & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>6.1.10</version>
<version>6.2.0</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
Expand All @@ -68,6 +68,11 @@
<version>2.2.224</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.17.2</version>
</dependency>
</dependencies>

<build>
Expand Down
Loading
Loading