# ay2627s1-cs2103t-w13-2/tp architecture

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

- Interactive diagram: https://gitdiagram.com/ay2627s1-cs2103t-w13-2/tp
- Repository: https://github.com/ay2627s1-cs2103t-w13-2/tp

## Overview

ZoomAddress is a local desktop participant manager with typed, keyboard-driven commands. The principal workflow takes a command from the user through parsing and execution, changes or searches the participant model, and presents a result in the UI; local JSON storage preserves address-book and preference data. The README also describes group, role, and activity assignments, but those capabilities are not represented by the supplied source tree, so they are noted rather than mapped to invented components. Edges reflect the excerpts, source index, and README; unsampled UI and startup wiring is kept conservative.

Main entry points: [`src/main/java/seedu/address/logic/LogicManager.java`](https://github.com/ay2627s1-cs2103t-w13-2/tp/blob/master/src/main/java/seedu/address/logic/LogicManager.java) (Logic manager), [`src/main/java/seedu/address/model/ModelManager.java`](https://github.com/ay2627s1-cs2103t-w13-2/tp/blob/master/src/main/java/seedu/address/model/ModelManager.java) (Model manager), [`src/main/java/seedu/address/storage/StorageManager.java`](https://github.com/ay2627s1-cs2103t-w13-2/tp/blob/master/src/main/java/seedu/address/storage/StorageManager.java) (Storage coordinator), [`src/main/java/seedu/address/ui/CommandBox.java`](https://github.com/ay2627s1-cs2103t-w13-2/tp/blob/master/src/main/java/seedu/address/ui/CommandBox.java) (Command input)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_ui["Desktop UI"]
  node_app["Application startup<br/>[MainApp.java]"]
  node_window["Main window<br/>[MainWindow.java]"]
  node_commandbox["Command input<br/>[CommandBox.java]"]
  node_results["Results and people<br/>[ResultDisplay.java]"]
  node_uimanager["UI coordinator<br/>[UiManager.java]"]
end

subgraph group_logic["Command workflow"]
  node_logicmanager["Logic manager<br/>[LogicManager.java]"]
  node_parser["Command parser"]
  node_commands["Commands"]
  node_edit["Edit command<br/>[EditCommand.java]"]
end

subgraph group_domain["Participant model"]
  node_modelmanager["Model manager<br/>[ModelManager.java]"]
  node_addressbook["Participant collection<br/>[AddressBook.java]"]
  node_person["Participant records<br/>[Person.java]"]
  node_tag["Tags<br/>[Tag.java]"]
  node_assignments["Groups, roles, activities"]
end

subgraph group_persistence["Local persistence"]
  node_storage["Storage coordinator"]
  node_jsonbook["Address book JSON"]
  node_jsonprefs["Preferences JSON"]
end

node_user(("Event director"))
node_localfiles[("Local data files")]

node_user -->|"types commands"| node_commandbox
node_commandbox -.->|"submits input"| node_logicmanager
node_logicmanager -->|"parses input"| node_parser
node_parser -->|"creates command"| node_commands
node_logicmanager -->|"executes command"| node_commands
node_edit -->|"updates model"| node_modelmanager
node_commands -.->|"operates on model"| node_modelmanager
node_modelmanager -->|"manages data"| node_addressbook
node_addressbook -.->|"stores records"| node_person
node_person -->|"holds tags"| node_tag
node_logicmanager -.->|"persists changes"| node_storage
node_storage -->|"delegates book I/O"| node_jsonbook
node_storage -->|"delegates prefs I/O"| node_jsonprefs
node_jsonbook -->|"reads and writes"| node_localfiles
node_jsonprefs -.->|"reads and writes"| node_localfiles
node_app -.->|"starts UI"| node_uimanager
node_uimanager -->|"creates window"| node_window
node_window -.->|"hosts input"| node_commandbox
node_logicmanager -.->|"returns command result"| node_results
node_modelmanager -.->|"supplies participant view"| node_results
node_user -->|"uses assignments"| node_assignments

click node_app "https://github.com/ay2627s1-cs2103t-w13-2/tp/blob/master/src/main/java/seedu/address/MainApp.java"
click node_window "https://github.com/ay2627s1-cs2103t-w13-2/tp/blob/master/src/main/java/seedu/address/ui/MainWindow.java"
click node_commandbox "https://github.com/ay2627s1-cs2103t-w13-2/tp/blob/master/src/main/java/seedu/address/ui/CommandBox.java"
click node_results "https://github.com/ay2627s1-cs2103t-w13-2/tp/blob/master/src/main/java/seedu/address/ui/ResultDisplay.java"
click node_uimanager "https://github.com/ay2627s1-cs2103t-w13-2/tp/blob/master/src/main/java/seedu/address/ui/UiManager.java"
click node_logicmanager "https://github.com/ay2627s1-cs2103t-w13-2/tp/blob/master/src/main/java/seedu/address/logic/LogicManager.java"
click node_parser "https://github.com/ay2627s1-cs2103t-w13-2/tp/blob/master/src/main/java/seedu/address/logic/parser/AddressBookParser.java"
click node_commands "https://github.com/ay2627s1-cs2103t-w13-2/tp/tree/master/src/main/java/seedu/address/logic/commands"
click node_edit "https://github.com/ay2627s1-cs2103t-w13-2/tp/blob/master/src/main/java/seedu/address/logic/commands/EditCommand.java"
click node_modelmanager "https://github.com/ay2627s1-cs2103t-w13-2/tp/blob/master/src/main/java/seedu/address/model/ModelManager.java"
click node_addressbook "https://github.com/ay2627s1-cs2103t-w13-2/tp/blob/master/src/main/java/seedu/address/model/AddressBook.java"
click node_person "https://github.com/ay2627s1-cs2103t-w13-2/tp/blob/master/src/main/java/seedu/address/model/person/Person.java"
click node_tag "https://github.com/ay2627s1-cs2103t-w13-2/tp/blob/master/src/main/java/seedu/address/model/tag/Tag.java"
click node_assignments "https://github.com/ay2627s1-cs2103t-w13-2/tp/tree/master/src/main/java/seedu/address/model"
click node_storage "https://github.com/ay2627s1-cs2103t-w13-2/tp/blob/master/src/main/java/seedu/address/storage/StorageManager.java"
click node_jsonbook "https://github.com/ay2627s1-cs2103t-w13-2/tp/blob/master/src/main/java/seedu/address/storage/JsonAddressBookStorage.java"
click node_jsonprefs "https://github.com/ay2627s1-cs2103t-w13-2/tp/blob/master/src/main/java/seedu/address/storage/JsonUserPrefsStorage.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_app,node_window,node_commandbox,node_results,node_uimanager toneBlue
class node_logicmanager,node_parser,node_commands,node_edit,node_localfiles toneAmber
class node_modelmanager,node_addressbook,node_person,node_tag,node_assignments toneMint
class node_storage,node_jsonbook,node_jsonprefs toneRose
class node_user toneIndigo
```

## Components

### Desktop UI

- [Application startup](https://github.com/ay2627s1-cs2103t-w13-2/tp/blob/master/src/main/java/seedu/address/MainApp.java): `src/main/java/seedu/address/MainApp.java`
- [Main window](https://github.com/ay2627s1-cs2103t-w13-2/tp/blob/master/src/main/java/seedu/address/ui/MainWindow.java): `src/main/java/seedu/address/ui/MainWindow.java`
- [Command input](https://github.com/ay2627s1-cs2103t-w13-2/tp/blob/master/src/main/java/seedu/address/ui/CommandBox.java): `src/main/java/seedu/address/ui/CommandBox.java`
- [Results and people](https://github.com/ay2627s1-cs2103t-w13-2/tp/blob/master/src/main/java/seedu/address/ui/ResultDisplay.java): `src/main/java/seedu/address/ui/ResultDisplay.java`
- [UI coordinator](https://github.com/ay2627s1-cs2103t-w13-2/tp/blob/master/src/main/java/seedu/address/ui/UiManager.java): `src/main/java/seedu/address/ui/UiManager.java`

### Command workflow

- [Logic manager](https://github.com/ay2627s1-cs2103t-w13-2/tp/blob/master/src/main/java/seedu/address/logic/LogicManager.java): `src/main/java/seedu/address/logic/LogicManager.java`
- [Command parser](https://github.com/ay2627s1-cs2103t-w13-2/tp/blob/master/src/main/java/seedu/address/logic/parser/AddressBookParser.java): `src/main/java/seedu/address/logic/parser/AddressBookParser.java`
- [Commands](https://github.com/ay2627s1-cs2103t-w13-2/tp/tree/master/src/main/java/seedu/address/logic/commands): `src/main/java/seedu/address/logic/commands`
- [Edit command](https://github.com/ay2627s1-cs2103t-w13-2/tp/blob/master/src/main/java/seedu/address/logic/commands/EditCommand.java): `src/main/java/seedu/address/logic/commands/EditCommand.java`

### Participant model

- [Model manager](https://github.com/ay2627s1-cs2103t-w13-2/tp/blob/master/src/main/java/seedu/address/model/ModelManager.java): `src/main/java/seedu/address/model/ModelManager.java`
- [Participant collection](https://github.com/ay2627s1-cs2103t-w13-2/tp/blob/master/src/main/java/seedu/address/model/AddressBook.java): `src/main/java/seedu/address/model/AddressBook.java`
- [Participant records](https://github.com/ay2627s1-cs2103t-w13-2/tp/blob/master/src/main/java/seedu/address/model/person/Person.java): `src/main/java/seedu/address/model/person/Person.java`
- [Tags](https://github.com/ay2627s1-cs2103t-w13-2/tp/blob/master/src/main/java/seedu/address/model/tag/Tag.java): `src/main/java/seedu/address/model/tag/Tag.java`
- [Groups, roles, activities](https://github.com/ay2627s1-cs2103t-w13-2/tp/tree/master/src/main/java/seedu/address/model): `src/main/java/seedu/address/model`

### Local persistence

- [Storage coordinator](https://github.com/ay2627s1-cs2103t-w13-2/tp/blob/master/src/main/java/seedu/address/storage/StorageManager.java): `src/main/java/seedu/address/storage/StorageManager.java`
- [Address book JSON](https://github.com/ay2627s1-cs2103t-w13-2/tp/blob/master/src/main/java/seedu/address/storage/JsonAddressBookStorage.java): `src/main/java/seedu/address/storage/JsonAddressBookStorage.java`
- [Preferences JSON](https://github.com/ay2627s1-cs2103t-w13-2/tp/blob/master/src/main/java/seedu/address/storage/JsonUserPrefsStorage.java): `src/main/java/seedu/address/storage/JsonUserPrefsStorage.java`

### Other components

- **Event director**
- **Local data files**

## Connections

- Event director → Command input: types commands
- Command input → Logic manager: submits input
- Logic manager → Command parser: parses input (evidence: `src/main/java/seedu/address/logic/LogicManager.java`)
- Command parser → Commands: creates command (evidence: `src/main/java/seedu/address/logic/parser/AddressBookParser.java`)
- Logic manager → Commands: executes command (evidence: `src/main/java/seedu/address/logic/LogicManager.java`)
- Edit command → Model manager: updates model (evidence: `src/main/java/seedu/address/logic/commands/EditCommand.java`)
- Commands → Model manager: operates on model
- Model manager → Participant collection: manages data (evidence: `src/main/java/seedu/address/model/ModelManager.java`)
- Participant collection → Participant records: stores records (evidence: `src/main/java/seedu/address/model/AddressBook.java`)
- Participant records → Tags: holds tags (evidence: `src/main/java/seedu/address/model/person/Person.java`)
- Logic manager → Storage coordinator: persists changes
- Storage coordinator → Address book JSON: delegates book I/O (evidence: `src/main/java/seedu/address/storage/StorageManager.java`)
- Storage coordinator → Preferences JSON: delegates prefs I/O (evidence: `src/main/java/seedu/address/storage/StorageManager.java`)
- Address book JSON → Local data files: reads and writes (evidence: `src/main/java/seedu/address/storage/JsonAddressBookStorage.java`)
- Preferences JSON → Local data files: reads and writes
- Application startup → UI coordinator: starts UI (evidence: `src/main/java/seedu/address/MainApp.java`)
- UI coordinator → Main window: creates window (evidence: `src/main/java/seedu/address/ui/UiManager.java`)
- Main window → Command input: hosts input (evidence: `src/main/java/seedu/address/ui/MainWindow.java`)
- Logic manager → Results and people: returns command result
- Model manager → Results and people: supplies participant view
- Event director → Groups, roles, activities: uses assignments
