# sev1r0us/hahahaha architecture

> Architecture diagram of the GitHub repository sev1r0us/hahahaha, 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/sev1r0us/hahahaha
- Repository: https://github.com/sev1r0us/hahahaha

## Overview

Unitrace is a console-based campus lost-and-found application. Admins log found items and review claims; students search items, report losses, submit ownership proof, and collect approved items. In-memory registry logic supports matching, claim-state transitions, and release receipts. The graph follows the documented console-to-registry flow and sampled registry behavior; some supporting modules are represented from the source index, so their internal connections are omitted where implementation details were not shown.

Main entry points: [`Unitrace/src/ItemRegistry.java`](https://github.com/sev1r0us/hahahaha/blob/main/Unitrace/src/ItemRegistry.java) (Item registry), [`Unitrace/src/ConsoleUI.java`](https://github.com/sev1r0us/hahahaha/blob/main/Unitrace/src/ConsoleUI.java) (Role menus), [`Unitrace/src/Item.java`](https://github.com/sev1r0us/hahahaha/blob/main/Unitrace/src/Item.java) (Found item lifecycle), [`Unitrace/src/ClaimRequest.java`](https://github.com/sev1r0us/hahahaha/blob/main/Unitrace/src/ClaimRequest.java) (Claim request)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_interaction["Console interaction"]
  node_main["Application entry<br/>[Main.java]"]
  node_ui["Role menus<br/>[ConsoleUI.java]"]
  node_input["Console input<br/>[InputHelper.java]"]
  node_admin["Admin guard<br/>[AdminGuard.java]"]
end

subgraph group_registry["Registry workflows"]
  node_registry[("Item registry<br/>[ItemRegistry.java]")]
  node_claimprocessor["Claim processing contract"]
end

subgraph group_records["Domain records"]
  node_item["Found item lifecycle<br/>[Item.java]"]
  node_electronics["Electronics item<br/>[Electronics.java]"]
  node_personal["Personal belonging"]
  node_studentid["Student ID item<br/>[StudentIDCard.java]"]
  node_lostreport["Lost report<br/>[LostReport.java]"]
  node_match["Match result<br/>[MatchResult.java]"]
  node_claim["Claim request<br/>[ClaimRequest.java]"]
  node_student["Student account<br/>[Student.java]"]
end

subgraph group_support["Domain support"]
  node_category["Item categories<br/>[ItemCategory.java]"]
  node_status["Item status<br/>[ItemStatus.java]"]
  node_claimstatus["Claim status<br/>[ClaimStatus.java]"]
  node_text["Text matching and display<br/>[TextUtil.java]"]
  node_claimerror["Claim errors"]
  node_transitionerror["Status transition error"]
  node_notfound["Item not found error"]
end

node_user(("Student or admin"))

node_user -->|"uses menus"| node_ui
node_main -.->|"starts"| node_ui
node_main -.->|"provides registry"| node_registry
node_ui -->|"requests operations"| node_registry
node_ui -->|"reads input"| node_input
node_ui -->|"checks admin"| node_admin
node_ui -->|"formats output"| node_text
node_ui -->|"creates report"| node_lostreport
node_ui -->|"displays claims"| node_claim
node_registry -->|"searches and updates"| node_item
node_registry -->|"stores and matches"| node_lostreport
node_registry -->|"creates results"| node_match
node_registry -->|"creates and decides"| node_claim
node_registry -->|"implements"| node_claimprocessor
node_registry -->|"uses claimant records"| node_student
node_item -->|"uses category"| node_category
node_item -->|"validates transitions"| node_status
node_electronics -->|"extends"| node_item
node_personal -->|"extends"| node_item
node_studentid -->|"extends"| node_item
node_lostreport -->|"identifies reporter"| node_student
node_claim -->|"identifies claimant"| node_student
node_claim -->|"references item"| node_item
node_claim -->|"tracks status"| node_claimstatus
node_registry -->|"normalizes match text"| node_text
node_registry -->|"raises claim errors"| node_claimerror
node_registry -->|"raises transition errors"| node_transitionerror
node_registry -->|"raises lookup error"| node_notfound

click node_main "https://github.com/sev1r0us/hahahaha/blob/main/Unitrace/src/Main.java"
click node_ui "https://github.com/sev1r0us/hahahaha/blob/main/Unitrace/src/ConsoleUI.java"
click node_input "https://github.com/sev1r0us/hahahaha/blob/main/Unitrace/src/InputHelper.java"
click node_admin "https://github.com/sev1r0us/hahahaha/blob/main/Unitrace/src/AdminGuard.java"
click node_registry "https://github.com/sev1r0us/hahahaha/blob/main/Unitrace/src/ItemRegistry.java"
click node_claimprocessor "https://github.com/sev1r0us/hahahaha/blob/main/Unitrace/src/ClaimProcessor.java"
click node_item "https://github.com/sev1r0us/hahahaha/blob/main/Unitrace/src/Item.java"
click node_electronics "https://github.com/sev1r0us/hahahaha/blob/main/Unitrace/src/Electronics.java"
click node_personal "https://github.com/sev1r0us/hahahaha/blob/main/Unitrace/src/PersonalBelonging.java"
click node_studentid "https://github.com/sev1r0us/hahahaha/blob/main/Unitrace/src/StudentIDCard.java"
click node_lostreport "https://github.com/sev1r0us/hahahaha/blob/main/Unitrace/src/LostReport.java"
click node_match "https://github.com/sev1r0us/hahahaha/blob/main/Unitrace/src/MatchResult.java"
click node_claim "https://github.com/sev1r0us/hahahaha/blob/main/Unitrace/src/ClaimRequest.java"
click node_student "https://github.com/sev1r0us/hahahaha/blob/main/Unitrace/src/Student.java"
click node_category "https://github.com/sev1r0us/hahahaha/blob/main/Unitrace/src/ItemCategory.java"
click node_status "https://github.com/sev1r0us/hahahaha/blob/main/Unitrace/src/ItemStatus.java"
click node_claimstatus "https://github.com/sev1r0us/hahahaha/blob/main/Unitrace/src/ClaimStatus.java"
click node_text "https://github.com/sev1r0us/hahahaha/blob/main/Unitrace/src/TextUtil.java"
click node_claimerror "https://github.com/sev1r0us/hahahaha/blob/main/Unitrace/src/InvalidClaimException.java"
click node_transitionerror "https://github.com/sev1r0us/hahahaha/blob/main/Unitrace/src/InvalidStatusTransitionException.java"
click node_notfound "https://github.com/sev1r0us/hahahaha/blob/main/Unitrace/src/ItemNotFoundException.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_ui,node_input,node_admin toneBlue
class node_registry,node_claimprocessor toneAmber
class node_item,node_electronics,node_personal,node_studentid,node_lostreport,node_match,node_claim,node_student toneMint
class node_category,node_status,node_claimstatus,node_text,node_claimerror,node_transitionerror,node_notfound toneRose
class node_user toneIndigo
```

## Components

### Console interaction

- [Application entry](https://github.com/sev1r0us/hahahaha/blob/main/Unitrace/src/Main.java): `Unitrace/src/Main.java`
- [Role menus](https://github.com/sev1r0us/hahahaha/blob/main/Unitrace/src/ConsoleUI.java): `Unitrace/src/ConsoleUI.java`
- [Console input](https://github.com/sev1r0us/hahahaha/blob/main/Unitrace/src/InputHelper.java): `Unitrace/src/InputHelper.java`
- [Admin guard](https://github.com/sev1r0us/hahahaha/blob/main/Unitrace/src/AdminGuard.java): `Unitrace/src/AdminGuard.java`

### Registry workflows

- [Item registry](https://github.com/sev1r0us/hahahaha/blob/main/Unitrace/src/ItemRegistry.java): `Unitrace/src/ItemRegistry.java`
- [Claim processing contract](https://github.com/sev1r0us/hahahaha/blob/main/Unitrace/src/ClaimProcessor.java): `Unitrace/src/ClaimProcessor.java`

### Domain records

- [Found item lifecycle](https://github.com/sev1r0us/hahahaha/blob/main/Unitrace/src/Item.java): `Unitrace/src/Item.java`
- [Electronics item](https://github.com/sev1r0us/hahahaha/blob/main/Unitrace/src/Electronics.java): `Unitrace/src/Electronics.java`
- [Personal belonging](https://github.com/sev1r0us/hahahaha/blob/main/Unitrace/src/PersonalBelonging.java): `Unitrace/src/PersonalBelonging.java`
- [Student ID item](https://github.com/sev1r0us/hahahaha/blob/main/Unitrace/src/StudentIDCard.java): `Unitrace/src/StudentIDCard.java`
- [Lost report](https://github.com/sev1r0us/hahahaha/blob/main/Unitrace/src/LostReport.java): `Unitrace/src/LostReport.java`
- [Match result](https://github.com/sev1r0us/hahahaha/blob/main/Unitrace/src/MatchResult.java): `Unitrace/src/MatchResult.java`
- [Claim request](https://github.com/sev1r0us/hahahaha/blob/main/Unitrace/src/ClaimRequest.java): `Unitrace/src/ClaimRequest.java`
- [Student account](https://github.com/sev1r0us/hahahaha/blob/main/Unitrace/src/Student.java): `Unitrace/src/Student.java`

### Domain support

- [Item categories](https://github.com/sev1r0us/hahahaha/blob/main/Unitrace/src/ItemCategory.java): `Unitrace/src/ItemCategory.java`
- [Item status](https://github.com/sev1r0us/hahahaha/blob/main/Unitrace/src/ItemStatus.java): `Unitrace/src/ItemStatus.java`
- [Claim status](https://github.com/sev1r0us/hahahaha/blob/main/Unitrace/src/ClaimStatus.java): `Unitrace/src/ClaimStatus.java`
- [Text matching and display](https://github.com/sev1r0us/hahahaha/blob/main/Unitrace/src/TextUtil.java): `Unitrace/src/TextUtil.java`
- [Claim errors](https://github.com/sev1r0us/hahahaha/blob/main/Unitrace/src/InvalidClaimException.java): `Unitrace/src/InvalidClaimException.java`
- [Status transition error](https://github.com/sev1r0us/hahahaha/blob/main/Unitrace/src/InvalidStatusTransitionException.java): `Unitrace/src/InvalidStatusTransitionException.java`
- [Item not found error](https://github.com/sev1r0us/hahahaha/blob/main/Unitrace/src/ItemNotFoundException.java): `Unitrace/src/ItemNotFoundException.java`

### Other components

- **Student or admin**

## Connections

- Student or admin → Role menus: uses menus (evidence: `Unitrace/src/ConsoleUI.java`)
- Application entry → Role menus: starts (evidence: `Unitrace/src/Main.java`)
- Application entry → Item registry: provides registry (evidence: `Unitrace/src/Main.java`)
- Role menus → Item registry: requests operations (evidence: `Unitrace/src/ConsoleUI.java`)
- Role menus → Console input: reads input (evidence: `Unitrace/src/ConsoleUI.java`)
- Role menus → Admin guard: checks admin (evidence: `Unitrace/src/ConsoleUI.java`)
- Role menus → Text matching and display: formats output (evidence: `Unitrace/src/ConsoleUI.java`)
- Role menus → Lost report: creates report (evidence: `Unitrace/src/ConsoleUI.java`)
- Role menus → Claim request: displays claims (evidence: `Unitrace/src/ConsoleUI.java`)
- Item registry → Found item lifecycle: searches and updates (evidence: `Unitrace/src/ItemRegistry.java`)
- Item registry → Lost report: stores and matches (evidence: `Unitrace/src/ItemRegistry.java`)
- Item registry → Match result: creates results (evidence: `Unitrace/src/ItemRegistry.java`)
- Item registry → Claim request: creates and decides (evidence: `Unitrace/src/ItemRegistry.java`)
- Item registry → Claim processing contract: implements (evidence: `Unitrace/src/ItemRegistry.java`)
- Item registry → Student account: uses claimant records (evidence: `Unitrace/src/ItemRegistry.java`)
- Found item lifecycle → Item categories: uses category (evidence: `Unitrace/src/Item.java`)
- Found item lifecycle → Item status: validates transitions (evidence: `Unitrace/src/Item.java`)
- Electronics item → Found item lifecycle: extends (evidence: `Unitrace/src/Electronics.java`)
- Personal belonging → Found item lifecycle: extends (evidence: `Unitrace/src/PersonalBelonging.java`)
- Student ID item → Found item lifecycle: extends (evidence: `Unitrace/src/StudentIDCard.java`)
- Lost report → Student account: identifies reporter (evidence: `Unitrace/src/LostReport.java`)
- Claim request → Student account: identifies claimant (evidence: `Unitrace/src/ClaimRequest.java`)
- Claim request → Found item lifecycle: references item (evidence: `Unitrace/src/ClaimRequest.java`)
- Claim request → Claim status: tracks status (evidence: `Unitrace/src/ClaimRequest.java`)
- Item registry → Text matching and display: normalizes match text (evidence: `Unitrace/src/ItemRegistry.java`)
- Item registry → Claim errors: raises claim errors (evidence: `Unitrace/src/ItemRegistry.java`)
- Item registry → Status transition error: raises transition errors (evidence: `Unitrace/src/ItemRegistry.java`)
- Item registry → Item not found error: raises lookup error (evidence: `Unitrace/src/ItemRegistry.java`)
