# syqenov/cpe314--69323--capstone-team-03 architecture

> Architecture diagram of the GitHub repository syqenov/cpe314--69323--capstone-team-03, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-14). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/syqenov/cpe314--69323--capstone-team-03
- Repository: https://github.com/syqenov/cpe314--69323--capstone-team-03

## Overview

PawTrack is a Swing desktop shelter and adoption tracker. Staff or adopters enter through the GUI, authenticate, and use animal, adoption, waitlist, classification, import, and analytics workflows backed by local SQLite; the GUI can also request pet images from external providers. The graph follows relationships shown in sampled source or the SOURCE INDEX. Several controllers and services were not excerpted, so their connections are omitted rather than inferred.

Main entry points: [`src/main/java/pawtrack/ui/MainFrame.java`](https://github.com/syqenov/cpe314--69323--capstone-team-03/blob/main/src/main/java/pawtrack/ui/MainFrame.java) (Shelter GUI), [`src/main/java/pawtrack/service/CsvImportService.java`](https://github.com/syqenov/cpe314--69323--capstone-team-03/blob/main/src/main/java/pawtrack/service/CsvImportService.java) (CSV import), [`src/main/java/pawtrack/controller/AdoptionController.java`](https://github.com/syqenov/cpe314--69323--capstone-team-03/blob/main/src/main/java/pawtrack/controller/AdoptionController.java) (Adoption workflow), [`src/main/java/pawtrack/controller/WaitlistController.java`](https://github.com/syqenov/cpe314--69323--capstone-team-03/blob/main/src/main/java/pawtrack/controller/WaitlistController.java) (Waitlist workflow)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_app["Desktop application"]
  node_main["Application startup<br/>[Main.java]"]
  node_gui["Shelter GUI<br/>[MainFrame.java]"]
  node_loginui["Login and account UI<br/>[LoginPanel.java]"]
  node_imageworker["Image worker<br/>[ImageWorker.java]"]
  node_importworker["Import worker<br/>[ImportWorker.java]"]
end

subgraph group_workflows["Shelter workflows"]
  node_auth["Authentication"]
  node_animals["Animal management"]
  node_adoptions["Adoption workflow"]
  node_waitlist["Waitlist workflow"]
  node_classification["Breed classification"]
  node_classificationui["Classification workflow"]
  node_importctrl["Import workflow"]
  node_csv["CSV import"]
  node_analytics["Analytics reporting"]
  node_history["Status undo history"]
end

subgraph group_persistence["Domain and storage"]
  node_animalmodel["Animal domain<br/>[Animal.java]"]
  node_adoptermodel["Adopter domain<br/>[Adopter.java]"]
  node_recordmodel["Adoption records"]
  node_classificationmodel["Classification tree"]
  node_animaldao["Animal storage<br/>[AnimalDao.java]"]
  node_adopterdao["Adopter storage<br/>[AdopterDao.java]"]
  node_recorddao["Adoption storage"]
  node_classificationdao["Classification storage"]
  node_database[("SQLite database<br/>[Database.java]")]
end

subgraph group_integrations["External services"]
  node_imageservice["Pet image providers"]
  node_imageapi{{"Public image APIs"}}
end

node_staff(("Staff or adopter"))

node_staff -->|"launches"| node_main
node_main -->|"opens"| node_gui
node_main -->|"shows"| node_loginui
node_gui -->|"uses"| node_auth
node_gui -->|"uses"| node_animals
node_gui -->|"uses"| node_adoptions
node_gui -->|"uses"| node_waitlist
node_gui -->|"uses"| node_classificationui
node_gui -->|"uses"| node_importctrl
node_gui -.->|"uses"| node_analytics
node_auth -->|"reads users"| node_database
node_animals -->|"reads and updates"| node_animaldao
node_adoptions -->|"finds adopters"| node_adopterdao
node_adoptions -->|"updates animals"| node_animaldao
node_adoptions -->|"records adoptions"| node_recorddao
node_adoptions -->|"records status"| node_history
node_waitlist -->|"persists adopters"| node_adopterdao
node_waitlist -->|"updates status"| node_animaldao
node_waitlist -->|"records status"| node_history
node_waitlist -->|"queues interest"| node_adoptermodel
node_classificationui -->|"delegates to"| node_classification
node_classification -->|"loads tree"| node_classificationdao
node_importctrl -->|"runs import"| node_csv
node_csv -->|"stores animals"| node_animaldao
node_csv -->|"stores adopters"| node_adopterdao
node_csv -->|"stores adoptions"| node_recorddao
node_csv -->|"uses taxonomy"| node_classification
node_importworker -->|"runs asynchronously"| node_csv
node_analytics -->|"analyzes"| node_animalmodel
node_analytics -->|"analyzes"| node_recordmodel
node_classification -->|"builds tree"| node_classificationmodel
node_animaldao -->|"queries"| node_database
node_imageservice -.->|"fetches images"| node_imageapi
node_gui -->|"selects providers"| node_imageservice
node_imageworker -.->|"fetches images"| node_imageservice

click node_main "https://github.com/syqenov/cpe314--69323--capstone-team-03/blob/main/src/main/java/pawtrack/Main.java"
click node_gui "https://github.com/syqenov/cpe314--69323--capstone-team-03/blob/main/src/main/java/pawtrack/ui/MainFrame.java"
click node_loginui "https://github.com/syqenov/cpe314--69323--capstone-team-03/blob/main/src/main/java/pawtrack/ui/LoginPanel.java"
click node_imageworker "https://github.com/syqenov/cpe314--69323--capstone-team-03/blob/main/src/main/java/pawtrack/ui/ImageWorker.java"
click node_importworker "https://github.com/syqenov/cpe314--69323--capstone-team-03/blob/main/src/main/java/pawtrack/ui/ImportWorker.java"
click node_auth "https://github.com/syqenov/cpe314--69323--capstone-team-03/blob/main/src/main/java/pawtrack/controller/AuthController.java"
click node_animals "https://github.com/syqenov/cpe314--69323--capstone-team-03/blob/main/src/main/java/pawtrack/controller/AnimalController.java"
click node_adoptions "https://github.com/syqenov/cpe314--69323--capstone-team-03/blob/main/src/main/java/pawtrack/controller/AdoptionController.java"
click node_waitlist "https://github.com/syqenov/cpe314--69323--capstone-team-03/blob/main/src/main/java/pawtrack/controller/WaitlistController.java"
click node_classification "https://github.com/syqenov/cpe314--69323--capstone-team-03/blob/main/src/main/java/pawtrack/service/ClassificationService.java"
click node_classificationui "https://github.com/syqenov/cpe314--69323--capstone-team-03/blob/main/src/main/java/pawtrack/controller/ClassificationController.java"
click node_importctrl "https://github.com/syqenov/cpe314--69323--capstone-team-03/blob/main/src/main/java/pawtrack/controller/ImportController.java"
click node_csv "https://github.com/syqenov/cpe314--69323--capstone-team-03/blob/main/src/main/java/pawtrack/service/CsvImportService.java"
click node_analytics "https://github.com/syqenov/cpe314--69323--capstone-team-03/blob/main/src/main/java/pawtrack/service/AnalyticsService.java"
click node_history "https://github.com/syqenov/cpe314--69323--capstone-team-03/blob/main/src/main/java/pawtrack/service/StatusHistoryService.java"
click node_animalmodel "https://github.com/syqenov/cpe314--69323--capstone-team-03/blob/main/src/main/java/pawtrack/model/Animal.java"
click node_adoptermodel "https://github.com/syqenov/cpe314--69323--capstone-team-03/blob/main/src/main/java/pawtrack/model/Adopter.java"
click node_recordmodel "https://github.com/syqenov/cpe314--69323--capstone-team-03/blob/main/src/main/java/pawtrack/model/AdoptionRecord.java"
click node_classificationmodel "https://github.com/syqenov/cpe314--69323--capstone-team-03/blob/main/src/main/java/pawtrack/model/ClassificationNode.java"
click node_animaldao "https://github.com/syqenov/cpe314--69323--capstone-team-03/blob/main/src/main/java/pawtrack/dao/AnimalDao.java"
click node_adopterdao "https://github.com/syqenov/cpe314--69323--capstone-team-03/blob/main/src/main/java/pawtrack/dao/AdopterDao.java"
click node_recorddao "https://github.com/syqenov/cpe314--69323--capstone-team-03/blob/main/src/main/java/pawtrack/dao/AdoptionRecordDao.java"
click node_classificationdao "https://github.com/syqenov/cpe314--69323--capstone-team-03/blob/main/src/main/java/pawtrack/dao/ClassificationDao.java"
click node_database "https://github.com/syqenov/cpe314--69323--capstone-team-03/blob/main/src/main/java/pawtrack/dao/Database.java"
click node_imageservice "https://github.com/syqenov/cpe314--69323--capstone-team-03/blob/main/src/main/java/pawtrack/api/PetImageServiceFactory.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_main,node_gui,node_loginui,node_imageworker,node_importworker toneBlue
class node_auth,node_animals,node_adoptions,node_waitlist,node_classification,node_classificationui,node_importctrl,node_csv,node_analytics,node_history toneAmber
class node_animalmodel,node_adoptermodel,node_recordmodel,node_classificationmodel,node_animaldao,node_adopterdao,node_recorddao,node_classificationdao,node_database toneMint
class node_imageservice,node_imageapi toneRose
class node_staff toneIndigo
```

## Components

### Desktop application

- [Application startup](https://github.com/syqenov/cpe314--69323--capstone-team-03/blob/main/src/main/java/pawtrack/Main.java): `src/main/java/pawtrack/Main.java`
- [Shelter GUI](https://github.com/syqenov/cpe314--69323--capstone-team-03/blob/main/src/main/java/pawtrack/ui/MainFrame.java): `src/main/java/pawtrack/ui/MainFrame.java`
- [Login and account UI](https://github.com/syqenov/cpe314--69323--capstone-team-03/blob/main/src/main/java/pawtrack/ui/LoginPanel.java): `src/main/java/pawtrack/ui/LoginPanel.java`
- [Image worker](https://github.com/syqenov/cpe314--69323--capstone-team-03/blob/main/src/main/java/pawtrack/ui/ImageWorker.java): `src/main/java/pawtrack/ui/ImageWorker.java`
- [Import worker](https://github.com/syqenov/cpe314--69323--capstone-team-03/blob/main/src/main/java/pawtrack/ui/ImportWorker.java): `src/main/java/pawtrack/ui/ImportWorker.java`

### Shelter workflows

- [Authentication](https://github.com/syqenov/cpe314--69323--capstone-team-03/blob/main/src/main/java/pawtrack/controller/AuthController.java): `src/main/java/pawtrack/controller/AuthController.java`
- [Animal management](https://github.com/syqenov/cpe314--69323--capstone-team-03/blob/main/src/main/java/pawtrack/controller/AnimalController.java): `src/main/java/pawtrack/controller/AnimalController.java`
- [Adoption workflow](https://github.com/syqenov/cpe314--69323--capstone-team-03/blob/main/src/main/java/pawtrack/controller/AdoptionController.java): `src/main/java/pawtrack/controller/AdoptionController.java`
- [Waitlist workflow](https://github.com/syqenov/cpe314--69323--capstone-team-03/blob/main/src/main/java/pawtrack/controller/WaitlistController.java): `src/main/java/pawtrack/controller/WaitlistController.java`
- [Breed classification](https://github.com/syqenov/cpe314--69323--capstone-team-03/blob/main/src/main/java/pawtrack/service/ClassificationService.java): `src/main/java/pawtrack/service/ClassificationService.java`
- [Classification workflow](https://github.com/syqenov/cpe314--69323--capstone-team-03/blob/main/src/main/java/pawtrack/controller/ClassificationController.java): `src/main/java/pawtrack/controller/ClassificationController.java`
- [Import workflow](https://github.com/syqenov/cpe314--69323--capstone-team-03/blob/main/src/main/java/pawtrack/controller/ImportController.java): `src/main/java/pawtrack/controller/ImportController.java`
- [CSV import](https://github.com/syqenov/cpe314--69323--capstone-team-03/blob/main/src/main/java/pawtrack/service/CsvImportService.java): `src/main/java/pawtrack/service/CsvImportService.java`
- [Analytics reporting](https://github.com/syqenov/cpe314--69323--capstone-team-03/blob/main/src/main/java/pawtrack/service/AnalyticsService.java): `src/main/java/pawtrack/service/AnalyticsService.java`
- [Status undo history](https://github.com/syqenov/cpe314--69323--capstone-team-03/blob/main/src/main/java/pawtrack/service/StatusHistoryService.java): `src/main/java/pawtrack/service/StatusHistoryService.java`

### Domain and storage

- [Animal domain](https://github.com/syqenov/cpe314--69323--capstone-team-03/blob/main/src/main/java/pawtrack/model/Animal.java): `src/main/java/pawtrack/model/Animal.java`
- [Adopter domain](https://github.com/syqenov/cpe314--69323--capstone-team-03/blob/main/src/main/java/pawtrack/model/Adopter.java): `src/main/java/pawtrack/model/Adopter.java`
- [Adoption records](https://github.com/syqenov/cpe314--69323--capstone-team-03/blob/main/src/main/java/pawtrack/model/AdoptionRecord.java): `src/main/java/pawtrack/model/AdoptionRecord.java`
- [Classification tree](https://github.com/syqenov/cpe314--69323--capstone-team-03/blob/main/src/main/java/pawtrack/model/ClassificationNode.java): `src/main/java/pawtrack/model/ClassificationNode.java`
- [Animal storage](https://github.com/syqenov/cpe314--69323--capstone-team-03/blob/main/src/main/java/pawtrack/dao/AnimalDao.java): `src/main/java/pawtrack/dao/AnimalDao.java`
- [Adopter storage](https://github.com/syqenov/cpe314--69323--capstone-team-03/blob/main/src/main/java/pawtrack/dao/AdopterDao.java): `src/main/java/pawtrack/dao/AdopterDao.java`
- [Adoption storage](https://github.com/syqenov/cpe314--69323--capstone-team-03/blob/main/src/main/java/pawtrack/dao/AdoptionRecordDao.java): `src/main/java/pawtrack/dao/AdoptionRecordDao.java`
- [Classification storage](https://github.com/syqenov/cpe314--69323--capstone-team-03/blob/main/src/main/java/pawtrack/dao/ClassificationDao.java): `src/main/java/pawtrack/dao/ClassificationDao.java`
- [SQLite database](https://github.com/syqenov/cpe314--69323--capstone-team-03/blob/main/src/main/java/pawtrack/dao/Database.java): `src/main/java/pawtrack/dao/Database.java`

### External services

- [Pet image providers](https://github.com/syqenov/cpe314--69323--capstone-team-03/blob/main/src/main/java/pawtrack/api/PetImageServiceFactory.java): `src/main/java/pawtrack/api/PetImageServiceFactory.java`
- **Public image APIs**

### Other components

- **Staff or adopter**

## Connections

- Staff or adopter → Application startup: launches (evidence: `src/main/java/pawtrack/Main.java`)
- Application startup → Shelter GUI: opens (evidence: `src/main/java/pawtrack/Main.java`)
- Application startup → Login and account UI: shows (evidence: `src/main/java/pawtrack/Main.java`)
- Shelter GUI → Authentication: uses (evidence: `src/main/java/pawtrack/ui/MainFrame.java`)
- Shelter GUI → Animal management: uses (evidence: `src/main/java/pawtrack/ui/MainFrame.java`)
- Shelter GUI → Adoption workflow: uses (evidence: `src/main/java/pawtrack/ui/MainFrame.java`)
- Shelter GUI → Waitlist workflow: uses (evidence: `src/main/java/pawtrack/ui/MainFrame.java`)
- Shelter GUI → Classification workflow: uses (evidence: `src/main/java/pawtrack/ui/MainFrame.java`)
- Shelter GUI → Import workflow: uses (evidence: `src/main/java/pawtrack/ui/MainFrame.java`)
- Shelter GUI → Analytics reporting: uses (evidence: `src/main/java/pawtrack/ui/MainFrame.java`)
- Authentication → SQLite database: reads users (evidence: `src/main/java/pawtrack/controller/AuthController.java`)
- Animal management → Animal storage: reads and updates (evidence: `src/main/java/pawtrack/controller/AnimalController.java`)
- Adoption workflow → Adopter storage: finds adopters (evidence: `src/main/java/pawtrack/controller/AdoptionController.java`)
- Adoption workflow → Animal storage: updates animals (evidence: `src/main/java/pawtrack/controller/AdoptionController.java`)
- Adoption workflow → Adoption storage: records adoptions (evidence: `src/main/java/pawtrack/controller/AdoptionController.java`)
- Adoption workflow → Status undo history: records status (evidence: `src/main/java/pawtrack/controller/AdoptionController.java`)
- Waitlist workflow → Adopter storage: persists adopters (evidence: `src/main/java/pawtrack/controller/WaitlistController.java`)
- Waitlist workflow → Animal storage: updates status (evidence: `src/main/java/pawtrack/controller/WaitlistController.java`)
- Waitlist workflow → Status undo history: records status (evidence: `src/main/java/pawtrack/controller/WaitlistController.java`)
- Waitlist workflow → Adopter domain: queues interest (evidence: `src/main/java/pawtrack/controller/WaitlistController.java`)
- Classification workflow → Breed classification: delegates to (evidence: `src/main/java/pawtrack/controller/ClassificationController.java`)
- Breed classification → Classification storage: loads tree (evidence: `src/main/java/pawtrack/service/ClassificationService.java`)
- Import workflow → CSV import: runs import (evidence: `src/main/java/pawtrack/controller/ImportController.java`)
- CSV import → Animal storage: stores animals (evidence: `src/main/java/pawtrack/service/CsvImportService.java`)
- CSV import → Adopter storage: stores adopters (evidence: `src/main/java/pawtrack/service/CsvImportService.java`)
- CSV import → Adoption storage: stores adoptions (evidence: `src/main/java/pawtrack/service/CsvImportService.java`)
- CSV import → Breed classification: uses taxonomy (evidence: `src/main/java/pawtrack/service/CsvImportService.java`)
- Import worker → CSV import: runs asynchronously (evidence: `src/main/java/pawtrack/ui/ImportWorker.java`)
- Analytics reporting → Animal domain: analyzes (evidence: `src/main/java/pawtrack/service/AnalyticsService.java`)
- Analytics reporting → Adoption records: analyzes (evidence: `src/main/java/pawtrack/service/AnalyticsService.java`)
- Breed classification → Classification tree: builds tree (evidence: `src/main/java/pawtrack/service/ClassificationService.java`)
- Animal storage → SQLite database: queries (evidence: `src/main/java/pawtrack/dao/AnimalDao.java`)
- Pet image providers → Public image APIs: fetches images
- Shelter GUI → Pet image providers: selects providers (evidence: `src/main/java/pawtrack/ui/MainFrame.java`)
- Image worker → Pet image providers: fetches images
