# ppk-06/reservasi-fasilitas-kampus architecture

> Architecture diagram of the GitHub repository ppk-06/reservasi-fasilitas-kampus, 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/ppk-06/reservasi-fasilitas-kampus
- Repository: https://github.com/ppk-06/reservasi-fasilitas-kampus

## Overview

This is a role-based campus-facilities web application: visitors browse facilities, registered users request reservations and report damage, officers manage reservations and facility availability, and administrators manage facilities, accounts, and recap exports. The graph highlights those user-facing stages and the Eloquent model layer. Some controllers and route definitions were not sampled, so links for those features reflect the tree and view names; uncertain internal call chains are omitted.

Main entry points: [`routes/web.php`](https://github.com/ppk-06/reservasi-fasilitas-kampus/blob/main/routes/web.php) (Web routes), [`app/Models/Facility.php`](https://github.com/ppk-06/reservasi-fasilitas-kampus/blob/main/app/Models/Facility.php) (Facilities), [`app/Http/Controllers/ReservationController.php`](https://github.com/ppk-06/reservasi-fasilitas-kampus/blob/main/app/Http/Controllers/ReservationController.php) (User reservations), [`app/Http/Controllers/Admin/RecapController.php`](https://github.com/ppk-06/reservasi-fasilitas-kampus/blob/main/app/Http/Controllers/Admin/RecapController.php) (Facility recap)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_web["Web entry"]
  node_routes["Web routes<br/>[web.php]"]
  node_views["Blade views<br/>[app.blade.php]"]
end

subgraph group_access["Accounts"]
  node_auth["Authentication<br/>[AuthController.php]"]
  node_register["Registration"]
  node_role["Role guard"]
  node_user_model[("User accounts<br/>[User.php]")]
end

subgraph group_facilities["Facilities"]
  node_facility_public["Facility discovery"]
  node_facility_admin["Facility management"]
  node_facility_officer["Availability management"]
  node_facility_model[("Facilities<br/>[Facility.php]")]
  node_slot["Slot availability<br/>[Slot.php]"]
end

subgraph group_reservations["Reservations"]
  node_reservation_user["User reservations"]
  node_reservation_officer["Reservation review"]
  node_reservation_model[("Reservations<br/>[Reservation.php]")]
end

subgraph group_operations["Reports and administration"]
  node_reports_user["Damage reporting"]
  node_reports_officer["Report review"]
  node_report_model[("Reports<br/>[Report.php]")]
  node_photo_model[("Report photos<br/>[ReportPhoto.php]")]
  node_admin_users["Account administration<br/>[UserController.php]"]
  node_recap["Facility recap"]
end

node_visitor(("Visitor"))
node_user(("Registered user"))
node_officer(("Officer"))
node_admin(("Administrator"))

node_visitor -->|"requests pages"| node_routes
node_user -->|"requests pages"| node_routes
node_officer -->|"requests pages"| node_routes
node_admin -->|"requests pages"| node_routes
node_routes -->|"dispatches"| node_auth
node_routes -->|"dispatches"| node_register
node_routes -->|"dispatches"| node_facility_public
node_routes -->|"dispatches"| node_reservation_user
node_routes -->|"dispatches"| node_reports_user
node_routes -->|"dispatches"| node_facility_admin
node_routes -->|"dispatches"| node_admin_users
node_routes -->|"dispatches"| node_recap
node_routes -->|"dispatches"| node_facility_officer
node_routes -->|"dispatches"| node_reservation_officer
node_routes -->|"dispatches"| node_reports_officer
node_routes -->|"guards access"| node_role
node_auth -->|"authenticates"| node_user_model
node_register -->|"creates account"| node_user_model
node_facility_public -->|"queries"| node_facility_model
node_facility_public -->|"checks slots"| node_slot
node_facility_public -->|"renders pages"| node_views
node_facility_admin -->|"manages"| node_facility_model
node_facility_officer -->|"updates status"| node_facility_model
node_facility_officer -->|"reads upcoming"| node_reservation_model
node_reservation_user -->|"lists active facilities"| node_facility_model
node_reservation_user -->|"checks availability"| node_slot
node_reservation_user -->|"reads and writes"| node_reservation_model
node_reservation_user -->|"renders pages"| node_views
node_reservation_officer -->|"reviews and updates"| node_reservation_model
node_reservation_officer -->|"checks facility"| node_facility_model
node_reports_user -->|"records reports"| node_report_model
node_reports_user -->|"stores photos"| node_photo_model
node_reports_officer -->|"reviews reports"| node_report_model
node_reports_officer -->|"updates facility"| node_facility_model
node_admin_users -->|"manages accounts"| node_user_model
node_recap -->|"summarizes facilities"| node_facility_model
node_recap -->|"summarizes reservations"| node_reservation_model
node_recap -->|"summarizes reports"| node_report_model
node_recap -->|"downloads CSV"| node_admin

click node_routes "https://github.com/ppk-06/reservasi-fasilitas-kampus/blob/main/routes/web.php"
click node_auth "https://github.com/ppk-06/reservasi-fasilitas-kampus/blob/main/app/Http/Controllers/AuthController.php"
click node_register "https://github.com/ppk-06/reservasi-fasilitas-kampus/blob/main/app/Http/Controllers/RegisterController.php"
click node_role "https://github.com/ppk-06/reservasi-fasilitas-kampus/blob/main/app/Http/Middleware/EnsureUserHasRole.php"
click node_user_model "https://github.com/ppk-06/reservasi-fasilitas-kampus/blob/main/app/Models/User.php"
click node_facility_public "https://github.com/ppk-06/reservasi-fasilitas-kampus/blob/main/app/Http/Controllers/FacilityController.php"
click node_facility_admin "https://github.com/ppk-06/reservasi-fasilitas-kampus/blob/main/app/Http/Controllers/Admin/FacilityController.php"
click node_facility_officer "https://github.com/ppk-06/reservasi-fasilitas-kampus/blob/main/app/Http/Controllers/Officer/FacilityController.php"
click node_facility_model "https://github.com/ppk-06/reservasi-fasilitas-kampus/blob/main/app/Models/Facility.php"
click node_slot "https://github.com/ppk-06/reservasi-fasilitas-kampus/blob/main/app/Support/Slot.php"
click node_reservation_user "https://github.com/ppk-06/reservasi-fasilitas-kampus/blob/main/app/Http/Controllers/ReservationController.php"
click node_reservation_officer "https://github.com/ppk-06/reservasi-fasilitas-kampus/blob/main/app/Http/Controllers/Officer/ReservationController.php"
click node_reservation_model "https://github.com/ppk-06/reservasi-fasilitas-kampus/blob/main/app/Models/Reservation.php"
click node_reports_user "https://github.com/ppk-06/reservasi-fasilitas-kampus/blob/main/app/Http/Controllers/ReportController.php"
click node_reports_officer "https://github.com/ppk-06/reservasi-fasilitas-kampus/blob/main/app/Http/Controllers/Officer/ReportController.php"
click node_report_model "https://github.com/ppk-06/reservasi-fasilitas-kampus/blob/main/app/Models/Report.php"
click node_photo_model "https://github.com/ppk-06/reservasi-fasilitas-kampus/blob/main/app/Models/ReportPhoto.php"
click node_admin_users "https://github.com/ppk-06/reservasi-fasilitas-kampus/blob/main/app/Http/Controllers/Admin/UserController.php"
click node_recap "https://github.com/ppk-06/reservasi-fasilitas-kampus/blob/main/app/Http/Controllers/Admin/RecapController.php"
click node_views "https://github.com/ppk-06/reservasi-fasilitas-kampus/blob/main/resources/views/layouts/app.blade.php"

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_routes,node_views,node_user toneBlue
class node_auth,node_register,node_role,node_user_model toneAmber
class node_facility_public,node_facility_admin,node_facility_officer,node_facility_model,node_slot toneMint
class node_reservation_user,node_reservation_officer,node_reservation_model toneRose
class node_reports_user,node_reports_officer,node_report_model,node_photo_model,node_admin_users,node_recap,node_visitor,node_officer,node_admin toneIndigo
```

## Components

### Web entry

- [Web routes](https://github.com/ppk-06/reservasi-fasilitas-kampus/blob/main/routes/web.php): `routes/web.php`
- [Blade views](https://github.com/ppk-06/reservasi-fasilitas-kampus/blob/main/resources/views/layouts/app.blade.php): `resources/views/layouts/app.blade.php`

### Accounts

- [Authentication](https://github.com/ppk-06/reservasi-fasilitas-kampus/blob/main/app/Http/Controllers/AuthController.php): `app/Http/Controllers/AuthController.php`
- [Registration](https://github.com/ppk-06/reservasi-fasilitas-kampus/blob/main/app/Http/Controllers/RegisterController.php): `app/Http/Controllers/RegisterController.php`
- [Role guard](https://github.com/ppk-06/reservasi-fasilitas-kampus/blob/main/app/Http/Middleware/EnsureUserHasRole.php): `app/Http/Middleware/EnsureUserHasRole.php`
- [User accounts](https://github.com/ppk-06/reservasi-fasilitas-kampus/blob/main/app/Models/User.php): `app/Models/User.php`

### Facilities

- [Facility discovery](https://github.com/ppk-06/reservasi-fasilitas-kampus/blob/main/app/Http/Controllers/FacilityController.php): `app/Http/Controllers/FacilityController.php`
- [Facility management](https://github.com/ppk-06/reservasi-fasilitas-kampus/blob/main/app/Http/Controllers/Admin/FacilityController.php): `app/Http/Controllers/Admin/FacilityController.php`
- [Availability management](https://github.com/ppk-06/reservasi-fasilitas-kampus/blob/main/app/Http/Controllers/Officer/FacilityController.php): `app/Http/Controllers/Officer/FacilityController.php`
- [Facilities](https://github.com/ppk-06/reservasi-fasilitas-kampus/blob/main/app/Models/Facility.php): `app/Models/Facility.php`
- [Slot availability](https://github.com/ppk-06/reservasi-fasilitas-kampus/blob/main/app/Support/Slot.php): `app/Support/Slot.php`

### Reservations

- [User reservations](https://github.com/ppk-06/reservasi-fasilitas-kampus/blob/main/app/Http/Controllers/ReservationController.php): `app/Http/Controllers/ReservationController.php`
- [Reservation review](https://github.com/ppk-06/reservasi-fasilitas-kampus/blob/main/app/Http/Controllers/Officer/ReservationController.php): `app/Http/Controllers/Officer/ReservationController.php`
- [Reservations](https://github.com/ppk-06/reservasi-fasilitas-kampus/blob/main/app/Models/Reservation.php): `app/Models/Reservation.php`

### Reports and administration

- [Damage reporting](https://github.com/ppk-06/reservasi-fasilitas-kampus/blob/main/app/Http/Controllers/ReportController.php): `app/Http/Controllers/ReportController.php`
- [Report review](https://github.com/ppk-06/reservasi-fasilitas-kampus/blob/main/app/Http/Controllers/Officer/ReportController.php): `app/Http/Controllers/Officer/ReportController.php`
- [Reports](https://github.com/ppk-06/reservasi-fasilitas-kampus/blob/main/app/Models/Report.php): `app/Models/Report.php`
- [Report photos](https://github.com/ppk-06/reservasi-fasilitas-kampus/blob/main/app/Models/ReportPhoto.php): `app/Models/ReportPhoto.php`
- [Account administration](https://github.com/ppk-06/reservasi-fasilitas-kampus/blob/main/app/Http/Controllers/Admin/UserController.php): `app/Http/Controllers/Admin/UserController.php`
- [Facility recap](https://github.com/ppk-06/reservasi-fasilitas-kampus/blob/main/app/Http/Controllers/Admin/RecapController.php): `app/Http/Controllers/Admin/RecapController.php`

### Other components

- **Visitor**
- **Registered user**
- **Officer**
- **Administrator**

## Connections

- Visitor → Web routes: requests pages
- Registered user → Web routes: requests pages
- Officer → Web routes: requests pages
- Administrator → Web routes: requests pages
- Web routes → Authentication: dispatches
- Web routes → Registration: dispatches
- Web routes → Facility discovery: dispatches
- Web routes → User reservations: dispatches
- Web routes → Damage reporting: dispatches
- Web routes → Facility management: dispatches
- Web routes → Account administration: dispatches
- Web routes → Facility recap: dispatches
- Web routes → Availability management: dispatches
- Web routes → Reservation review: dispatches
- Web routes → Report review: dispatches
- Web routes → Role guard: guards access
- Authentication → User accounts: authenticates
- Registration → User accounts: creates account
- Facility discovery → Facilities: queries
- Facility discovery → Slot availability: checks slots
- Facility discovery → Blade views: renders pages
- Facility management → Facilities: manages
- Availability management → Facilities: updates status
- Availability management → Reservations: reads upcoming
- User reservations → Facilities: lists active facilities
- User reservations → Slot availability: checks availability
- User reservations → Reservations: reads and writes
- User reservations → Blade views: renders pages
- Reservation review → Reservations: reviews and updates
- Reservation review → Facilities: checks facility
- Damage reporting → Reports: records reports
- Damage reporting → Report photos: stores photos
- Report review → Reports: reviews reports
- Report review → Facilities: updates facility
- Account administration → User accounts: manages accounts
- Facility recap → Facilities: summarizes facilities
- Facility recap → Reservations: summarizes reservations
- Facility recap → Reports: summarizes reports
- Facility recap → Administrator: downloads CSV
