# hmvn-cyber/baitaplon-nhom1-phiendaugia architecture

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

- Interactive diagram: https://gitdiagram.com/hmvn-cyber/baitaplon-nhom1-phiendaugia
- Repository: https://github.com/hmvn-cyber/baitaplon-nhom1-phiendaugia

## Overview

AuctionHub is a JavaFX client/server auction system: sellers and admins manage items and auctions; bidders register with a deposit, enter a room, and bid. TCP requests are dispatched by the server to auction/user management and persistence; room updates are broadcast to subscribers. Auction timing, anti-sniping, automatic bidding, and concurrent bid handling are distinct runtime capabilities. The README documents the overall client/server and JDBC flow; some controller and handler excerpts are partial, so uncertain internal call links are omitted.

Main entry points: [`auction/src/main/java/vn/edu/uvn/uet/network/ClientHandler.java`](https://github.com/hmvn-cyber/baitaplon-nhom1-phiendaugia/blob/main/auction/src/main/java/vn/edu/uvn/uet/network/ClientHandler.java) (Request dispatch), [`auction/src/main/java/vn/edu/uvn/uet/connection/DatabaseConnection.java`](https://github.com/hmvn-cyber/baitaplon-nhom1-phiendaugia/blob/main/auction/src/main/java/vn/edu/uvn/uet/connection/DatabaseConnection.java) (JDBC connection), [`auction/src/main/java/vn/edu/uvn/uet/manager/AuctionManager.java`](https://github.com/hmvn-cyber/baitaplon-nhom1-phiendaugia/blob/main/auction/src/main/java/vn/edu/uvn/uet/manager/AuctionManager.java) (Auction manager), [`auction/src/main/java/vn/edu/uvn/uet/App.java`](https://github.com/hmvn-cyber/baitaplon-nhom1-phiendaugia/blob/main/auction/src/main/java/vn/edu/uvn/uet/App.java) (JavaFX app)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_client["Desktop client"]
  node_app["JavaFX app<br/>[App.java]"]
  node_controllers["User workflows"]
end

subgraph group_transport["TCP transport"]
  node_clientservice["TCP client"]
  node_server["Auction server<br/>[AuctionServer.java]"]
  node_handler["Request dispatch<br/>[ClientHandler.java]"]
  node_protocol["Wire protocol<br/>[Protocol.java]"]
  node_parser["Response parsing"]
end

subgraph group_domain["Auction domain"]
  node_auctionmanager["Auction manager"]
  node_itemmanager["Item manager<br/>[ItemManager.java]"]
  node_auctionmodel["Auction model<br/>[Auction.java]"]
  node_itemmodel["Item model<br/>[Item.java]"]
  node_bidding["Bid coordination"]
  node_autobid["Auto bidding<br/>[AutoBidEngine.java]"]
  node_timing["Auction timing"]
end

subgraph group_persistence["Persistence"]
  node_auctiondao["Auction records<br/>[AuctionDAO.java]"]
  node_itemdao["Item records<br/>[ItemDAO.java]"]
  node_userdao["User records<br/>[UserDAO.java]"]
  node_biddao["Bid records"]
  node_registerdao["Deposits<br/>[RegisterDAO.java]"]
  node_dbconnection["JDBC connection"]
end

node_bidder(("Bidder"))
node_seller(("Seller"))
node_admin(("Admin"))
node_mysql[("MySQL")]

node_bidder -->|"uses"| node_app
node_seller -->|"uses"| node_app
node_admin -->|"uses"| node_app
node_app -->|"loads"| node_controllers
node_controllers -->|"sends requests"| node_clientservice
node_clientservice -->|"formats commands"| node_protocol
node_clientservice -->|"TCP requests"| node_server
node_server -->|"dispatches sockets"| node_handler
node_handler -->|"manages auctions"| node_auctionmanager
node_handler -->|"manages items"| node_itemmanager
node_handler -->|"queries auctions"| node_auctiondao
node_handler -->|"queries items"| node_itemdao
node_handler -->|"queries users"| node_userdao
node_handler -->|"queries bids"| node_biddao
node_handler -->|"handles deposits"| node_registerdao
node_auctionmanager -->|"persists results"| node_auctiondao
node_auctionmanager -->|"checks extensions"| node_timing
node_auctionmodel -.->|"serialized bids"| node_bidding
node_autobid -->|"places bids"| node_auctionmodel
node_auctionmanager -->|"holds auctions"| node_auctionmodel
node_itemmanager -->|"holds items"| node_itemmodel
node_auctiondao -.->|"JDBC access"| node_dbconnection
node_itemdao -.->|"JDBC access"| node_dbconnection
node_userdao -.->|"JDBC access"| node_dbconnection
node_biddao -.->|"JDBC access"| node_dbconnection
node_registerdao -.->|"JDBC access"| node_dbconnection
node_dbconnection -->|"connects"| node_mysql

click node_app "https://github.com/hmvn-cyber/baitaplon-nhom1-phiendaugia/blob/main/auction/src/main/java/vn/edu/uvn/uet/App.java"
click node_controllers "https://github.com/hmvn-cyber/baitaplon-nhom1-phiendaugia/tree/main/auction/src/main/java/vn/edu/uvn/uet/controller"
click node_clientservice "https://github.com/hmvn-cyber/baitaplon-nhom1-phiendaugia/blob/main/auction/src/main/java/vn/edu/uvn/uet/network/AuctionClientService.java"
click node_server "https://github.com/hmvn-cyber/baitaplon-nhom1-phiendaugia/blob/main/auction/src/main/java/vn/edu/uvn/uet/network/AuctionServer.java"
click node_handler "https://github.com/hmvn-cyber/baitaplon-nhom1-phiendaugia/blob/main/auction/src/main/java/vn/edu/uvn/uet/network/ClientHandler.java"
click node_protocol "https://github.com/hmvn-cyber/baitaplon-nhom1-phiendaugia/blob/main/auction/src/main/java/vn/edu/uvn/uet/network/Protocol.java"
click node_parser "https://github.com/hmvn-cyber/baitaplon-nhom1-phiendaugia/blob/main/auction/src/main/java/vn/edu/uvn/uet/network/ResponseParser.java"
click node_auctionmanager "https://github.com/hmvn-cyber/baitaplon-nhom1-phiendaugia/blob/main/auction/src/main/java/vn/edu/uvn/uet/manager/AuctionManager.java"
click node_itemmanager "https://github.com/hmvn-cyber/baitaplon-nhom1-phiendaugia/blob/main/auction/src/main/java/vn/edu/uvn/uet/manager/ItemManager.java"
click node_auctionmodel "https://github.com/hmvn-cyber/baitaplon-nhom1-phiendaugia/blob/main/auction/src/main/java/vn/edu/uvn/uet/entity/Auction.java"
click node_itemmodel "https://github.com/hmvn-cyber/baitaplon-nhom1-phiendaugia/blob/main/auction/src/main/java/vn/edu/uvn/uet/entity/Item.java"
click node_bidding "https://github.com/hmvn-cyber/baitaplon-nhom1-phiendaugia/blob/main/auction/src/main/java/vn/edu/uvn/uet/service/AuctionConcurrencyManager.java"
click node_autobid "https://github.com/hmvn-cyber/baitaplon-nhom1-phiendaugia/blob/main/auction/src/main/java/vn/edu/uvn/uet/service/AutoBidEngine.java"
click node_timing "https://github.com/hmvn-cyber/baitaplon-nhom1-phiendaugia/blob/main/auction/src/main/java/vn/edu/uvn/uet/service/AuctionExtender.java"
click node_auctiondao "https://github.com/hmvn-cyber/baitaplon-nhom1-phiendaugia/blob/main/auction/src/main/java/vn/edu/uvn/uet/repository/AuctionDAO.java"
click node_itemdao "https://github.com/hmvn-cyber/baitaplon-nhom1-phiendaugia/blob/main/auction/src/main/java/vn/edu/uvn/uet/repository/ItemDAO.java"
click node_userdao "https://github.com/hmvn-cyber/baitaplon-nhom1-phiendaugia/blob/main/auction/src/main/java/vn/edu/uvn/uet/repository/UserDAO.java"
click node_biddao "https://github.com/hmvn-cyber/baitaplon-nhom1-phiendaugia/blob/main/auction/src/main/java/vn/edu/uvn/uet/repository/BidTransactionDAO.java"
click node_registerdao "https://github.com/hmvn-cyber/baitaplon-nhom1-phiendaugia/blob/main/auction/src/main/java/vn/edu/uvn/uet/repository/RegisterDAO.java"
click node_dbconnection "https://github.com/hmvn-cyber/baitaplon-nhom1-phiendaugia/blob/main/auction/src/main/java/vn/edu/uvn/uet/connection/DatabaseConnection.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_controllers toneBlue
class node_clientservice,node_server,node_handler,node_protocol,node_parser,node_mysql toneAmber
class node_auctionmanager,node_itemmanager,node_auctionmodel,node_itemmodel,node_bidding,node_autobid,node_timing toneMint
class node_auctiondao,node_itemdao,node_userdao,node_biddao,node_registerdao,node_dbconnection toneRose
class node_bidder,node_seller,node_admin toneIndigo
```

## Components

### Desktop client

- [JavaFX app](https://github.com/hmvn-cyber/baitaplon-nhom1-phiendaugia/blob/main/auction/src/main/java/vn/edu/uvn/uet/App.java): `auction/src/main/java/vn/edu/uvn/uet/App.java`
- [User workflows](https://github.com/hmvn-cyber/baitaplon-nhom1-phiendaugia/tree/main/auction/src/main/java/vn/edu/uvn/uet/controller): `auction/src/main/java/vn/edu/uvn/uet/controller`

### TCP transport

- [TCP client](https://github.com/hmvn-cyber/baitaplon-nhom1-phiendaugia/blob/main/auction/src/main/java/vn/edu/uvn/uet/network/AuctionClientService.java): `auction/src/main/java/vn/edu/uvn/uet/network/AuctionClientService.java`
- [Auction server](https://github.com/hmvn-cyber/baitaplon-nhom1-phiendaugia/blob/main/auction/src/main/java/vn/edu/uvn/uet/network/AuctionServer.java): `auction/src/main/java/vn/edu/uvn/uet/network/AuctionServer.java`
- [Request dispatch](https://github.com/hmvn-cyber/baitaplon-nhom1-phiendaugia/blob/main/auction/src/main/java/vn/edu/uvn/uet/network/ClientHandler.java): `auction/src/main/java/vn/edu/uvn/uet/network/ClientHandler.java`
- [Wire protocol](https://github.com/hmvn-cyber/baitaplon-nhom1-phiendaugia/blob/main/auction/src/main/java/vn/edu/uvn/uet/network/Protocol.java): `auction/src/main/java/vn/edu/uvn/uet/network/Protocol.java`
- [Response parsing](https://github.com/hmvn-cyber/baitaplon-nhom1-phiendaugia/blob/main/auction/src/main/java/vn/edu/uvn/uet/network/ResponseParser.java): `auction/src/main/java/vn/edu/uvn/uet/network/ResponseParser.java`

### Auction domain

- [Auction manager](https://github.com/hmvn-cyber/baitaplon-nhom1-phiendaugia/blob/main/auction/src/main/java/vn/edu/uvn/uet/manager/AuctionManager.java): `auction/src/main/java/vn/edu/uvn/uet/manager/AuctionManager.java`
- [Item manager](https://github.com/hmvn-cyber/baitaplon-nhom1-phiendaugia/blob/main/auction/src/main/java/vn/edu/uvn/uet/manager/ItemManager.java): `auction/src/main/java/vn/edu/uvn/uet/manager/ItemManager.java`
- [Auction model](https://github.com/hmvn-cyber/baitaplon-nhom1-phiendaugia/blob/main/auction/src/main/java/vn/edu/uvn/uet/entity/Auction.java): `auction/src/main/java/vn/edu/uvn/uet/entity/Auction.java`
- [Item model](https://github.com/hmvn-cyber/baitaplon-nhom1-phiendaugia/blob/main/auction/src/main/java/vn/edu/uvn/uet/entity/Item.java): `auction/src/main/java/vn/edu/uvn/uet/entity/Item.java`
- [Bid coordination](https://github.com/hmvn-cyber/baitaplon-nhom1-phiendaugia/blob/main/auction/src/main/java/vn/edu/uvn/uet/service/AuctionConcurrencyManager.java): `auction/src/main/java/vn/edu/uvn/uet/service/AuctionConcurrencyManager.java`
- [Auto bidding](https://github.com/hmvn-cyber/baitaplon-nhom1-phiendaugia/blob/main/auction/src/main/java/vn/edu/uvn/uet/service/AutoBidEngine.java): `auction/src/main/java/vn/edu/uvn/uet/service/AutoBidEngine.java`
- [Auction timing](https://github.com/hmvn-cyber/baitaplon-nhom1-phiendaugia/blob/main/auction/src/main/java/vn/edu/uvn/uet/service/AuctionExtender.java): `auction/src/main/java/vn/edu/uvn/uet/service/AuctionExtender.java`

### Persistence

- [Auction records](https://github.com/hmvn-cyber/baitaplon-nhom1-phiendaugia/blob/main/auction/src/main/java/vn/edu/uvn/uet/repository/AuctionDAO.java): `auction/src/main/java/vn/edu/uvn/uet/repository/AuctionDAO.java`
- [Item records](https://github.com/hmvn-cyber/baitaplon-nhom1-phiendaugia/blob/main/auction/src/main/java/vn/edu/uvn/uet/repository/ItemDAO.java): `auction/src/main/java/vn/edu/uvn/uet/repository/ItemDAO.java`
- [User records](https://github.com/hmvn-cyber/baitaplon-nhom1-phiendaugia/blob/main/auction/src/main/java/vn/edu/uvn/uet/repository/UserDAO.java): `auction/src/main/java/vn/edu/uvn/uet/repository/UserDAO.java`
- [Bid records](https://github.com/hmvn-cyber/baitaplon-nhom1-phiendaugia/blob/main/auction/src/main/java/vn/edu/uvn/uet/repository/BidTransactionDAO.java): `auction/src/main/java/vn/edu/uvn/uet/repository/BidTransactionDAO.java`
- [Deposits](https://github.com/hmvn-cyber/baitaplon-nhom1-phiendaugia/blob/main/auction/src/main/java/vn/edu/uvn/uet/repository/RegisterDAO.java): `auction/src/main/java/vn/edu/uvn/uet/repository/RegisterDAO.java`
- [JDBC connection](https://github.com/hmvn-cyber/baitaplon-nhom1-phiendaugia/blob/main/auction/src/main/java/vn/edu/uvn/uet/connection/DatabaseConnection.java): `auction/src/main/java/vn/edu/uvn/uet/connection/DatabaseConnection.java`

### Other components

- **Bidder**
- **Seller**
- **Admin**
- **MySQL**

## Connections

- Bidder → JavaFX app: uses
- Seller → JavaFX app: uses
- Admin → JavaFX app: uses
- JavaFX app → User workflows: loads
- User workflows → TCP client: sends requests
- TCP client → Wire protocol: formats commands
- TCP client → Auction server: TCP requests
- Auction server → Request dispatch: dispatches sockets
- Request dispatch → Auction manager: manages auctions
- Request dispatch → Item manager: manages items
- Request dispatch → Auction records: queries auctions
- Request dispatch → Item records: queries items
- Request dispatch → User records: queries users
- Request dispatch → Bid records: queries bids
- Request dispatch → Deposits: handles deposits
- Auction manager → Auction records: persists results
- Auction manager → Auction timing: checks extensions
- Auction model → Bid coordination: serialized bids
- Auto bidding → Auction model: places bids
- Auction manager → Auction model: holds auctions
- Item manager → Item model: holds items
- Auction records → JDBC connection: JDBC access
- Item records → JDBC connection: JDBC access
- User records → JDBC connection: JDBC access
- Bid records → JDBC connection: JDBC access
- Deposits → JDBC connection: JDBC access
- JDBC connection → MySQL: connects
