# onizuka-sh/dating-platform architecture

> Architecture diagram of the GitHub repository onizuka-sh/dating-platform, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-29). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/onizuka-sh/dating-platform
- Repository: https://github.com/onizuka-sh/dating-platform

## Overview

This is a Java Servlet/JSP dating platform. Users register and verify accounts, build profiles and preferences, browse compatibility-filtered candidates, like or pass, and communicate with matches. The graph follows the sampled servlet/service/DAO ownership; registration, verification, messaging, and some matching wiring are represented from the README and repository tree where their source was not sampled, so those links are limited to documented or clear entry-point relationships.

Main entry points: [`src/main/javaproj/com/dating/service/MatchingService.java`](https://github.com/onizuka-sh/dating-platform/blob/main/src/main/javaproj/com/dating/service/MatchingService.java) (Compatibility matching), [`src/main/javaproj/com/dating/controller/MatchingServlet.java`](https://github.com/onizuka-sh/dating-platform/blob/main/src/main/javaproj/com/dating/controller/MatchingServlet.java) (Candidate browsing), [`src/main/javaproj/com/dating/controller/HomeController.java`](https://github.com/onizuka-sh/dating-platform/blob/main/src/main/javaproj/com/dating/controller/HomeController.java) (Login and dashboard), [`src/main/javaproj/com/dating/dao/UserDAO.java`](https://github.com/onizuka-sh/dating-platform/blob/main/src/main/javaproj/com/dating/dao/UserDAO.java) (User records)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_web["Web interface"]
  node_home["Login and dashboard"]
  node_loginview["Login and dashboard pages<br/>[login.jsp]"]
  node_matchingui["Candidate browsing"]
  node_matchesview["Matches pages<br/>[matches.jsp]"]
  node_messagesview["Conversation pages<br/>[conversation.jsp]"]
end

subgraph group_identity["Accounts and profiles"]
  node_registration["Registration"]
  node_verification["Email verification"]
  node_email["Email service<br/>[EmailService.java]"]
  node_profile["Profile management"]
end

subgraph group_matching["Discovery and matching"]
  node_matchingservice["Compatibility matching"]
end

subgraph group_communication["Messaging"]
  node_messaging["Message handling"]
end

subgraph group_persistence["Persistence and security"]
  node_profiledata["Profile and interests<br/>[ProfileDAO.java]"]
  node_preferences["Preferences"]
  node_matchdata["Match records<br/>[MatchDAO.java]"]
  node_messagedata["Message records<br/>[MessageDAO.java]"]
  node_authfilter["Authentication filter"]
  node_securityfilter["Security headers"]
  node_userdata["User records<br/>[UserDAO.java]"]
  node_database[("MySQL database<br/>[Schema.sql]")]
end

node_member(("Member"))
node_smtp["SMTP service"]

node_member -->|"submits details"| node_registration
node_registration -->|"creates account"| node_userdata
node_registration -.->|"requests verification"| node_email
node_email -->|"sends email"| node_smtp
node_member -->|"follows link"| node_verification
node_verification -->|"updates verification"| node_userdata
node_member -->|"logs in"| node_home
node_home -->|"looks up user"| node_userdata
node_home -->|"forwards page"| node_loginview
node_member -->|"edits profile"| node_profile
node_profile -->|"reads and writes"| node_profiledata
node_profile -->|"saves preferences"| node_preferences
node_member -->|"browses candidates"| node_matchingui
node_matchingui -->|"requests candidates"| node_matchingservice
node_matchingservice -->|"reads preferences"| node_preferences
node_matchingservice -->|"loads users"| node_userdata
node_matchingservice -->|"checks interactions"| node_matchdata
node_matchingui -->|"forwards results"| node_matchesview
node_member -->|"likes or passes"| node_matchingui
node_matchingui -->|"records choice"| node_matchingservice
node_matchingservice -->|"creates match"| node_matchdata
node_member -->|"opens conversation"| node_messaging
node_messaging -->|"reads and writes"| node_messagedata
node_messaging -->|"forwards conversation"| node_messagesview
node_authfilter -->|"guards routes"| node_home
node_securityfilter -->|"adds headers"| node_home
node_userdata -->|"reads and writes"| node_database
node_profiledata -->|"reads and writes"| node_database
node_preferences -->|"reads and writes"| node_database
node_matchdata -->|"reads and writes"| node_database
node_messagedata -->|"reads and writes"| node_database

click node_registration "https://github.com/onizuka-sh/dating-platform/blob/main/src/main/javaproj/com/dating/controller/RegistrationServlet.java"
click node_verification "https://github.com/onizuka-sh/dating-platform/blob/main/src/main/javaproj/com/dating/controller/VerificationServlet.java"
click node_email "https://github.com/onizuka-sh/dating-platform/blob/main/src/main/javaproj/com/dating/service/EmailService.java"
click node_profile "https://github.com/onizuka-sh/dating-platform/blob/main/src/main/javaproj/com/dating/controller/ProfileServlet.java"
click node_profiledata "https://github.com/onizuka-sh/dating-platform/blob/main/src/main/javaproj/com/dating/dao/ProfileDAO.java"
click node_preferences "https://github.com/onizuka-sh/dating-platform/blob/main/src/main/javaproj/com/dating/dao/PreferencesDAO.java"
click node_home "https://github.com/onizuka-sh/dating-platform/blob/main/src/main/javaproj/com/dating/controller/HomeController.java"
click node_loginview "https://github.com/onizuka-sh/dating-platform/blob/main/src/main/webapp/login.jsp"
click node_matchingui "https://github.com/onizuka-sh/dating-platform/blob/main/src/main/javaproj/com/dating/controller/MatchingServlet.java"
click node_matchingservice "https://github.com/onizuka-sh/dating-platform/blob/main/src/main/javaproj/com/dating/service/MatchingService.java"
click node_matchdata "https://github.com/onizuka-sh/dating-platform/blob/main/src/main/javaproj/com/dating/dao/MatchDAO.java"
click node_matchesview "https://github.com/onizuka-sh/dating-platform/blob/main/src/main/webapp/matches.jsp"
click node_messaging "https://github.com/onizuka-sh/dating-platform/blob/main/src/main/javaproj/com/dating/controller/MessagingServlet.java"
click node_messagedata "https://github.com/onizuka-sh/dating-platform/blob/main/src/main/javaproj/com/dating/dao/MessageDAO.java"
click node_messagesview "https://github.com/onizuka-sh/dating-platform/blob/main/src/main/webapp/conversation.jsp"
click node_authfilter "https://github.com/onizuka-sh/dating-platform/blob/main/src/main/javaproj/com/dating/filter/AuthenticationFilter.java"
click node_securityfilter "https://github.com/onizuka-sh/dating-platform/blob/main/src/main/javaproj/com/dating/filter/SecurityHeaderFilter.java"
click node_userdata "https://github.com/onizuka-sh/dating-platform/blob/main/src/main/javaproj/com/dating/dao/UserDAO.java"
click node_database "https://github.com/onizuka-sh/dating-platform/blob/main/Schema.sql"

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_home,node_loginview,node_matchingui,node_matchesview,node_messagesview toneBlue
class node_registration,node_verification,node_email,node_profile toneAmber
class node_matchingservice toneMint
class node_messaging toneRose
class node_profiledata,node_preferences,node_matchdata,node_messagedata,node_authfilter,node_securityfilter,node_userdata,node_database,node_member,node_smtp toneIndigo
```

## Components

### Web interface

- [Login and dashboard](https://github.com/onizuka-sh/dating-platform/blob/main/src/main/javaproj/com/dating/controller/HomeController.java): `src/main/javaproj/com/dating/controller/HomeController.java`
- [Login and dashboard pages](https://github.com/onizuka-sh/dating-platform/blob/main/src/main/webapp/login.jsp): `src/main/webapp/login.jsp`
- [Candidate browsing](https://github.com/onizuka-sh/dating-platform/blob/main/src/main/javaproj/com/dating/controller/MatchingServlet.java): `src/main/javaproj/com/dating/controller/MatchingServlet.java`
- [Matches pages](https://github.com/onizuka-sh/dating-platform/blob/main/src/main/webapp/matches.jsp): `src/main/webapp/matches.jsp`
- [Conversation pages](https://github.com/onizuka-sh/dating-platform/blob/main/src/main/webapp/conversation.jsp): `src/main/webapp/conversation.jsp`

### Accounts and profiles

- [Registration](https://github.com/onizuka-sh/dating-platform/blob/main/src/main/javaproj/com/dating/controller/RegistrationServlet.java): `src/main/javaproj/com/dating/controller/RegistrationServlet.java`
- [Email verification](https://github.com/onizuka-sh/dating-platform/blob/main/src/main/javaproj/com/dating/controller/VerificationServlet.java): `src/main/javaproj/com/dating/controller/VerificationServlet.java`
- [Email service](https://github.com/onizuka-sh/dating-platform/blob/main/src/main/javaproj/com/dating/service/EmailService.java): `src/main/javaproj/com/dating/service/EmailService.java`
- [Profile management](https://github.com/onizuka-sh/dating-platform/blob/main/src/main/javaproj/com/dating/controller/ProfileServlet.java): `src/main/javaproj/com/dating/controller/ProfileServlet.java`

### Discovery and matching

- [Compatibility matching](https://github.com/onizuka-sh/dating-platform/blob/main/src/main/javaproj/com/dating/service/MatchingService.java): `src/main/javaproj/com/dating/service/MatchingService.java`

### Messaging

- [Message handling](https://github.com/onizuka-sh/dating-platform/blob/main/src/main/javaproj/com/dating/controller/MessagingServlet.java): `src/main/javaproj/com/dating/controller/MessagingServlet.java`

### Persistence and security

- [Profile and interests](https://github.com/onizuka-sh/dating-platform/blob/main/src/main/javaproj/com/dating/dao/ProfileDAO.java): `src/main/javaproj/com/dating/dao/ProfileDAO.java`
- [Preferences](https://github.com/onizuka-sh/dating-platform/blob/main/src/main/javaproj/com/dating/dao/PreferencesDAO.java): `src/main/javaproj/com/dating/dao/PreferencesDAO.java`
- [Match records](https://github.com/onizuka-sh/dating-platform/blob/main/src/main/javaproj/com/dating/dao/MatchDAO.java): `src/main/javaproj/com/dating/dao/MatchDAO.java`
- [Message records](https://github.com/onizuka-sh/dating-platform/blob/main/src/main/javaproj/com/dating/dao/MessageDAO.java): `src/main/javaproj/com/dating/dao/MessageDAO.java`
- [Authentication filter](https://github.com/onizuka-sh/dating-platform/blob/main/src/main/javaproj/com/dating/filter/AuthenticationFilter.java): `src/main/javaproj/com/dating/filter/AuthenticationFilter.java`
- [Security headers](https://github.com/onizuka-sh/dating-platform/blob/main/src/main/javaproj/com/dating/filter/SecurityHeaderFilter.java): `src/main/javaproj/com/dating/filter/SecurityHeaderFilter.java`
- [User records](https://github.com/onizuka-sh/dating-platform/blob/main/src/main/javaproj/com/dating/dao/UserDAO.java): `src/main/javaproj/com/dating/dao/UserDAO.java`
- [MySQL database](https://github.com/onizuka-sh/dating-platform/blob/main/Schema.sql): `Schema.sql`

### Other components

- **Member**
- **SMTP service**

## Connections

- Member → Registration: submits details
- Registration → User records: creates account
- Registration → Email service: requests verification
- Email service → SMTP service: sends email
- Member → Email verification: follows link
- Email verification → User records: updates verification
- Member → Login and dashboard: logs in
- Login and dashboard → User records: looks up user
- Login and dashboard → Login and dashboard pages: forwards page
- Member → Profile management: edits profile
- Profile management → Profile and interests: reads and writes
- Profile management → Preferences: saves preferences
- Member → Candidate browsing: browses candidates
- Candidate browsing → Compatibility matching: requests candidates
- Compatibility matching → Preferences: reads preferences
- Compatibility matching → User records: loads users
- Compatibility matching → Match records: checks interactions
- Candidate browsing → Matches pages: forwards results
- Member → Candidate browsing: likes or passes
- Candidate browsing → Compatibility matching: records choice
- Compatibility matching → Match records: creates match
- Member → Message handling: opens conversation
- Message handling → Message records: reads and writes
- Message handling → Conversation pages: forwards conversation
- Authentication filter → Login and dashboard: guards routes
- Security headers → Login and dashboard: adds headers
- User records → MySQL database: reads and writes
- Profile and interests → MySQL database: reads and writes
- Preferences → MySQL database: reads and writes
- Match records → MySQL database: reads and writes
- Message records → MySQL database: reads and writes
