# sunil3gs98/secretsanta-generator architecture

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

- Interactive diagram: https://gitdiagram.com/sunil3gs98/secretsanta-generator
- Repository: https://github.com/sunil3gs98/secretsanta-generator

## Overview

Secret Santa Generator is a Spring MVC web app: users visit the welcome page, maintain a list of people, then request randomly generated giver-to-recipient matches. The controller handles page requests and delegates people operations and match generation to the service; the service uses the JPA repository for persisted people. The controller supplies data to Thymeleaf views for display. The README documents MySQL, JPA, and Thymeleaf; the sampled source confirms the controller/service/repository flow, but does not show the database connection configuration or view bindings in detail.

Main entry points: [`src/main/java/com/notthebest/demo/controller/PersonController.java`](https://github.com/sunil3gs98/secretsanta-generator/blob/master/src/main/java/com/notthebest/demo/controller/PersonController.java) (Person controller), [`src/main/java/com/notthebest/demo/service/PersonService.java`](https://github.com/sunil3gs98/secretsanta-generator/blob/master/src/main/java/com/notthebest/demo/service/PersonService.java) (Person service), [`src/main/java/com/notthebest/demo/repository/PersonRepo.java`](https://github.com/sunil3gs98/secretsanta-generator/blob/master/src/main/java/com/notthebest/demo/repository/PersonRepo.java) (Person repository), [`src/main/java/com/notthebest/demo/model/Person.java`](https://github.com/sunil3gs98/secretsanta-generator/blob/master/src/main/java/com/notthebest/demo/model/Person.java) (Person entity)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_web["Web views"]
  node_controller["Person controller"]
  node_welcome["Welcome view<br/>[index.html]"]
  node_peopleview["People view<br/>[addpeople.html]"]
  node_matchesview["Matches view<br/>[generate.html]"]
end

subgraph group_logic["Application logic"]
  node_service["Person service<br/>[PersonService.java]"]
  node_person["Person entity<br/>[Person.java]"]
end

subgraph group_persistence["Persistence"]
  node_repo["Person repository<br/>[PersonRepo.java]"]
  node_mysql[("MySQL database")]
end

node_user(("Visitor"))

node_user -->|"requests pages"| node_controller
node_controller -->|"renders welcome"| node_welcome
node_controller -->|"delegates people ops"| node_service
node_controller -->|"requests matches"| node_service
node_controller -->|"renders people"| node_peopleview
node_controller -->|"renders matches"| node_matchesview
node_service -->|"loads and saves"| node_repo
node_service -->|"uses person records"| node_person
node_repo -->|"persists entity"| node_person
node_repo -->|"JPA persistence"| node_mysql

click node_controller "https://github.com/sunil3gs98/secretsanta-generator/blob/master/src/main/java/com/notthebest/demo/controller/PersonController.java"
click node_welcome "https://github.com/sunil3gs98/secretsanta-generator/blob/master/src/main/resources/templates/index.html"
click node_peopleview "https://github.com/sunil3gs98/secretsanta-generator/blob/master/src/main/resources/templates/addpeople.html"
click node_matchesview "https://github.com/sunil3gs98/secretsanta-generator/blob/master/src/main/resources/templates/generate.html"
click node_service "https://github.com/sunil3gs98/secretsanta-generator/blob/master/src/main/java/com/notthebest/demo/service/PersonService.java"
click node_person "https://github.com/sunil3gs98/secretsanta-generator/blob/master/src/main/java/com/notthebest/demo/model/Person.java"
click node_repo "https://github.com/sunil3gs98/secretsanta-generator/blob/master/src/main/java/com/notthebest/demo/repository/PersonRepo.java"

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_controller,node_welcome,node_peopleview,node_matchesview toneBlue
class node_service,node_person toneAmber
class node_repo,node_mysql toneMint
class node_user toneIndigo
```

## Components

### Web views

- [Person controller](https://github.com/sunil3gs98/secretsanta-generator/blob/master/src/main/java/com/notthebest/demo/controller/PersonController.java): `src/main/java/com/notthebest/demo/controller/PersonController.java`
- [Welcome view](https://github.com/sunil3gs98/secretsanta-generator/blob/master/src/main/resources/templates/index.html): `src/main/resources/templates/index.html`
- [People view](https://github.com/sunil3gs98/secretsanta-generator/blob/master/src/main/resources/templates/addpeople.html): `src/main/resources/templates/addpeople.html`
- [Matches view](https://github.com/sunil3gs98/secretsanta-generator/blob/master/src/main/resources/templates/generate.html): `src/main/resources/templates/generate.html`

### Application logic

- [Person service](https://github.com/sunil3gs98/secretsanta-generator/blob/master/src/main/java/com/notthebest/demo/service/PersonService.java): `src/main/java/com/notthebest/demo/service/PersonService.java`
- [Person entity](https://github.com/sunil3gs98/secretsanta-generator/blob/master/src/main/java/com/notthebest/demo/model/Person.java): `src/main/java/com/notthebest/demo/model/Person.java`

### Persistence

- [Person repository](https://github.com/sunil3gs98/secretsanta-generator/blob/master/src/main/java/com/notthebest/demo/repository/PersonRepo.java): `src/main/java/com/notthebest/demo/repository/PersonRepo.java`
- **MySQL database**

### Other components

- **Visitor**

## Connections

- Visitor → Person controller: requests pages
- Person controller → Welcome view: renders welcome
- Person controller → Person service: delegates people ops
- Person controller → Person service: requests matches
- Person controller → People view: renders people
- Person controller → Matches view: renders matches
- Person service → Person repository: loads and saves
- Person service → Person entity: uses person records
- Person repository → Person entity: persists entity
- Person repository → MySQL database: JPA persistence
