# johnlferrater/new-donation-system architecture

> Architecture diagram of the GitHub repository johnlferrater/new-donation-system, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-10). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/johnlferrater/new-donation-system
- Repository: https://github.com/johnlferrater/new-donation-system

## Overview

Donation System is a Spring Boot application for public donation information and administrator-managed fundraising, with registered users able to create donations and view donation history. The main workflow runs from a browser through page/API controllers into persistence; donation record and history writes are coordinated by a sync service, which also triggers notifications. Separate branches cover accounts and authentication, announcements, goals, and notification delivery. The README documents reports and audit logs, but no corresponding implementation modules appear in the supplied tree. Unsampled controller and security connections are shown only where the README or source index supports them.

Main entry points: [`src/main/java/project2/repository`](https://github.com/johnlferrater/new-donation-system/tree/main/src/main/java/project2/repository) (JPA repositories), [`src/main/java/project2/controller/AnnouncementController.java`](https://github.com/johnlferrater/new-donation-system/blob/main/src/main/java/project2/controller/AnnouncementController.java) (Announcements), [`src/main/java/project2/service/DonationSyncService.java`](https://github.com/johnlferrater/new-donation-system/blob/main/src/main/java/project2/service/DonationSyncService.java) (Donation synchronization), [`src/main/java/project2/service/NotificationService.java`](https://github.com/johnlferrater/new-donation-system/blob/main/src/main/java/project2/service/NotificationService.java) (Notification service)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_web["Web workflows"]
  node_site["Public pages"]
  node_adminui["Admin pages"]
end

subgraph group_donations["Donations and goals"]
  node_goals["Donation goals"]
  node_records["Donation records"]
  node_history["Donation history"]
  node_sync["Donation synchronization"]
end

subgraph group_accounts["Accounts and security"]
  node_registration["Registration"]
  node_users["User management"]
  node_tabauth["Tab authentication"]
  node_security["Security configuration"]
end

subgraph group_community["Announcements and notifications"]
  node_announcements["Announcements"]
  node_notifications["Notification service"]
  node_notificationapi["Notification API"]
end

subgraph group_persistence["Persistence"]
  node_donationdata["Donation entities"]
  node_accountdata["Account entities"]
  node_communitydata["Community entities"]
  node_repositories["JPA repositories"]
end

node_visitor(("Public visitor"))
node_member(("Registered user"))
node_administrator(("Administrator"))
node_mysql[("MySQL database")]

node_visitor -->|"views pages"| node_site
node_visitor -->|"views goals"| node_goals
node_visitor -->|"views announcements"| node_announcements
node_member -->|"registers"| node_registration
node_member -->|"creates donations"| node_records
node_member -->|"views history"| node_history
node_administrator -->|"manages system"| node_adminui
node_administrator -->|"manages goals"| node_goals
node_administrator -->|"manages records"| node_records
node_administrator -->|"manages announcements"| node_announcements
node_site -.->|"serves public content"| node_announcements
node_registration -->|"checks and saves users"| node_repositories
node_users -->|"reads and updates"| node_repositories
node_tabauth -->|"provides tab tokens"| node_security
node_security -->|"loads user accounts"| node_repositories
node_goals -->|"reads and writes"| node_repositories
node_records -->|"saves with history"| node_sync
node_history -->|"saves with record"| node_sync
node_sync -->|"saves paired entries"| node_repositories
node_sync -->|"creates donation alert"| node_notifications
node_announcements -->|"reads and writes"| node_repositories
node_announcements -->|"alerts on publish"| node_notifications
node_notificationapi -.->|"serves notifications"| node_notifications
node_notifications -->|"reads and stores alerts"| node_repositories
node_repositories -->|"persists entities"| node_mysql

click node_site "https://github.com/johnlferrater/new-donation-system/blob/main/src/main/java/project2/controller/PageController.java"
click node_adminui "https://github.com/johnlferrater/new-donation-system/blob/main/src/main/java/project2/controller/AdminController.java"
click node_registration "https://github.com/johnlferrater/new-donation-system/blob/main/src/main/java/project2/controller/RegisterController.java"
click node_users "https://github.com/johnlferrater/new-donation-system/blob/main/src/main/java/project2/controller/UserController.java"
click node_tabauth "https://github.com/johnlferrater/new-donation-system/blob/main/src/main/java/project2/controller/TabAuthController.java"
click node_security "https://github.com/johnlferrater/new-donation-system/blob/main/src/main/java/project2/security/SecurityConfig.java"
click node_goals "https://github.com/johnlferrater/new-donation-system/blob/main/src/main/java/project2/controller/DonationGoalController.java"
click node_records "https://github.com/johnlferrater/new-donation-system/blob/main/src/main/java/project2/controller/DonationRecordController.java"
click node_history "https://github.com/johnlferrater/new-donation-system/blob/main/src/main/java/project2/controller/DonationHistoryController.java"
click node_sync "https://github.com/johnlferrater/new-donation-system/blob/main/src/main/java/project2/service/DonationSyncService.java"
click node_announcements "https://github.com/johnlferrater/new-donation-system/blob/main/src/main/java/project2/controller/AnnouncementController.java"
click node_notifications "https://github.com/johnlferrater/new-donation-system/blob/main/src/main/java/project2/service/NotificationService.java"
click node_notificationapi "https://github.com/johnlferrater/new-donation-system/blob/main/src/main/java/project2/controller/NotificationController.java"
click node_donationdata "https://github.com/johnlferrater/new-donation-system/tree/main/src/main/java/project2/entity"
click node_accountdata "https://github.com/johnlferrater/new-donation-system/tree/main/src/main/java/project2/entity"
click node_communitydata "https://github.com/johnlferrater/new-donation-system/tree/main/src/main/java/project2/entity"
click node_repositories "https://github.com/johnlferrater/new-donation-system/tree/main/src/main/java/project2/repository"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_site,node_adminui,node_member toneBlue
class node_goals,node_records,node_history,node_sync,node_mysql toneAmber
class node_registration,node_users,node_tabauth,node_security toneMint
class node_announcements,node_notifications,node_notificationapi toneRose
class node_donationdata,node_accountdata,node_communitydata,node_repositories,node_visitor,node_administrator toneIndigo
```

## Components

### Web workflows

- [Public pages](https://github.com/johnlferrater/new-donation-system/blob/main/src/main/java/project2/controller/PageController.java): `src/main/java/project2/controller/PageController.java`
- [Admin pages](https://github.com/johnlferrater/new-donation-system/blob/main/src/main/java/project2/controller/AdminController.java): `src/main/java/project2/controller/AdminController.java`

### Donations and goals

- [Donation goals](https://github.com/johnlferrater/new-donation-system/blob/main/src/main/java/project2/controller/DonationGoalController.java): `src/main/java/project2/controller/DonationGoalController.java`
- [Donation records](https://github.com/johnlferrater/new-donation-system/blob/main/src/main/java/project2/controller/DonationRecordController.java): `src/main/java/project2/controller/DonationRecordController.java`
- [Donation history](https://github.com/johnlferrater/new-donation-system/blob/main/src/main/java/project2/controller/DonationHistoryController.java): `src/main/java/project2/controller/DonationHistoryController.java`
- [Donation synchronization](https://github.com/johnlferrater/new-donation-system/blob/main/src/main/java/project2/service/DonationSyncService.java): `src/main/java/project2/service/DonationSyncService.java`

### Accounts and security

- [Registration](https://github.com/johnlferrater/new-donation-system/blob/main/src/main/java/project2/controller/RegisterController.java): `src/main/java/project2/controller/RegisterController.java`
- [User management](https://github.com/johnlferrater/new-donation-system/blob/main/src/main/java/project2/controller/UserController.java): `src/main/java/project2/controller/UserController.java`
- [Tab authentication](https://github.com/johnlferrater/new-donation-system/blob/main/src/main/java/project2/controller/TabAuthController.java): `src/main/java/project2/controller/TabAuthController.java`
- [Security configuration](https://github.com/johnlferrater/new-donation-system/blob/main/src/main/java/project2/security/SecurityConfig.java): `src/main/java/project2/security/SecurityConfig.java`

### Announcements and notifications

- [Announcements](https://github.com/johnlferrater/new-donation-system/blob/main/src/main/java/project2/controller/AnnouncementController.java): `src/main/java/project2/controller/AnnouncementController.java`
- [Notification service](https://github.com/johnlferrater/new-donation-system/blob/main/src/main/java/project2/service/NotificationService.java): `src/main/java/project2/service/NotificationService.java`
- [Notification API](https://github.com/johnlferrater/new-donation-system/blob/main/src/main/java/project2/controller/NotificationController.java): `src/main/java/project2/controller/NotificationController.java`

### Persistence

- [Donation entities](https://github.com/johnlferrater/new-donation-system/tree/main/src/main/java/project2/entity): `src/main/java/project2/entity`
- [Account entities](https://github.com/johnlferrater/new-donation-system/tree/main/src/main/java/project2/entity): `src/main/java/project2/entity`
- [Community entities](https://github.com/johnlferrater/new-donation-system/tree/main/src/main/java/project2/entity): `src/main/java/project2/entity`
- [JPA repositories](https://github.com/johnlferrater/new-donation-system/tree/main/src/main/java/project2/repository): `src/main/java/project2/repository`

### Other components

- **Public visitor**
- **Registered user**
- **Administrator**
- **MySQL database**

## Connections

- Public visitor → Public pages: views pages (evidence: `README.md`)
- Public visitor → Donation goals: views goals (evidence: `README.md`)
- Public visitor → Announcements: views announcements (evidence: `README.md`)
- Registered user → Registration: registers (evidence: `src/main/java/project2/controller/RegisterController.java`)
- Registered user → Donation records: creates donations (evidence: `README.md`)
- Registered user → Donation history: views history (evidence: `README.md`)
- Administrator → Admin pages: manages system (evidence: `README.md`)
- Administrator → Donation goals: manages goals (evidence: `README.md`)
- Administrator → Donation records: manages records (evidence: `README.md`)
- Administrator → Announcements: manages announcements (evidence: `README.md`)
- Public pages → Announcements: serves public content
- Registration → JPA repositories: checks and saves users (evidence: `src/main/java/project2/controller/RegisterController.java`)
- User management → JPA repositories: reads and updates (evidence: `src/main/java/project2/controller/UserController.java`)
- Tab authentication → Security configuration: provides tab tokens (evidence: `src/main/java/project2/controller/TabAuthController.java`)
- Security configuration → JPA repositories: loads user accounts
- Donation goals → JPA repositories: reads and writes (evidence: `src/main/java/project2/controller/DonationGoalController.java`)
- Donation records → Donation synchronization: saves with history (evidence: `src/main/java/project2/controller/DonationRecordController.java`)
- Donation history → Donation synchronization: saves with record (evidence: `src/main/java/project2/controller/DonationHistoryController.java`)
- Donation synchronization → JPA repositories: saves paired entries (evidence: `src/main/java/project2/service/DonationSyncService.java`)
- Donation synchronization → Notification service: creates donation alert (evidence: `src/main/java/project2/service/DonationSyncService.java`)
- Announcements → JPA repositories: reads and writes (evidence: `src/main/java/project2/controller/AnnouncementController.java`)
- Announcements → Notification service: alerts on publish (evidence: `src/main/java/project2/controller/AnnouncementController.java`)
- Notification API → Notification service: serves notifications
- Notification service → JPA repositories: reads and stores alerts (evidence: `src/main/java/project2/service/NotificationService.java`)
- JPA repositories → MySQL database: persists entities (evidence: `README.md`)
