# nourchene-hamrita/bookingapp architecture

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

- Interactive diagram: https://gitdiagram.com/nourchene-hamrita/bookingapp
- Repository: https://github.com/nourchene-hamrita/bookingapp

## Overview

This is a hotel-booking application with a public customer client, an administrative dashboard, and an Express/Mongoose API. Customers can browse listings and hotel details and access login/registration; administrators manage users, hotels, and rooms behind a login gate. The API exposes authentication, user, hotel, and room route groups, while sampled controllers show credential handling and model access. The route and page implementations were not sampled, so uncertain page-to-fetch and route-to-controller wiring is omitted.

Main entry points: [`admin/src/App.js`](https://github.com/nourchene-hamrita/bookingapp/blob/master/admin/src/App.js) (Admin router), [`api/index.js`](https://github.com/nourchene-hamrita/bookingapp/blob/master/api/index.js) (API server), [`client/src/App.js`](https://github.com/nourchene-hamrita/bookingapp/blob/master/client/src/App.js) (Client router), [`api/models/User.js`](https://github.com/nourchene-hamrita/bookingapp/blob/master/api/models/User.js) (User model)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_client["Booking client"]
  node_clientapp["Client router<br/>[App.js]"]
  node_home["Home browse<br/>[Home.jsx]"]
  node_listing["Hotel search<br/>[List.jsx]"]
  node_hotelview["Hotel details<br/>[Hotel.jsx]"]
  node_clientauth["Login/register<br/>[login.jsx]"]
  node_searchstate["Search state<br/>[SearchContext.js]"]
  node_clientfetch["Client fetch hook<br/>[useFetch.js]"]
end

subgraph group_admin["Admin dashboard"]
  node_adminapp["Admin router<br/>[App.js]"]
  node_adminlogin["Admin login<br/>[Login.jsx]"]
  node_adminhome["Admin overview<br/>[Home.jsx]"]
  node_adminlist["Manage records<br/>[List.jsx]"]
  node_adminnewhotel["Create hotel<br/>[NewHotel.jsx]"]
  node_adminnewroom["Create room<br/>[NewRoom.jsx]"]
  node_adminfetch["Admin fetch hook<br/>[useFetch.js]"]
  node_authstate["Admin auth state<br/>[AuthContext.js]"]
end

subgraph group_api["Backend API"]
  node_server["API server<br/>[index.js]"]
  node_authroutes["Auth routes<br/>[auth.js]"]
  node_userroutes["User routes<br/>[users.js]"]
  node_hotelroutes["Hotel routes<br/>[hotels.js]"]
  node_roomroutes["Room routes<br/>[rooms.js]"]
  node_authcontroller["Auth controller<br/>[auth.js]"]
  node_usercontroller["User controller<br/>[user.js]"]
  node_hotelcontroller["Hotel controller<br/>[hotel.js]"]
  node_roomcontroller["Room controller<br/>[room.js]"]
end

subgraph group_data["MongoDB models"]
  node_usermodel[("User model<br/>[User.js]")]
  node_hotelmodel[("Hotel model<br/>[Hotel.js]")]
  node_roommodel[("Room model<br/>[Room.js]")]
end

node_customer(("Customer"))
node_adminuser(("Administrator"))
node_mongo[("MongoDB")]

node_customer -->|"uses"| node_clientapp
node_clientapp -->|"routes"| node_home
node_clientapp -->|"routes"| node_listing
node_clientapp -->|"routes"| node_hotelview
node_clientapp -->|"routes"| node_clientauth
node_adminuser -->|"uses"| node_adminapp
node_adminapp -->|"routes"| node_adminlogin
node_adminapp -->|"routes"| node_adminhome
node_adminapp -->|"routes"| node_adminlist
node_adminapp -->|"routes"| node_adminnewhotel
node_adminapp -->|"routes"| node_adminnewroom
node_adminapp -->|"checks access"| node_authstate
node_server -->|"mounts"| node_authroutes
node_server -->|"mounts"| node_userroutes
node_server -->|"mounts"| node_hotelroutes
node_server -->|"mounts"| node_roomroutes
node_server -->|"connects"| node_mongo
node_authcontroller -->|"reads/writes"| node_usermodel
node_usercontroller -->|"accesses"| node_usermodel
node_hotelcontroller -->|"accesses"| node_hotelmodel
node_roomcontroller -->|"accesses"| node_roommodel
node_usermodel -->|"persists"| node_mongo
node_hotelmodel -->|"persists"| node_mongo
node_roommodel -->|"persists"| node_mongo

click node_clientapp "https://github.com/nourchene-hamrita/bookingapp/blob/master/client/src/App.js"
click node_home "https://github.com/nourchene-hamrita/bookingapp/blob/master/client/src/pages/home/Home.jsx"
click node_listing "https://github.com/nourchene-hamrita/bookingapp/blob/master/client/src/pages/list/List.jsx"
click node_hotelview "https://github.com/nourchene-hamrita/bookingapp/blob/master/client/src/pages/hotel/Hotel.jsx"
click node_clientauth "https://github.com/nourchene-hamrita/bookingapp/blob/master/client/src/pages/login/login.jsx"
click node_searchstate "https://github.com/nourchene-hamrita/bookingapp/blob/master/client/src/context/SearchContext.js"
click node_clientfetch "https://github.com/nourchene-hamrita/bookingapp/blob/master/client/src/hooks/useFetch.js"
click node_adminapp "https://github.com/nourchene-hamrita/bookingapp/blob/master/admin/src/App.js"
click node_adminlogin "https://github.com/nourchene-hamrita/bookingapp/blob/master/admin/src/pages/login/Login.jsx"
click node_adminhome "https://github.com/nourchene-hamrita/bookingapp/blob/master/admin/src/pages/home/Home.jsx"
click node_adminlist "https://github.com/nourchene-hamrita/bookingapp/blob/master/admin/src/pages/list/List.jsx"
click node_adminnewhotel "https://github.com/nourchene-hamrita/bookingapp/blob/master/admin/src/pages/newHotel/NewHotel.jsx"
click node_adminnewroom "https://github.com/nourchene-hamrita/bookingapp/blob/master/admin/src/pages/newRoom/NewRoom.jsx"
click node_adminfetch "https://github.com/nourchene-hamrita/bookingapp/blob/master/admin/src/hooks/useFetch.js"
click node_authstate "https://github.com/nourchene-hamrita/bookingapp/blob/master/admin/src/context/AuthContext.js"
click node_server "https://github.com/nourchene-hamrita/bookingapp/blob/master/api/index.js"
click node_authroutes "https://github.com/nourchene-hamrita/bookingapp/blob/master/api/routes/auth.js"
click node_userroutes "https://github.com/nourchene-hamrita/bookingapp/blob/master/api/routes/users.js"
click node_hotelroutes "https://github.com/nourchene-hamrita/bookingapp/blob/master/api/routes/hotels.js"
click node_roomroutes "https://github.com/nourchene-hamrita/bookingapp/blob/master/api/routes/rooms.js"
click node_authcontroller "https://github.com/nourchene-hamrita/bookingapp/blob/master/api/controllers/auth.js"
click node_usercontroller "https://github.com/nourchene-hamrita/bookingapp/blob/master/api/controllers/user.js"
click node_hotelcontroller "https://github.com/nourchene-hamrita/bookingapp/blob/master/api/controllers/hotel.js"
click node_roomcontroller "https://github.com/nourchene-hamrita/bookingapp/blob/master/api/controllers/room.js"
click node_usermodel "https://github.com/nourchene-hamrita/bookingapp/blob/master/api/models/User.js"
click node_hotelmodel "https://github.com/nourchene-hamrita/bookingapp/blob/master/api/models/Hotel.js"
click node_roommodel "https://github.com/nourchene-hamrita/bookingapp/blob/master/api/models/Room.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_clientapp,node_home,node_listing,node_hotelview,node_clientauth,node_searchstate,node_clientfetch toneBlue
class node_adminapp,node_adminlogin,node_adminhome,node_adminlist,node_adminnewhotel,node_adminnewroom,node_adminfetch,node_authstate,node_mongo toneAmber
class node_server,node_authroutes,node_userroutes,node_hotelroutes,node_roomroutes,node_authcontroller,node_usercontroller,node_hotelcontroller,node_roomcontroller toneMint
class node_usermodel,node_hotelmodel,node_roommodel toneRose
class node_customer,node_adminuser toneIndigo
```

## Components

### Booking client

- [Client router](https://github.com/nourchene-hamrita/bookingapp/blob/master/client/src/App.js): `client/src/App.js`
- [Home browse](https://github.com/nourchene-hamrita/bookingapp/blob/master/client/src/pages/home/Home.jsx): `client/src/pages/home/Home.jsx`
- [Hotel search](https://github.com/nourchene-hamrita/bookingapp/blob/master/client/src/pages/list/List.jsx): `client/src/pages/list/List.jsx`
- [Hotel details](https://github.com/nourchene-hamrita/bookingapp/blob/master/client/src/pages/hotel/Hotel.jsx): `client/src/pages/hotel/Hotel.jsx`
- [Login/register](https://github.com/nourchene-hamrita/bookingapp/blob/master/client/src/pages/login/login.jsx): `client/src/pages/login/login.jsx`
- [Search state](https://github.com/nourchene-hamrita/bookingapp/blob/master/client/src/context/SearchContext.js): `client/src/context/SearchContext.js`
- [Client fetch hook](https://github.com/nourchene-hamrita/bookingapp/blob/master/client/src/hooks/useFetch.js): `client/src/hooks/useFetch.js`

### Admin dashboard

- [Admin router](https://github.com/nourchene-hamrita/bookingapp/blob/master/admin/src/App.js): `admin/src/App.js`
- [Admin login](https://github.com/nourchene-hamrita/bookingapp/blob/master/admin/src/pages/login/Login.jsx): `admin/src/pages/login/Login.jsx`
- [Admin overview](https://github.com/nourchene-hamrita/bookingapp/blob/master/admin/src/pages/home/Home.jsx): `admin/src/pages/home/Home.jsx`
- [Manage records](https://github.com/nourchene-hamrita/bookingapp/blob/master/admin/src/pages/list/List.jsx): `admin/src/pages/list/List.jsx`
- [Create hotel](https://github.com/nourchene-hamrita/bookingapp/blob/master/admin/src/pages/newHotel/NewHotel.jsx): `admin/src/pages/newHotel/NewHotel.jsx`
- [Create room](https://github.com/nourchene-hamrita/bookingapp/blob/master/admin/src/pages/newRoom/NewRoom.jsx): `admin/src/pages/newRoom/NewRoom.jsx`
- [Admin fetch hook](https://github.com/nourchene-hamrita/bookingapp/blob/master/admin/src/hooks/useFetch.js): `admin/src/hooks/useFetch.js`
- [Admin auth state](https://github.com/nourchene-hamrita/bookingapp/blob/master/admin/src/context/AuthContext.js): `admin/src/context/AuthContext.js`

### Backend API

- [API server](https://github.com/nourchene-hamrita/bookingapp/blob/master/api/index.js): `api/index.js`
- [Auth routes](https://github.com/nourchene-hamrita/bookingapp/blob/master/api/routes/auth.js): `api/routes/auth.js`
- [User routes](https://github.com/nourchene-hamrita/bookingapp/blob/master/api/routes/users.js): `api/routes/users.js`
- [Hotel routes](https://github.com/nourchene-hamrita/bookingapp/blob/master/api/routes/hotels.js): `api/routes/hotels.js`
- [Room routes](https://github.com/nourchene-hamrita/bookingapp/blob/master/api/routes/rooms.js): `api/routes/rooms.js`
- [Auth controller](https://github.com/nourchene-hamrita/bookingapp/blob/master/api/controllers/auth.js): `api/controllers/auth.js`
- [User controller](https://github.com/nourchene-hamrita/bookingapp/blob/master/api/controllers/user.js): `api/controllers/user.js`
- [Hotel controller](https://github.com/nourchene-hamrita/bookingapp/blob/master/api/controllers/hotel.js): `api/controllers/hotel.js`
- [Room controller](https://github.com/nourchene-hamrita/bookingapp/blob/master/api/controllers/room.js): `api/controllers/room.js`

### MongoDB models

- [User model](https://github.com/nourchene-hamrita/bookingapp/blob/master/api/models/User.js): `api/models/User.js`
- [Hotel model](https://github.com/nourchene-hamrita/bookingapp/blob/master/api/models/Hotel.js): `api/models/Hotel.js`
- [Room model](https://github.com/nourchene-hamrita/bookingapp/blob/master/api/models/Room.js): `api/models/Room.js`

### Other components

- **Customer**
- **Administrator**
- **MongoDB**

## Connections

- Customer → Client router: uses
- Client router → Home browse: routes
- Client router → Hotel search: routes
- Client router → Hotel details: routes
- Client router → Login/register: routes
- Administrator → Admin router: uses
- Admin router → Admin login: routes
- Admin router → Admin overview: routes
- Admin router → Manage records: routes
- Admin router → Create hotel: routes
- Admin router → Create room: routes
- Admin router → Admin auth state: checks access
- API server → Auth routes: mounts
- API server → User routes: mounts
- API server → Hotel routes: mounts
- API server → Room routes: mounts
- API server → MongoDB: connects
- Auth controller → User model: reads/writes
- User controller → User model: accesses
- Hotel controller → Hotel model: accesses
- Room controller → Room model: accesses
- User model → MongoDB: persists
- Hotel model → MongoDB: persists
- Room model → MongoDB: persists
