# thienda-blockchain/24ct1-duongthienda architecture

> Architecture diagram of the GitHub repository thienda-blockchain/24ct1-duongthienda, 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/thienda-blockchain/24ct1-duongthienda
- Repository: https://github.com/thienda-blockchain/24ct1-duongthienda

## Overview

This is a football-pitch booking and operations app for Tuyên Sơn. Players check daily availability, create a booking, submit payment evidence, and review booking history; staff and owners manage bookings and reconcile payment. Registration and login support the user journey, while a seed endpoint initializes staff accounts and pitch data. The sampled routes establish the main API-to-model calls; other pages and model behavior are represented only where supported by the tree or excerpts.

Main entry points: [`lib/mongodb.ts`](https://github.com/thienda-blockchain/24ct1-duongthienda/blob/main/lib/mongodb.ts) (Mongo connection), [`app/api/auth/login/route.ts`](https://github.com/thienda-blockchain/24ct1-duongthienda/blob/main/app/api/auth/login/route.ts) (Login API), [`app/api/fields/availability/route.ts`](https://github.com/thienda-blockchain/24ct1-duongthienda/blob/main/app/api/fields/availability/route.ts) (Availability API), [`app/api/bookings/route.ts`](https://github.com/thienda-blockchain/24ct1-duongthienda/blob/main/app/api/bookings/route.ts) (Create booking API)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_customer["Player experience"]
  node_home["Availability and booking<br/>[page.tsx]"]
  node_register["Registration<br/>[page.tsx]"]
  node_login["Login<br/>[page.tsx]"]
  node_history["Booking history<br/>[page.tsx]"]
end

subgraph group_operations["Venue operations"]
  node_admin["Operations dashboard<br/>[page.tsx]"]
end

subgraph group_backend["Application backend"]
  node_register_api["Registration API<br/>[route.ts]"]
  node_login_api["Login API<br/>[route.ts]"]
  node_availability_api["Availability API<br/>[route.ts]"]
  node_booking_api["Create booking API<br/>[route.ts]"]
  node_history_api["Booking history API<br/>[route.ts]"]
  node_update_booking_api["Booking update API<br/>[route.ts]"]
  node_seed_api["Venue initialization<br/>[route.ts]"]
end

subgraph group_persistence["Persistence"]
  node_db_connection["Mongo connection<br/>[mongodb.ts]"]
  node_user_model["User model<br/>[User.ts]"]
  node_field_model["Field model<br/>[Field.ts]"]
  node_booking_model["Booking model<br/>[Booking.ts]"]
end

node_visitor(("Player"))
node_staff(("Staff / owner"))
node_mongo[("MongoDB")]
node_bcrypt["bcryptjs"]
node_jwt["jsonwebtoken"]

node_visitor -->|"browses and books"| node_home
node_visitor -->|"creates account"| node_register
node_visitor -->|"signs in"| node_login
node_visitor -->|"reviews bookings"| node_history
node_staff -->|"manages venue"| node_admin
node_home -->|"requests availability"| node_availability_api
node_home -->|"submits booking"| node_booking_api
node_register -->|"submits registration"| node_register_api
node_login -->|"submits credentials"| node_login_api
node_history -->|"loads bookings"| node_history_api
node_admin -->|"loads daily schedule"| node_availability_api
node_admin -->|"records walk-in"| node_booking_api
node_admin -->|"updates booking"| node_update_booking_api
node_register_api -->|"connects"| node_db_connection
node_register_api -->|"checks and creates"| node_user_model
node_register_api -->|"hashes password"| node_bcrypt
node_login_api -->|"connects"| node_db_connection
node_login_api -->|"finds user"| node_user_model
node_login_api -->|"compares password"| node_bcrypt
node_login_api -->|"signs token"| node_jwt
node_availability_api -->|"connects"| node_db_connection
node_availability_api -->|"reads field"| node_field_model
node_availability_api -->|"reads bookings"| node_booking_model
node_booking_api -->|"connects"| node_db_connection
node_booking_api -->|"reads field"| node_field_model
node_booking_api -->|"checks and creates"| node_booking_model
node_history_api -->|"connects"| node_db_connection
node_history_api -->|"reads field"| node_field_model
node_history_api -->|"reads bookings"| node_booking_model
node_update_booking_api -->|"connects"| node_db_connection
node_update_booking_api -->|"updates booking"| node_booking_model
node_seed_api -->|"connects"| node_db_connection
node_seed_api -->|"creates or updates"| node_user_model
node_seed_api -->|"creates or updates"| node_field_model
node_seed_api -->|"hashes passwords"| node_bcrypt
node_db_connection -->|"connects"| node_mongo

click node_home "https://github.com/thienda-blockchain/24ct1-duongthienda/blob/main/app/page.tsx"
click node_register "https://github.com/thienda-blockchain/24ct1-duongthienda/blob/main/app/register/page.tsx"
click node_login "https://github.com/thienda-blockchain/24ct1-duongthienda/blob/main/app/login/page.tsx"
click node_history "https://github.com/thienda-blockchain/24ct1-duongthienda/blob/main/app/my-bookings/page.tsx"
click node_admin "https://github.com/thienda-blockchain/24ct1-duongthienda/blob/main/app/admin/page.tsx"
click node_register_api "https://github.com/thienda-blockchain/24ct1-duongthienda/blob/main/app/api/auth/register/route.ts"
click node_login_api "https://github.com/thienda-blockchain/24ct1-duongthienda/blob/main/app/api/auth/login/route.ts"
click node_availability_api "https://github.com/thienda-blockchain/24ct1-duongthienda/blob/main/app/api/fields/availability/route.ts"
click node_booking_api "https://github.com/thienda-blockchain/24ct1-duongthienda/blob/main/app/api/bookings/route.ts"
click node_history_api "https://github.com/thienda-blockchain/24ct1-duongthienda/blob/main/app/api/bookings/my-bookings/route.ts"
click node_update_booking_api "https://github.com/thienda-blockchain/24ct1-duongthienda/blob/main/app/api/bookings/%5Bid%5D/route.ts"
click node_seed_api "https://github.com/thienda-blockchain/24ct1-duongthienda/blob/main/app/api/seed/route.ts"
click node_db_connection "https://github.com/thienda-blockchain/24ct1-duongthienda/blob/main/lib/mongodb.ts"
click node_user_model "https://github.com/thienda-blockchain/24ct1-duongthienda/blob/main/models/User.ts"
click node_field_model "https://github.com/thienda-blockchain/24ct1-duongthienda/blob/main/models/Field.ts"
click node_booking_model "https://github.com/thienda-blockchain/24ct1-duongthienda/blob/main/models/Booking.ts"

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_home,node_register,node_login,node_history toneBlue
class node_admin,node_mongo toneAmber
class node_register_api,node_login_api,node_availability_api,node_booking_api,node_history_api,node_update_booking_api,node_seed_api toneMint
class node_db_connection,node_user_model,node_field_model,node_booking_model toneRose
class node_visitor,node_staff,node_bcrypt,node_jwt toneIndigo
```

## Components

### Player experience

- [Availability and booking](https://github.com/thienda-blockchain/24ct1-duongthienda/blob/main/app/page.tsx): `app/page.tsx`
- [Registration](https://github.com/thienda-blockchain/24ct1-duongthienda/blob/main/app/register/page.tsx): `app/register/page.tsx`
- [Login](https://github.com/thienda-blockchain/24ct1-duongthienda/blob/main/app/login/page.tsx): `app/login/page.tsx`
- [Booking history](https://github.com/thienda-blockchain/24ct1-duongthienda/blob/main/app/my-bookings/page.tsx): `app/my-bookings/page.tsx`

### Venue operations

- [Operations dashboard](https://github.com/thienda-blockchain/24ct1-duongthienda/blob/main/app/admin/page.tsx): `app/admin/page.tsx`

### Application backend

- [Registration API](https://github.com/thienda-blockchain/24ct1-duongthienda/blob/main/app/api/auth/register/route.ts): `app/api/auth/register/route.ts`
- [Login API](https://github.com/thienda-blockchain/24ct1-duongthienda/blob/main/app/api/auth/login/route.ts): `app/api/auth/login/route.ts`
- [Availability API](https://github.com/thienda-blockchain/24ct1-duongthienda/blob/main/app/api/fields/availability/route.ts): `app/api/fields/availability/route.ts`
- [Create booking API](https://github.com/thienda-blockchain/24ct1-duongthienda/blob/main/app/api/bookings/route.ts): `app/api/bookings/route.ts`
- [Booking history API](https://github.com/thienda-blockchain/24ct1-duongthienda/blob/main/app/api/bookings/my-bookings/route.ts): `app/api/bookings/my-bookings/route.ts`
- [Booking update API](https://github.com/thienda-blockchain/24ct1-duongthienda/blob/main/app/api/bookings/%5Bid%5D/route.ts): `app/api/bookings/[id]/route.ts`
- [Venue initialization](https://github.com/thienda-blockchain/24ct1-duongthienda/blob/main/app/api/seed/route.ts): `app/api/seed/route.ts`

### Persistence

- [Mongo connection](https://github.com/thienda-blockchain/24ct1-duongthienda/blob/main/lib/mongodb.ts): `lib/mongodb.ts`
- [User model](https://github.com/thienda-blockchain/24ct1-duongthienda/blob/main/models/User.ts): `models/User.ts`
- [Field model](https://github.com/thienda-blockchain/24ct1-duongthienda/blob/main/models/Field.ts): `models/Field.ts`
- [Booking model](https://github.com/thienda-blockchain/24ct1-duongthienda/blob/main/models/Booking.ts): `models/Booking.ts`

### Other components

- **Player**
- **Staff / owner**
- **MongoDB**
- **bcryptjs**
- **jsonwebtoken**

## Connections

- Player → Availability and booking: browses and books
- Player → Registration: creates account
- Player → Login: signs in
- Player → Booking history: reviews bookings
- Staff / owner → Operations dashboard: manages venue
- Availability and booking → Availability API: requests availability
- Availability and booking → Create booking API: submits booking
- Registration → Registration API: submits registration
- Login → Login API: submits credentials
- Booking history → Booking history API: loads bookings
- Operations dashboard → Availability API: loads daily schedule
- Operations dashboard → Create booking API: records walk-in
- Operations dashboard → Booking update API: updates booking
- Registration API → Mongo connection: connects
- Registration API → User model: checks and creates
- Registration API → bcryptjs: hashes password
- Login API → Mongo connection: connects
- Login API → User model: finds user
- Login API → bcryptjs: compares password
- Login API → jsonwebtoken: signs token
- Availability API → Mongo connection: connects
- Availability API → Field model: reads field
- Availability API → Booking model: reads bookings
- Create booking API → Mongo connection: connects
- Create booking API → Field model: reads field
- Create booking API → Booking model: checks and creates
- Booking history API → Mongo connection: connects
- Booking history API → Field model: reads field
- Booking history API → Booking model: reads bookings
- Booking update API → Mongo connection: connects
- Booking update API → Booking model: updates booking
- Venue initialization → Mongo connection: connects
- Venue initialization → User model: creates or updates
- Venue initialization → Field model: creates or updates
- Venue initialization → bcryptjs: hashes passwords
- Mongo connection → MongoDB: connects
