# itpe3200-hord/study-room-booking architecture

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

- Interactive diagram: https://gitdiagram.com/itpe3200-hord/study-room-booking
- Repository: https://github.com/itpe3200-hord/study-room-booking

## Overview

This repository contains a study-room booking product in two application layouts: a server-rendered ASP.NET MVC app and a separate React client with an ASP.NET API. Students browse rooms, check availability, make bookings, and can publish or join open study sessions; accounts and student administration support that workflow. The MVC booking controller’s repository calls and home-page availability queries are visible; the React-to-API wiring and several API subsystems are not sampled, so those links are omitted or marked unverified.

Main entry points: [`study-room-booking/Models/RoomDbContext.cs`](https://github.com/itpe3200-hord/study-room-booking/blob/main/study-room-booking/Models/RoomDbContext.cs) (Entity context), [`Subapp.2/study-room-booking/src/App.tsx`](https://github.com/itpe3200-hord/study-room-booking/blob/main/Subapp.2/study-room-booking/src/App.tsx) (App routing), [`study-room-booking/DAL/RoomRepository.cs`](https://github.com/itpe3200-hord/study-room-booking/blob/main/study-room-booking/DAL/RoomRepository.cs) (Room repository), [`study-room-booking/DAL/StudentRepository.cs`](https://github.com/itpe3200-hord/study-room-booking/blob/main/study-room-booking/DAL/StudentRepository.cs) (Student repository)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_client["React client"]
  node_reactapp["App routing<br/>[App.tsx]"]
  node_homeui["Home page<br/>[HomePage.tsx]"]
  node_roomui["Room browser<br/>[RoomListPage.tsx]"]
  node_loginui["Account pages<br/>[LoginPage.tsx]"]
  node_mypageui["My page<br/>[MyPagePage.tsx]"]
  node_nav["Navigation<br/>[NavMenu.tsx]"]
end

subgraph group_api["HTTP API"]
  node_bookingapi["Booking endpoints"]
  node_roomapi["Room endpoints<br/>[RoomController.cs]"]
  node_studentapi["Student admin"]
  node_accountapi["Account endpoints"]
end

subgraph group_mvc["Server-rendered app"]
  node_mvcbooking["Booking workflow"]
  node_mvchome["Room and session search<br/>[HomeController.cs]"]
  node_mvcaccount["Registration and login"]
  node_mvcrooms["Room management<br/>[RoomController.cs]"]
  node_mvcstudents["Student management"]
end

subgraph group_data["Persistence"]
  node_bookrepo["Booking repository"]
  node_roomrepo["Room repository<br/>[RoomRepository.cs]"]
  node_studentrepo["Student repository"]
end

subgraph group_domain["Domain records"]
  node_context[("Entity context<br/>[RoomDbContext.cs]")]
  node_records["Booking and session records<br/>[StudySession.cs]"]
  node_roomrecord["Room record<br/>[Room.cs]"]
  node_studentrecord["Student record<br/>[Student.cs]"]
end

node_student(("Student"))

node_student -->|"uses"| node_reactapp
node_reactapp -->|"routes to"| node_homeui
node_reactapp -->|"routes to"| node_roomui
node_reactapp -->|"routes to"| node_loginui
node_reactapp -->|"routes to"| node_mypageui
node_reactapp -->|"renders"| node_nav
node_homeui -.->|"requests data"| node_bookingapi
node_roomui -.->|"requests data"| node_roomapi
node_loginui -.->|"submits credentials"| node_accountapi
node_mypageui -.->|"requests profile"| node_studentapi
node_student -->|"books rooms"| node_mvcbooking
node_mvcbooking -->|"checks and saves"| node_bookrepo
node_mvcbooking -->|"loads rooms"| node_roomrepo
node_mvchome -->|"queries rooms and sessions"| node_context
node_mvcrooms -->|"manages rooms"| node_roomrepo
node_mvcstudents -->|"manages students"| node_studentrepo
node_mvcaccount -->|"creates profile"| node_studentrepo
node_bookrepo -.->|"persists bookings"| node_context
node_roomrepo -.->|"persists rooms"| node_context
node_studentrepo -.->|"persists students"| node_context
node_context -.->|"stores"| node_records
node_context -.->|"stores"| node_roomrecord
node_context -.->|"stores"| node_studentrecord
node_student -->|"searches availability"| node_mvchome
node_student -->|"registers or signs in"| node_mvcaccount
node_bookingapi -->|"uses repository"| node_bookrepo
node_roomapi -->|"uses repository"| node_roomrepo
node_studentapi -->|"uses repository"| node_studentrepo

click node_reactapp "https://github.com/itpe3200-hord/study-room-booking/blob/main/Subapp.2/study-room-booking/src/App.tsx"
click node_homeui "https://github.com/itpe3200-hord/study-room-booking/blob/main/Subapp.2/study-room-booking/src/home/HomePage.tsx"
click node_roomui "https://github.com/itpe3200-hord/study-room-booking/blob/main/Subapp.2/study-room-booking/src/rooms/RoomListPage.tsx"
click node_loginui "https://github.com/itpe3200-hord/study-room-booking/blob/main/Subapp.2/study-room-booking/src/account/LoginPage.tsx"
click node_mypageui "https://github.com/itpe3200-hord/study-room-booking/blob/main/Subapp.2/study-room-booking/src/account/MyPagePage.tsx"
click node_nav "https://github.com/itpe3200-hord/study-room-booking/blob/main/Subapp.2/study-room-booking/src/shared/NavMenu.tsx"
click node_bookingapi "https://github.com/itpe3200-hord/study-room-booking/blob/main/Subapp.2/api/Controllers/BookingController.cs"
click node_roomapi "https://github.com/itpe3200-hord/study-room-booking/blob/main/Subapp.2/api/Controllers/RoomController.cs"
click node_studentapi "https://github.com/itpe3200-hord/study-room-booking/blob/main/Subapp.2/api/Controllers/StudentController.cs"
click node_accountapi "https://github.com/itpe3200-hord/study-room-booking/blob/main/Subapp.2/api/Controllers/AccountController.cs"
click node_mvcbooking "https://github.com/itpe3200-hord/study-room-booking/blob/main/study-room-booking/Controllers/BookingController.cs"
click node_mvchome "https://github.com/itpe3200-hord/study-room-booking/blob/main/study-room-booking/Controllers/HomeController.cs"
click node_mvcaccount "https://github.com/itpe3200-hord/study-room-booking/blob/main/study-room-booking/Controllers/AccountController.cs"
click node_mvcrooms "https://github.com/itpe3200-hord/study-room-booking/blob/main/study-room-booking/Controllers/RoomController.cs"
click node_mvcstudents "https://github.com/itpe3200-hord/study-room-booking/blob/main/study-room-booking/Controllers/StudentController.cs"
click node_bookrepo "https://github.com/itpe3200-hord/study-room-booking/blob/main/study-room-booking/DAL/BookingRepository.cs"
click node_roomrepo "https://github.com/itpe3200-hord/study-room-booking/blob/main/study-room-booking/DAL/RoomRepository.cs"
click node_studentrepo "https://github.com/itpe3200-hord/study-room-booking/blob/main/study-room-booking/DAL/StudentRepository.cs"
click node_context "https://github.com/itpe3200-hord/study-room-booking/blob/main/study-room-booking/Models/RoomDbContext.cs"
click node_records "https://github.com/itpe3200-hord/study-room-booking/blob/main/study-room-booking/Models/StudySession.cs"
click node_roomrecord "https://github.com/itpe3200-hord/study-room-booking/blob/main/study-room-booking/Models/Room.cs"
click node_studentrecord "https://github.com/itpe3200-hord/study-room-booking/blob/main/study-room-booking/Models/Student.cs"

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_reactapp,node_homeui,node_roomui,node_loginui,node_mypageui,node_nav toneBlue
class node_bookingapi,node_roomapi,node_studentapi,node_accountapi toneAmber
class node_mvcbooking,node_mvchome,node_mvcaccount,node_mvcrooms,node_mvcstudents toneMint
class node_bookrepo,node_roomrepo,node_studentrepo toneRose
class node_context,node_records,node_roomrecord,node_studentrecord,node_student toneIndigo
```

## Components

### React client

- [App routing](https://github.com/itpe3200-hord/study-room-booking/blob/main/Subapp.2/study-room-booking/src/App.tsx): `Subapp.2/study-room-booking/src/App.tsx`
- [Home page](https://github.com/itpe3200-hord/study-room-booking/blob/main/Subapp.2/study-room-booking/src/home/HomePage.tsx): `Subapp.2/study-room-booking/src/home/HomePage.tsx`
- [Room browser](https://github.com/itpe3200-hord/study-room-booking/blob/main/Subapp.2/study-room-booking/src/rooms/RoomListPage.tsx): `Subapp.2/study-room-booking/src/rooms/RoomListPage.tsx`
- [Account pages](https://github.com/itpe3200-hord/study-room-booking/blob/main/Subapp.2/study-room-booking/src/account/LoginPage.tsx): `Subapp.2/study-room-booking/src/account/LoginPage.tsx`
- [My page](https://github.com/itpe3200-hord/study-room-booking/blob/main/Subapp.2/study-room-booking/src/account/MyPagePage.tsx): `Subapp.2/study-room-booking/src/account/MyPagePage.tsx`
- [Navigation](https://github.com/itpe3200-hord/study-room-booking/blob/main/Subapp.2/study-room-booking/src/shared/NavMenu.tsx): `Subapp.2/study-room-booking/src/shared/NavMenu.tsx`

### HTTP API

- [Booking endpoints](https://github.com/itpe3200-hord/study-room-booking/blob/main/Subapp.2/api/Controllers/BookingController.cs): `Subapp.2/api/Controllers/BookingController.cs`
- [Room endpoints](https://github.com/itpe3200-hord/study-room-booking/blob/main/Subapp.2/api/Controllers/RoomController.cs): `Subapp.2/api/Controllers/RoomController.cs`
- [Student admin](https://github.com/itpe3200-hord/study-room-booking/blob/main/Subapp.2/api/Controllers/StudentController.cs): `Subapp.2/api/Controllers/StudentController.cs`
- [Account endpoints](https://github.com/itpe3200-hord/study-room-booking/blob/main/Subapp.2/api/Controllers/AccountController.cs): `Subapp.2/api/Controllers/AccountController.cs`

### Server-rendered app

- [Booking workflow](https://github.com/itpe3200-hord/study-room-booking/blob/main/study-room-booking/Controllers/BookingController.cs): `study-room-booking/Controllers/BookingController.cs`
- [Room and session search](https://github.com/itpe3200-hord/study-room-booking/blob/main/study-room-booking/Controllers/HomeController.cs): `study-room-booking/Controllers/HomeController.cs`
- [Registration and login](https://github.com/itpe3200-hord/study-room-booking/blob/main/study-room-booking/Controllers/AccountController.cs): `study-room-booking/Controllers/AccountController.cs`
- [Room management](https://github.com/itpe3200-hord/study-room-booking/blob/main/study-room-booking/Controllers/RoomController.cs): `study-room-booking/Controllers/RoomController.cs`
- [Student management](https://github.com/itpe3200-hord/study-room-booking/blob/main/study-room-booking/Controllers/StudentController.cs): `study-room-booking/Controllers/StudentController.cs`

### Persistence

- [Booking repository](https://github.com/itpe3200-hord/study-room-booking/blob/main/study-room-booking/DAL/BookingRepository.cs): `study-room-booking/DAL/BookingRepository.cs`
- [Room repository](https://github.com/itpe3200-hord/study-room-booking/blob/main/study-room-booking/DAL/RoomRepository.cs): `study-room-booking/DAL/RoomRepository.cs`
- [Student repository](https://github.com/itpe3200-hord/study-room-booking/blob/main/study-room-booking/DAL/StudentRepository.cs): `study-room-booking/DAL/StudentRepository.cs`

### Domain records

- [Entity context](https://github.com/itpe3200-hord/study-room-booking/blob/main/study-room-booking/Models/RoomDbContext.cs): `study-room-booking/Models/RoomDbContext.cs`
- [Booking and session records](https://github.com/itpe3200-hord/study-room-booking/blob/main/study-room-booking/Models/StudySession.cs): `study-room-booking/Models/StudySession.cs`
- [Room record](https://github.com/itpe3200-hord/study-room-booking/blob/main/study-room-booking/Models/Room.cs): `study-room-booking/Models/Room.cs`
- [Student record](https://github.com/itpe3200-hord/study-room-booking/blob/main/study-room-booking/Models/Student.cs): `study-room-booking/Models/Student.cs`

### Other components

- **Student**

## Connections

- Student → App routing: uses (evidence: `Subapp.2/study-room-booking/src/App.tsx`)
- App routing → Home page: routes to (evidence: `Subapp.2/study-room-booking/src/App.tsx`)
- App routing → Room browser: routes to (evidence: `Subapp.2/study-room-booking/src/App.tsx`)
- App routing → Account pages: routes to (evidence: `Subapp.2/study-room-booking/src/App.tsx`)
- App routing → My page: routes to (evidence: `Subapp.2/study-room-booking/src/App.tsx`)
- App routing → Navigation: renders (evidence: `Subapp.2/study-room-booking/src/App.tsx`)
- Home page → Booking endpoints: requests data
- Room browser → Room endpoints: requests data
- Account pages → Account endpoints: submits credentials
- My page → Student admin: requests profile
- Student → Booking workflow: books rooms (evidence: `study-room-booking/Controllers/BookingController.cs`)
- Booking workflow → Booking repository: checks and saves (evidence: `study-room-booking/Controllers/BookingController.cs`)
- Booking workflow → Room repository: loads rooms (evidence: `study-room-booking/Controllers/BookingController.cs`)
- Room and session search → Entity context: queries rooms and sessions (evidence: `study-room-booking/Controllers/HomeController.cs`)
- Room management → Room repository: manages rooms (evidence: `study-room-booking/Controllers/RoomController.cs`)
- Student management → Student repository: manages students (evidence: `study-room-booking/Controllers/StudentController.cs`)
- Registration and login → Student repository: creates profile (evidence: `study-room-booking/Controllers/AccountController.cs`)
- Booking repository → Entity context: persists bookings
- Room repository → Entity context: persists rooms
- Student repository → Entity context: persists students
- Entity context → Booking and session records: stores
- Entity context → Room record: stores
- Entity context → Student record: stores
- Student → Room and session search: searches availability (evidence: `study-room-booking/Controllers/HomeController.cs`)
- Student → Registration and login: registers or signs in (evidence: `study-room-booking/Controllers/AccountController.cs`)
- Booking endpoints → Booking repository: uses repository (evidence: `Subapp.2/api/Controllers/BookingController.cs`)
- Room endpoints → Room repository: uses repository (evidence: `Subapp.2/api/Controllers/RoomController.cs`)
- Student admin → Student repository: uses repository (evidence: `Subapp.2/api/Controllers/StudentController.cs`)
