# 0monish0/step2nd architecture

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

## Overview

This repository contains successive Java banking-account exercises, not a deployed banking service. The main workflow is to create an account, then manage deposits, PIN-protected withdrawals, and account status; the exception-based version reports invalid operations with domain exceptions. The root account classes are separate implementations, while ACTIVITY5 adds explicit exceptions and activity7 begins an abstract account model. The tree and excerpts do not show a complete activity7 application or its supporting exception and account-type implementations, so those connections are omitted.

Main entry points: [`ACTIVITY5/Account.java`](https://github.com/0monish0/step2nd/blob/master/ACTIVITY5/Account.java) (Account Lifecycle), [`ACTIVITY5/AccountException.java`](https://github.com/0monish0/step2nd/blob/master/ACTIVITY5/AccountException.java) (Account Exception), [`ACTIVITY5/InvalidAmountException.java`](https://github.com/0monish0/step2nd/blob/master/ACTIVITY5/InvalidAmountException.java) (Invalid Amount), [`ACTIVITY5/InactiveAccountException.java`](https://github.com/0monish0/step2nd/blob/master/ACTIVITY5/InactiveAccountException.java) (Inactive Account)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_root["Root Account Variants"]
  node_basic["Basic Account<br/>[Account.java]"]
  node_enhanced["Enhanced Account"]
end

subgraph group_activity5["Exception Account"]
  node_account5["Account Lifecycle<br/>[Account.java]"]
  node_exceptionbase["Account Exception"]
  node_invalidamount["Invalid Amount"]
  node_inactive["Inactive Account"]
  node_insufficient["Insufficient Balance"]
  node_minimum["Minimum Balance"]
  node_invalidpin["Invalid PIN"]
end

subgraph group_activity7["Abstract Domain"]
  node_abstractaccount["Abstract Account<br/>[Account.java]"]
end

node_user(("Caller"))

node_user -->|"creates and operates"| node_basic
node_user -->|"creates and operates"| node_enhanced
node_user -->|"creates and operates"| node_account5
node_account5 -->|"throws"| node_invalidamount
node_account5 -->|"throws"| node_inactive
node_account5 -->|"throws"| node_insufficient
node_account5 -->|"throws"| node_invalidpin
node_account5 -->|"declares"| node_minimum
node_invalidamount -->|"extends"| node_exceptionbase
node_inactive -->|"extends"| node_exceptionbase
node_insufficient -->|"extends"| node_exceptionbase
node_invalidpin -->|"extends"| node_exceptionbase
node_minimum -->|"extends"| node_exceptionbase
node_user -->|"uses"| node_abstractaccount

click node_basic "https://github.com/0monish0/step2nd/blob/master/Account.java"
click node_enhanced "https://github.com/0monish0/step2nd/blob/master/AccountEnhanced.java"
click node_account5 "https://github.com/0monish0/step2nd/blob/master/ACTIVITY5/Account.java"
click node_exceptionbase "https://github.com/0monish0/step2nd/blob/master/ACTIVITY5/AccountException.java"
click node_invalidamount "https://github.com/0monish0/step2nd/blob/master/ACTIVITY5/InvalidAmountException.java"
click node_inactive "https://github.com/0monish0/step2nd/blob/master/ACTIVITY5/InactiveAccountException.java"
click node_insufficient "https://github.com/0monish0/step2nd/blob/master/ACTIVITY5/InsufficientBalanceException.java"
click node_minimum "https://github.com/0monish0/step2nd/blob/master/ACTIVITY5/MinimumBalanceViolationException.java"
click node_invalidpin "https://github.com/0monish0/step2nd/blob/master/ACTIVITY5/InvalidPinException.java"
click node_abstractaccount "https://github.com/0monish0/step2nd/blob/master/activity7/src/com/gdb/domain/Account.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_basic,node_enhanced toneBlue
class node_account5,node_exceptionbase,node_invalidamount,node_inactive,node_insufficient,node_minimum,node_invalidpin toneAmber
class node_abstractaccount toneMint
class node_user toneIndigo
```

## Components

### Root Account Variants

- [Basic Account](https://github.com/0monish0/step2nd/blob/master/Account.java): `Account.java`
- [Enhanced Account](https://github.com/0monish0/step2nd/blob/master/AccountEnhanced.java): `AccountEnhanced.java`

### Exception Account

- [Account Lifecycle](https://github.com/0monish0/step2nd/blob/master/ACTIVITY5/Account.java): `ACTIVITY5/Account.java`
- [Account Exception](https://github.com/0monish0/step2nd/blob/master/ACTIVITY5/AccountException.java): `ACTIVITY5/AccountException.java`
- [Invalid Amount](https://github.com/0monish0/step2nd/blob/master/ACTIVITY5/InvalidAmountException.java): `ACTIVITY5/InvalidAmountException.java`
- [Inactive Account](https://github.com/0monish0/step2nd/blob/master/ACTIVITY5/InactiveAccountException.java): `ACTIVITY5/InactiveAccountException.java`
- [Insufficient Balance](https://github.com/0monish0/step2nd/blob/master/ACTIVITY5/InsufficientBalanceException.java): `ACTIVITY5/InsufficientBalanceException.java`
- [Minimum Balance](https://github.com/0monish0/step2nd/blob/master/ACTIVITY5/MinimumBalanceViolationException.java): `ACTIVITY5/MinimumBalanceViolationException.java`
- [Invalid PIN](https://github.com/0monish0/step2nd/blob/master/ACTIVITY5/InvalidPinException.java): `ACTIVITY5/InvalidPinException.java`

### Abstract Domain

- [Abstract Account](https://github.com/0monish0/step2nd/blob/master/activity7/src/com/gdb/domain/Account.java): `activity7/src/com/gdb/domain/Account.java`

### Other components

- **Caller**

## Connections

- Caller → Basic Account: creates and operates
- Caller → Enhanced Account: creates and operates
- Caller → Account Lifecycle: creates and operates
- Account Lifecycle → Invalid Amount: throws
- Account Lifecycle → Inactive Account: throws
- Account Lifecycle → Insufficient Balance: throws
- Account Lifecycle → Invalid PIN: throws
- Account Lifecycle → Minimum Balance: declares
- Invalid Amount → Account Exception: extends
- Inactive Account → Account Exception: extends
- Insufficient Balance → Account Exception: extends
- Invalid PIN → Account Exception: extends
- Minimum Balance → Account Exception: extends
- Caller → Abstract Account: uses
