# curteinnn/classroom-booking architecture

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

- Interactive diagram: https://gitdiagram.com/curteinnn/classroom-booking
- Repository: https://github.com/curteinnn/classroom-booking

## Overview

Classroom Booking is a web application for signing in, browsing classroom availability, and managing users, rooms, and reservations. The demonstrated workflow is browser login → React login page → REST server and user route → user controller → MySQL; room and booking management are documented API capabilities, with booking time/conflict validation and status updates handled in the booking controller. The frontend’s Home and Rooms implementations were not sampled, so their API wiring is not inferred; the README documents broader CRUD capabilities than the inspected controller excerpts establish.

Main entry points: [`backend/src/server.js`](https://github.com/curteinnn/classroom-booking/blob/main/backend/src/server.js) (HTTP server), [`backend/src/config/database.js`](https://github.com/curteinnn/classroom-booking/blob/main/backend/src/config/database.js) (MySQL client), [`frontend/src/App.jsx`](https://github.com/curteinnn/classroom-booking/blob/main/frontend/src/App.jsx) (Route selection), [`frontend/src/pages/Login.jsx`](https://github.com/curteinnn/classroom-booking/blob/main/frontend/src/pages/Login.jsx) (Login page)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_frontend["Web interface"]
  node_login["Login page<br/>[Login.jsx]"]
  node_home["Home page<br/>[Home.jsx]"]
  node_rooms_page["Rooms page<br/>[Rooms.jsx]"]
  node_app["Route selection<br/>[App.jsx]"]
end

subgraph group_api["REST API"]
  node_server["HTTP server<br/>[server.js]"]
  node_user_routes["User routes<br/>[userRoutes.js]"]
  node_room_routes["Room routes<br/>[roomRoutes.js]"]
  node_booking_routes["Booking routes<br/>[bookingRoutes.js]"]
end

subgraph group_domain["Domain operations"]
  node_user_ops["User operations<br/>[userController.js]"]
  node_room_ops["Room operations<br/>[roomController.js]"]
  node_booking_ops["Booking operations"]
end

subgraph group_persistence["Persistence"]
  node_db_client["MySQL client<br/>[database.js]"]
end

node_visitor(("User"))
node_mysql[("MySQL database")]

node_visitor -->|"uses"| node_app
node_app -->|"routes"| node_login
node_app -->|"routes"| node_home
node_login -->|"POST login"| node_server
node_server -->|"mounts"| node_user_routes
node_server -->|"mounts"| node_room_routes
node_server -->|"mounts"| node_booking_routes
node_user_routes -->|"dispatches"| node_user_ops
node_room_routes -->|"dispatches"| node_room_ops
node_booking_routes -->|"dispatches"| node_booking_ops
node_user_ops -->|"queries"| node_db_client
node_room_ops -->|"queries"| node_db_client
node_booking_ops -->|"queries"| node_db_client
node_db_client -->|"connects"| node_mysql

click node_login "https://github.com/curteinnn/classroom-booking/blob/main/frontend/src/pages/Login.jsx"
click node_home "https://github.com/curteinnn/classroom-booking/blob/main/frontend/src/pages/Home.jsx"
click node_rooms_page "https://github.com/curteinnn/classroom-booking/blob/main/frontend/src/pages/Rooms.jsx"
click node_app "https://github.com/curteinnn/classroom-booking/blob/main/frontend/src/App.jsx"
click node_server "https://github.com/curteinnn/classroom-booking/blob/main/backend/src/server.js"
click node_user_routes "https://github.com/curteinnn/classroom-booking/blob/main/backend/src/routes/userRoutes.js"
click node_room_routes "https://github.com/curteinnn/classroom-booking/blob/main/backend/src/routes/roomRoutes.js"
click node_booking_routes "https://github.com/curteinnn/classroom-booking/blob/main/backend/src/routes/bookingRoutes.js"
click node_user_ops "https://github.com/curteinnn/classroom-booking/blob/main/backend/src/controllers/userController.js"
click node_room_ops "https://github.com/curteinnn/classroom-booking/blob/main/backend/src/controllers/roomController.js"
click node_booking_ops "https://github.com/curteinnn/classroom-booking/blob/main/backend/src/controllers/bookingController.js"
click node_db_client "https://github.com/curteinnn/classroom-booking/blob/main/backend/src/config/database.js"

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_login,node_home,node_rooms_page,node_app,node_visitor toneBlue
class node_server,node_user_routes,node_room_routes,node_booking_routes,node_mysql toneAmber
class node_user_ops,node_room_ops,node_booking_ops toneMint
class node_db_client toneRose
```

## Components

### Web interface

- [Login page](https://github.com/curteinnn/classroom-booking/blob/main/frontend/src/pages/Login.jsx): `frontend/src/pages/Login.jsx`
- [Home page](https://github.com/curteinnn/classroom-booking/blob/main/frontend/src/pages/Home.jsx): `frontend/src/pages/Home.jsx`
- [Rooms page](https://github.com/curteinnn/classroom-booking/blob/main/frontend/src/pages/Rooms.jsx): `frontend/src/pages/Rooms.jsx`
- [Route selection](https://github.com/curteinnn/classroom-booking/blob/main/frontend/src/App.jsx): `frontend/src/App.jsx`

### REST API

- [HTTP server](https://github.com/curteinnn/classroom-booking/blob/main/backend/src/server.js): `backend/src/server.js`
- [User routes](https://github.com/curteinnn/classroom-booking/blob/main/backend/src/routes/userRoutes.js): `backend/src/routes/userRoutes.js`
- [Room routes](https://github.com/curteinnn/classroom-booking/blob/main/backend/src/routes/roomRoutes.js): `backend/src/routes/roomRoutes.js`
- [Booking routes](https://github.com/curteinnn/classroom-booking/blob/main/backend/src/routes/bookingRoutes.js): `backend/src/routes/bookingRoutes.js`

### Domain operations

- [User operations](https://github.com/curteinnn/classroom-booking/blob/main/backend/src/controllers/userController.js): `backend/src/controllers/userController.js`
- [Room operations](https://github.com/curteinnn/classroom-booking/blob/main/backend/src/controllers/roomController.js): `backend/src/controllers/roomController.js`
- [Booking operations](https://github.com/curteinnn/classroom-booking/blob/main/backend/src/controllers/bookingController.js): `backend/src/controllers/bookingController.js`

### Persistence

- [MySQL client](https://github.com/curteinnn/classroom-booking/blob/main/backend/src/config/database.js): `backend/src/config/database.js`

### Other components

- **User**
- **MySQL database**

## Connections

- User → Route selection: uses
- Route selection → Login page: routes
- Route selection → Home page: routes
- Login page → HTTP server: POST login
- HTTP server → User routes: mounts
- HTTP server → Room routes: mounts
- HTTP server → Booking routes: mounts
- User routes → User operations: dispatches
- Room routes → Room operations: dispatches
- Booking routes → Booking operations: dispatches
- User operations → MySQL client: queries
- Room operations → MySQL client: queries
- Booking operations → MySQL client: queries
- MySQL client → MySQL database: connects
