# do-an-lap-trinh-web/web-ban-ve-may-bay architecture

> Architecture diagram of the GitHub repository do-an-lap-trinh-web/web-ban-ve-may-bay, 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/do-an-lap-trinh-web/web-ban-ve-may-bay
- Repository: https://github.com/do-an-lap-trinh-web/web-ban-ve-may-bay

## Overview

This is a Vietnamese airline-ticket booking web application with customer booking, account management, and administration of flight inventory. The principal flow searches available tickets, presents flight and fare details, records a booking, and updates remaining ticket quantity. Authentication and admin management are separate capabilities. The sampled service code supports the search and booking data flows; controller routing and most DAO internals were not shown, so those links are omitted rather than inferred.

Main entry points: [`src/main/java/com/edu/hcmuaf/fit/webbanvemaybay/services/DatVeService.java`](https://github.com/do-an-lap-trinh-web/web-ban-ve-may-bay/blob/main/src/main/java/com/edu/hcmuaf/fit/webbanvemaybay/services/DatVeService.java) (Booking Service), [`src/main/java/com/edu/hcmuaf/fit/webbanvemaybay/services/TimVeService.java`](https://github.com/do-an-lap-trinh-web/web-ban-ve-may-bay/blob/main/src/main/java/com/edu/hcmuaf/fit/webbanvemaybay/services/TimVeService.java) (Search Service), [`src/main/java/com/edu/hcmuaf/fit/webbanvemaybay/services/admin/UserService.java`](https://github.com/do-an-lap-trinh-web/web-ban-ve-may-bay/blob/main/src/main/java/com/edu/hcmuaf/fit/webbanvemaybay/services/admin/UserService.java) (Admin User Service), [`src/main/java/com/edu/hcmuaf/fit/webbanvemaybay/services/auth/UserService.java`](https://github.com/do-an-lap-trinh-web/web-ban-ve-may-bay/blob/main/src/main/java/com/edu/hcmuaf/fit/webbanvemaybay/services/auth/UserService.java) (User Auth Service)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_customer["Customer Booking"]
  node_search["Ticket Search"]
  node_search_service["Search Service<br/>[TimVeService.java]"]
  node_ticket_results["Ticket Results<br/>[VeDto.java]"]
  node_booking_payment["Booking Payment"]
  node_cart_payment["Cart Payment"]
  node_booking_service["Booking Service<br/>[DatVeService.java]"]
  node_booking_record["Booking Record<br/>[DatVe.java]"]
end

subgraph group_identity["Accounts"]
  node_auth_controllers["Authentication"]
  node_auth_service["User Auth Service<br/>[UserService.java]"]
  node_user_model["User Account<br/>[User.java]"]
end

subgraph group_admin["Administration"]
  node_admin_flights["Flight Admin"]
  node_flight_service["Flight Service"]
  node_admin_users["User Admin"]
  node_admin_user_service["Admin User Service<br/>[UserService.java]"]
  node_ticket_admin_service["Ticket Admin Service<br/>[VeService.java]"]
end

subgraph group_data["Services and Data"]
  node_ticket_model["Ticket<br/>[Ve.java]"]
  node_flight_model["Flight<br/>[ChuyenBay.java]"]
  node_flight_number["Flight Number"]
  node_db_context["DB Context<br/>[DBContext.java]"]
  node_user_dao["User DAO<br/>[UserDAO.java]"]
  node_ticket_dao["Ticket DAO<br/>[VeDAO.java]"]
  node_booking_dao["Booking DAO<br/>[VeDaDatDAO.java]"]
end

node_traveler(("Traveler"))

node_traveler -.->|"searches"| node_search
node_search_service -->|"queries tickets"| node_ticket_dao
node_search_service -->|"builds results"| node_ticket_results
node_search_service -->|"uses flight data"| node_flight_model
node_search_service -->|"uses route data"| node_flight_number
node_booking_payment -->|"records booking"| node_booking_service
node_cart_payment -->|"records bookings"| node_booking_service
node_booking_service -->|"stores booking"| node_booking_dao
node_booking_service -->|"updates quantity"| node_ticket_dao
node_booking_service -->|"accepts booking"| node_booking_record
node_auth_service -->|"accesses accounts"| node_user_dao
node_auth_service -->|"uses account data"| node_user_model
node_admin_flights -->|"manages flights"| node_flight_service
node_flight_service -->|"manages flight data"| node_flight_model
node_admin_users -->|"manages users"| node_admin_user_service
node_admin_user_service -->|"accesses accounts"| node_user_dao
node_admin_user_service -->|"updates account data"| node_user_model
node_ticket_admin_service -->|"manages ticket data"| node_ticket_model

click node_search "https://github.com/do-an-lap-trinh-web/web-ban-ve-may-bay/blob/main/src/main/java/com/edu/hcmuaf/fit/webbanvemaybay/controllers/TimVeController.java"
click node_search_service "https://github.com/do-an-lap-trinh-web/web-ban-ve-may-bay/blob/main/src/main/java/com/edu/hcmuaf/fit/webbanvemaybay/services/TimVeService.java"
click node_ticket_results "https://github.com/do-an-lap-trinh-web/web-ban-ve-may-bay/blob/main/src/main/java/com/edu/hcmuaf/fit/webbanvemaybay/models/DTO/VeDto.java"
click node_booking_payment "https://github.com/do-an-lap-trinh-web/web-ban-ve-may-bay/blob/main/src/main/java/com/edu/hcmuaf/fit/webbanvemaybay/controllers/ThanhToanController.java"
click node_cart_payment "https://github.com/do-an-lap-trinh-web/web-ban-ve-may-bay/blob/main/src/main/java/com/edu/hcmuaf/fit/webbanvemaybay/controllers/ThanhToanGioHangController.java"
click node_booking_service "https://github.com/do-an-lap-trinh-web/web-ban-ve-may-bay/blob/main/src/main/java/com/edu/hcmuaf/fit/webbanvemaybay/services/DatVeService.java"
click node_booking_record "https://github.com/do-an-lap-trinh-web/web-ban-ve-may-bay/blob/main/src/main/java/com/edu/hcmuaf/fit/webbanvemaybay/models/DatVe.java"
click node_auth_controllers "https://github.com/do-an-lap-trinh-web/web-ban-ve-may-bay/tree/main/src/main/java/com/edu/hcmuaf/fit/webbanvemaybay/controllers/auth"
click node_auth_service "https://github.com/do-an-lap-trinh-web/web-ban-ve-may-bay/blob/main/src/main/java/com/edu/hcmuaf/fit/webbanvemaybay/services/auth/UserService.java"
click node_user_model "https://github.com/do-an-lap-trinh-web/web-ban-ve-may-bay/blob/main/src/main/java/com/edu/hcmuaf/fit/webbanvemaybay/models/User.java"
click node_admin_flights "https://github.com/do-an-lap-trinh-web/web-ban-ve-may-bay/tree/main/src/main/java/com/edu/hcmuaf/fit/webbanvemaybay/controllers/admin"
click node_flight_service "https://github.com/do-an-lap-trinh-web/web-ban-ve-may-bay/blob/main/src/main/java/com/edu/hcmuaf/fit/webbanvemaybay/services/admin/ChuyenBayService.java"
click node_admin_users "https://github.com/do-an-lap-trinh-web/web-ban-ve-may-bay/tree/main/src/main/java/com/edu/hcmuaf/fit/webbanvemaybay/controllers/admin"
click node_admin_user_service "https://github.com/do-an-lap-trinh-web/web-ban-ve-may-bay/blob/main/src/main/java/com/edu/hcmuaf/fit/webbanvemaybay/services/admin/UserService.java"
click node_ticket_admin_service "https://github.com/do-an-lap-trinh-web/web-ban-ve-may-bay/blob/main/src/main/java/com/edu/hcmuaf/fit/webbanvemaybay/services/admin/VeService.java"
click node_ticket_model "https://github.com/do-an-lap-trinh-web/web-ban-ve-may-bay/blob/main/src/main/java/com/edu/hcmuaf/fit/webbanvemaybay/models/Ve.java"
click node_flight_model "https://github.com/do-an-lap-trinh-web/web-ban-ve-may-bay/blob/main/src/main/java/com/edu/hcmuaf/fit/webbanvemaybay/models/ChuyenBay.java"
click node_flight_number "https://github.com/do-an-lap-trinh-web/web-ban-ve-may-bay/blob/main/src/main/java/com/edu/hcmuaf/fit/webbanvemaybay/models/SoHieuChuyenBay.java"
click node_db_context "https://github.com/do-an-lap-trinh-web/web-ban-ve-may-bay/blob/main/src/main/java/com/edu/hcmuaf/fit/webbanvemaybay/dao/DBContext.java"
click node_user_dao "https://github.com/do-an-lap-trinh-web/web-ban-ve-may-bay/blob/main/src/main/java/com/edu/hcmuaf/fit/webbanvemaybay/dao/UserDAO.java"
click node_ticket_dao "https://github.com/do-an-lap-trinh-web/web-ban-ve-may-bay/blob/main/src/main/java/com/edu/hcmuaf/fit/webbanvemaybay/dao/VeDAO.java"
click node_booking_dao "https://github.com/do-an-lap-trinh-web/web-ban-ve-may-bay/blob/main/src/main/java/com/edu/hcmuaf/fit/webbanvemaybay/dao/VeDaDatDAO.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_search,node_search_service,node_ticket_results,node_booking_payment,node_cart_payment,node_booking_service,node_booking_record toneBlue
class node_auth_controllers,node_auth_service,node_user_model toneAmber
class node_admin_flights,node_flight_service,node_admin_users,node_admin_user_service,node_ticket_admin_service toneMint
class node_ticket_model,node_flight_model,node_flight_number,node_db_context,node_user_dao,node_ticket_dao,node_booking_dao toneRose
class node_traveler toneIndigo
```

## Components

### Customer Booking

- [Ticket Search](https://github.com/do-an-lap-trinh-web/web-ban-ve-may-bay/blob/main/src/main/java/com/edu/hcmuaf/fit/webbanvemaybay/controllers/TimVeController.java): `src/main/java/com/edu/hcmuaf/fit/webbanvemaybay/controllers/TimVeController.java`
- [Search Service](https://github.com/do-an-lap-trinh-web/web-ban-ve-may-bay/blob/main/src/main/java/com/edu/hcmuaf/fit/webbanvemaybay/services/TimVeService.java): `src/main/java/com/edu/hcmuaf/fit/webbanvemaybay/services/TimVeService.java`
- [Ticket Results](https://github.com/do-an-lap-trinh-web/web-ban-ve-may-bay/blob/main/src/main/java/com/edu/hcmuaf/fit/webbanvemaybay/models/DTO/VeDto.java): `src/main/java/com/edu/hcmuaf/fit/webbanvemaybay/models/DTO/VeDto.java`
- [Booking Payment](https://github.com/do-an-lap-trinh-web/web-ban-ve-may-bay/blob/main/src/main/java/com/edu/hcmuaf/fit/webbanvemaybay/controllers/ThanhToanController.java): `src/main/java/com/edu/hcmuaf/fit/webbanvemaybay/controllers/ThanhToanController.java`
- [Cart Payment](https://github.com/do-an-lap-trinh-web/web-ban-ve-may-bay/blob/main/src/main/java/com/edu/hcmuaf/fit/webbanvemaybay/controllers/ThanhToanGioHangController.java): `src/main/java/com/edu/hcmuaf/fit/webbanvemaybay/controllers/ThanhToanGioHangController.java`
- [Booking Service](https://github.com/do-an-lap-trinh-web/web-ban-ve-may-bay/blob/main/src/main/java/com/edu/hcmuaf/fit/webbanvemaybay/services/DatVeService.java): `src/main/java/com/edu/hcmuaf/fit/webbanvemaybay/services/DatVeService.java`
- [Booking Record](https://github.com/do-an-lap-trinh-web/web-ban-ve-may-bay/blob/main/src/main/java/com/edu/hcmuaf/fit/webbanvemaybay/models/DatVe.java): `src/main/java/com/edu/hcmuaf/fit/webbanvemaybay/models/DatVe.java`

### Accounts

- [Authentication](https://github.com/do-an-lap-trinh-web/web-ban-ve-may-bay/tree/main/src/main/java/com/edu/hcmuaf/fit/webbanvemaybay/controllers/auth): `src/main/java/com/edu/hcmuaf/fit/webbanvemaybay/controllers/auth`
- [User Auth Service](https://github.com/do-an-lap-trinh-web/web-ban-ve-may-bay/blob/main/src/main/java/com/edu/hcmuaf/fit/webbanvemaybay/services/auth/UserService.java): `src/main/java/com/edu/hcmuaf/fit/webbanvemaybay/services/auth/UserService.java`
- [User Account](https://github.com/do-an-lap-trinh-web/web-ban-ve-may-bay/blob/main/src/main/java/com/edu/hcmuaf/fit/webbanvemaybay/models/User.java): `src/main/java/com/edu/hcmuaf/fit/webbanvemaybay/models/User.java`

### Administration

- [Flight Admin](https://github.com/do-an-lap-trinh-web/web-ban-ve-may-bay/tree/main/src/main/java/com/edu/hcmuaf/fit/webbanvemaybay/controllers/admin): `src/main/java/com/edu/hcmuaf/fit/webbanvemaybay/controllers/admin`
- [Flight Service](https://github.com/do-an-lap-trinh-web/web-ban-ve-may-bay/blob/main/src/main/java/com/edu/hcmuaf/fit/webbanvemaybay/services/admin/ChuyenBayService.java): `src/main/java/com/edu/hcmuaf/fit/webbanvemaybay/services/admin/ChuyenBayService.java`
- [User Admin](https://github.com/do-an-lap-trinh-web/web-ban-ve-may-bay/tree/main/src/main/java/com/edu/hcmuaf/fit/webbanvemaybay/controllers/admin): `src/main/java/com/edu/hcmuaf/fit/webbanvemaybay/controllers/admin`
- [Admin User Service](https://github.com/do-an-lap-trinh-web/web-ban-ve-may-bay/blob/main/src/main/java/com/edu/hcmuaf/fit/webbanvemaybay/services/admin/UserService.java): `src/main/java/com/edu/hcmuaf/fit/webbanvemaybay/services/admin/UserService.java`
- [Ticket Admin Service](https://github.com/do-an-lap-trinh-web/web-ban-ve-may-bay/blob/main/src/main/java/com/edu/hcmuaf/fit/webbanvemaybay/services/admin/VeService.java): `src/main/java/com/edu/hcmuaf/fit/webbanvemaybay/services/admin/VeService.java`

### Services and Data

- [Ticket](https://github.com/do-an-lap-trinh-web/web-ban-ve-may-bay/blob/main/src/main/java/com/edu/hcmuaf/fit/webbanvemaybay/models/Ve.java): `src/main/java/com/edu/hcmuaf/fit/webbanvemaybay/models/Ve.java`
- [Flight](https://github.com/do-an-lap-trinh-web/web-ban-ve-may-bay/blob/main/src/main/java/com/edu/hcmuaf/fit/webbanvemaybay/models/ChuyenBay.java): `src/main/java/com/edu/hcmuaf/fit/webbanvemaybay/models/ChuyenBay.java`
- [Flight Number](https://github.com/do-an-lap-trinh-web/web-ban-ve-may-bay/blob/main/src/main/java/com/edu/hcmuaf/fit/webbanvemaybay/models/SoHieuChuyenBay.java): `src/main/java/com/edu/hcmuaf/fit/webbanvemaybay/models/SoHieuChuyenBay.java`
- [DB Context](https://github.com/do-an-lap-trinh-web/web-ban-ve-may-bay/blob/main/src/main/java/com/edu/hcmuaf/fit/webbanvemaybay/dao/DBContext.java): `src/main/java/com/edu/hcmuaf/fit/webbanvemaybay/dao/DBContext.java`
- [User DAO](https://github.com/do-an-lap-trinh-web/web-ban-ve-may-bay/blob/main/src/main/java/com/edu/hcmuaf/fit/webbanvemaybay/dao/UserDAO.java): `src/main/java/com/edu/hcmuaf/fit/webbanvemaybay/dao/UserDAO.java`
- [Ticket DAO](https://github.com/do-an-lap-trinh-web/web-ban-ve-may-bay/blob/main/src/main/java/com/edu/hcmuaf/fit/webbanvemaybay/dao/VeDAO.java): `src/main/java/com/edu/hcmuaf/fit/webbanvemaybay/dao/VeDAO.java`
- [Booking DAO](https://github.com/do-an-lap-trinh-web/web-ban-ve-may-bay/blob/main/src/main/java/com/edu/hcmuaf/fit/webbanvemaybay/dao/VeDaDatDAO.java): `src/main/java/com/edu/hcmuaf/fit/webbanvemaybay/dao/VeDaDatDAO.java`

### Other components

- **Traveler**

## Connections

- Traveler → Ticket Search: searches
- Search Service → Ticket DAO: queries tickets (evidence: `src/main/java/com/edu/hcmuaf/fit/webbanvemaybay/services/TimVeService.java`)
- Search Service → Ticket Results: builds results (evidence: `src/main/java/com/edu/hcmuaf/fit/webbanvemaybay/services/TimVeService.java`)
- Search Service → Flight: uses flight data (evidence: `src/main/java/com/edu/hcmuaf/fit/webbanvemaybay/services/TimVeService.java`)
- Search Service → Flight Number: uses route data (evidence: `src/main/java/com/edu/hcmuaf/fit/webbanvemaybay/services/TimVeService.java`)
- Booking Payment → Booking Service: records booking (evidence: `src/main/java/com/edu/hcmuaf/fit/webbanvemaybay/controllers/ThanhToanController.java`)
- Cart Payment → Booking Service: records bookings (evidence: `src/main/java/com/edu/hcmuaf/fit/webbanvemaybay/controllers/ThanhToanGioHangController.java`)
- Booking Service → Booking DAO: stores booking (evidence: `src/main/java/com/edu/hcmuaf/fit/webbanvemaybay/services/DatVeService.java`)
- Booking Service → Ticket DAO: updates quantity (evidence: `src/main/java/com/edu/hcmuaf/fit/webbanvemaybay/services/DatVeService.java`)
- Booking Service → Booking Record: accepts booking (evidence: `src/main/java/com/edu/hcmuaf/fit/webbanvemaybay/services/DatVeService.java`)
- User Auth Service → User DAO: accesses accounts (evidence: `src/main/java/com/edu/hcmuaf/fit/webbanvemaybay/services/auth/UserService.java`)
- User Auth Service → User Account: uses account data (evidence: `src/main/java/com/edu/hcmuaf/fit/webbanvemaybay/services/auth/UserService.java`)
- Flight Admin → Flight Service: manages flights (evidence: `src/main/java/com/edu/hcmuaf/fit/webbanvemaybay/controllers/admin/get/ChuyenBayController.java`)
- Flight Service → Flight: manages flight data (evidence: `src/main/java/com/edu/hcmuaf/fit/webbanvemaybay/services/admin/ChuyenBayService.java`)
- User Admin → Admin User Service: manages users (evidence: `src/main/java/com/edu/hcmuaf/fit/webbanvemaybay/controllers/admin/update/SuaUserController.java`)
- Admin User Service → User DAO: accesses accounts (evidence: `src/main/java/com/edu/hcmuaf/fit/webbanvemaybay/services/admin/UserService.java`)
- Admin User Service → User Account: updates account data (evidence: `src/main/java/com/edu/hcmuaf/fit/webbanvemaybay/services/admin/UserService.java`)
- Ticket Admin Service → Ticket: manages ticket data (evidence: `src/main/java/com/edu/hcmuaf/fit/webbanvemaybay/services/admin/VeService.java`)
