# harlesshann/projek-peminjaman-alat architecture

> Architecture diagram of the GitHub repository harlesshann/projek-peminjaman-alat, 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/harlesshann/projek-peminjaman-alat
- Repository: https://github.com/harlesshann/projek-peminjaman-alat

## Overview

This is a role-based equipment-loan application with both a Laravel web interface and a Sanctum REST API. The main workflow is borrower catalog browsing and loan submission, staff approval with stock reduction, then return processing with condition, lateness and stock updates; administrators also manage users, categories and equipment. Reporting and activity logs provide oversight. The graph preserves these stages and the documented management/reporting capabilities. Controller excerpts are partial, so uncertain controller-to-controller wiring is omitted.

Main entry points: [`backend/routes/api.php`](https://github.com/harlesshann/projek-peminjaman-alat/blob/main/backend/routes/api.php) (API routes), [`backend/routes/web.php`](https://github.com/harlesshann/projek-peminjaman-alat/blob/main/backend/routes/web.php) (Web routes), [`backend/app/Models/Peminjaman.php`](https://github.com/harlesshann/projek-peminjaman-alat/blob/main/backend/app/Models/Peminjaman.php) (Loans and details), [`backend/app/Models/Alat.php`](https://github.com/harlesshann/projek-peminjaman-alat/blob/main/backend/app/Models/Alat.php) (Equipment)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_entry["Request and access"]
  node_web["Web routes<br/>[web.php]"]
  node_api["API routes<br/>[api.php]"]
  node_web_auth["Web authentication<br/>[AuthController.php]"]
  node_api_auth["API authentication<br/>[AuthController.php]"]
  node_role_access["Role checks<br/>[CheckRole.php]"]
end

subgraph group_catalog["Catalog and administration"]
  node_admin_ops["Admin operations"]
  node_api_catalog["Catalog and user API<br/>[AlatController.php]"]
  node_api_categories["Category API"]
  node_api_users["User API<br/>[UserController.php]"]
end

subgraph group_loans["Loan lifecycle"]
  node_web_borrower["Borrower web"]
  node_web_staff["Staff operations"]
  node_api_loans["Loan API"]
  node_api_returns["Return API"]
end

subgraph group_oversight["Reports and audit"]
  node_reporting["Loan reporting"]
  node_activity["Activity logs"]
end

subgraph group_data["Domain data"]
  node_loans_model["Loans and details<br/>[Peminjaman.php]"]
  node_returns_model["Returns<br/>[Pengembalian.php]"]
  node_equipment_model["Equipment<br/>[Alat.php]"]
  node_category_model["Categories<br/>[Kategori.php]"]
  node_user_model["Users<br/>[User.php]"]
  node_log_model["Activity records<br/>[LogAktivitas.php]"]
  node_mysql[("MySQL database")]
end

node_borrower(("Borrower"))
node_staff(("Staff"))
node_admin(("Administrator"))

node_borrower -->|"uses web"| node_web
node_staff -->|"uses web"| node_web
node_admin -->|"uses web"| node_web
node_borrower -->|"calls API"| node_api
node_staff -->|"calls API"| node_api
node_admin -->|"calls API"| node_api
node_web -->|"dispatches auth"| node_web_auth
node_web -->|"dispatches"| node_web_borrower
node_web -->|"dispatches"| node_web_staff
node_web -->|"dispatches"| node_admin_ops
node_api -->|"dispatches auth"| node_api_auth
node_api -->|"dispatches"| node_api_loans
node_api -->|"dispatches"| node_api_returns
node_api -->|"dispatches"| node_api_catalog
node_api -->|"dispatches"| node_api_categories
node_api -->|"dispatches"| node_api_users
node_api -->|"dispatches reports"| node_reporting
node_api -->|"dispatches logs"| node_activity
node_web -->|"checks roles"| node_role_access
node_api -->|"checks roles"| node_role_access
node_web_borrower -->|"creates and reads"| node_loans_model
node_web_borrower -->|"reads catalog"| node_equipment_model
node_web_staff -->|"approves loans"| node_loans_model
node_web_staff -->|"records returns"| node_returns_model
node_web_staff -->|"adjusts stock"| node_equipment_model
node_admin_ops -->|"manages users"| node_user_model
node_admin_ops -->|"manages categories"| node_category_model
node_admin_ops -->|"manages equipment"| node_equipment_model
node_admin_ops -->|"manages loans"| node_loans_model
node_admin_ops -->|"manages returns"| node_returns_model
node_api_loans -->|"creates and reads"| node_loans_model
node_api_loans -->|"checks stock"| node_equipment_model
node_api_returns -->|"records returns"| node_returns_model
node_api_returns -->|"updates loan status"| node_loans_model
node_api_returns -->|"updates stock"| node_equipment_model
node_api_catalog -->|"manages equipment"| node_equipment_model
node_api_categories -->|"manages categories"| node_category_model
node_api_users -->|"manages users"| node_user_model
node_reporting -->|"queries loans"| node_loans_model
node_reporting -->|"queries returns"| node_returns_model
node_activity -->|"queries logs"| node_log_model
node_loans_model -->|"reads and writes"| node_mysql
node_returns_model -->|"reads and writes"| node_mysql
node_equipment_model -->|"reads and writes"| node_mysql
node_category_model -->|"reads and writes"| node_mysql
node_user_model -->|"reads and writes"| node_mysql
node_log_model -->|"reads and writes"| node_mysql

click node_web "https://github.com/harlesshann/projek-peminjaman-alat/blob/main/backend/routes/web.php"
click node_api "https://github.com/harlesshann/projek-peminjaman-alat/blob/main/backend/routes/api.php"
click node_web_auth "https://github.com/harlesshann/projek-peminjaman-alat/blob/main/backend/app/Http/Controllers/AuthController.php"
click node_api_auth "https://github.com/harlesshann/projek-peminjaman-alat/blob/main/backend/app/Http/Controllers/API/AuthController.php"
click node_role_access "https://github.com/harlesshann/projek-peminjaman-alat/blob/main/backend/app/Http/Middleware/CheckRole.php"
click node_web_borrower "https://github.com/harlesshann/projek-peminjaman-alat/blob/main/backend/app/Http/Controllers/PeminjamController.php"
click node_web_staff "https://github.com/harlesshann/projek-peminjaman-alat/blob/main/backend/app/Http/Controllers/PetugasController.php"
click node_admin_ops "https://github.com/harlesshann/projek-peminjaman-alat/blob/main/backend/app/Http/Controllers/AdminController.php"
click node_api_loans "https://github.com/harlesshann/projek-peminjaman-alat/blob/main/backend/app/Http/Controllers/API/PeminjamanController.php"
click node_api_returns "https://github.com/harlesshann/projek-peminjaman-alat/blob/main/backend/app/Http/Controllers/API/PengembalianController.php"
click node_api_catalog "https://github.com/harlesshann/projek-peminjaman-alat/blob/main/backend/app/Http/Controllers/API/AlatController.php"
click node_api_categories "https://github.com/harlesshann/projek-peminjaman-alat/blob/main/backend/app/Http/Controllers/API/KategoriController.php"
click node_api_users "https://github.com/harlesshann/projek-peminjaman-alat/blob/main/backend/app/Http/Controllers/API/UserController.php"
click node_reporting "https://github.com/harlesshann/projek-peminjaman-alat/blob/main/backend/app/Http/Controllers/API/LaporanController.php"
click node_activity "https://github.com/harlesshann/projek-peminjaman-alat/blob/main/backend/app/Http/Controllers/API/LogAktivitasController.php"
click node_loans_model "https://github.com/harlesshann/projek-peminjaman-alat/blob/main/backend/app/Models/Peminjaman.php"
click node_returns_model "https://github.com/harlesshann/projek-peminjaman-alat/blob/main/backend/app/Models/Pengembalian.php"
click node_equipment_model "https://github.com/harlesshann/projek-peminjaman-alat/blob/main/backend/app/Models/Alat.php"
click node_category_model "https://github.com/harlesshann/projek-peminjaman-alat/blob/main/backend/app/Models/Kategori.php"
click node_user_model "https://github.com/harlesshann/projek-peminjaman-alat/blob/main/backend/app/Models/User.php"
click node_log_model "https://github.com/harlesshann/projek-peminjaman-alat/blob/main/backend/app/Models/LogAktivitas.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_web,node_api,node_web_auth,node_api_auth,node_role_access toneBlue
class node_admin_ops,node_api_catalog,node_api_categories,node_api_users toneAmber
class node_web_borrower,node_web_staff,node_api_loans,node_api_returns toneMint
class node_reporting,node_activity toneRose
class node_loans_model,node_returns_model,node_equipment_model,node_category_model,node_user_model,node_log_model,node_mysql,node_borrower,node_staff,node_admin toneIndigo
```

## Components

### Request and access

- [Web routes](https://github.com/harlesshann/projek-peminjaman-alat/blob/main/backend/routes/web.php): `backend/routes/web.php`
- [API routes](https://github.com/harlesshann/projek-peminjaman-alat/blob/main/backend/routes/api.php): `backend/routes/api.php`
- [Web authentication](https://github.com/harlesshann/projek-peminjaman-alat/blob/main/backend/app/Http/Controllers/AuthController.php): `backend/app/Http/Controllers/AuthController.php`
- [API authentication](https://github.com/harlesshann/projek-peminjaman-alat/blob/main/backend/app/Http/Controllers/API/AuthController.php): `backend/app/Http/Controllers/API/AuthController.php`
- [Role checks](https://github.com/harlesshann/projek-peminjaman-alat/blob/main/backend/app/Http/Middleware/CheckRole.php): `backend/app/Http/Middleware/CheckRole.php`

### Catalog and administration

- [Admin operations](https://github.com/harlesshann/projek-peminjaman-alat/blob/main/backend/app/Http/Controllers/AdminController.php): `backend/app/Http/Controllers/AdminController.php`
- [Catalog and user API](https://github.com/harlesshann/projek-peminjaman-alat/blob/main/backend/app/Http/Controllers/API/AlatController.php): `backend/app/Http/Controllers/API/AlatController.php`
- [Category API](https://github.com/harlesshann/projek-peminjaman-alat/blob/main/backend/app/Http/Controllers/API/KategoriController.php): `backend/app/Http/Controllers/API/KategoriController.php`
- [User API](https://github.com/harlesshann/projek-peminjaman-alat/blob/main/backend/app/Http/Controllers/API/UserController.php): `backend/app/Http/Controllers/API/UserController.php`

### Loan lifecycle

- [Borrower web](https://github.com/harlesshann/projek-peminjaman-alat/blob/main/backend/app/Http/Controllers/PeminjamController.php): `backend/app/Http/Controllers/PeminjamController.php`
- [Staff operations](https://github.com/harlesshann/projek-peminjaman-alat/blob/main/backend/app/Http/Controllers/PetugasController.php): `backend/app/Http/Controllers/PetugasController.php`
- [Loan API](https://github.com/harlesshann/projek-peminjaman-alat/blob/main/backend/app/Http/Controllers/API/PeminjamanController.php): `backend/app/Http/Controllers/API/PeminjamanController.php`
- [Return API](https://github.com/harlesshann/projek-peminjaman-alat/blob/main/backend/app/Http/Controllers/API/PengembalianController.php): `backend/app/Http/Controllers/API/PengembalianController.php`

### Reports and audit

- [Loan reporting](https://github.com/harlesshann/projek-peminjaman-alat/blob/main/backend/app/Http/Controllers/API/LaporanController.php): `backend/app/Http/Controllers/API/LaporanController.php`
- [Activity logs](https://github.com/harlesshann/projek-peminjaman-alat/blob/main/backend/app/Http/Controllers/API/LogAktivitasController.php): `backend/app/Http/Controllers/API/LogAktivitasController.php`

### Domain data

- [Loans and details](https://github.com/harlesshann/projek-peminjaman-alat/blob/main/backend/app/Models/Peminjaman.php): `backend/app/Models/Peminjaman.php`
- [Returns](https://github.com/harlesshann/projek-peminjaman-alat/blob/main/backend/app/Models/Pengembalian.php): `backend/app/Models/Pengembalian.php`
- [Equipment](https://github.com/harlesshann/projek-peminjaman-alat/blob/main/backend/app/Models/Alat.php): `backend/app/Models/Alat.php`
- [Categories](https://github.com/harlesshann/projek-peminjaman-alat/blob/main/backend/app/Models/Kategori.php): `backend/app/Models/Kategori.php`
- [Users](https://github.com/harlesshann/projek-peminjaman-alat/blob/main/backend/app/Models/User.php): `backend/app/Models/User.php`
- [Activity records](https://github.com/harlesshann/projek-peminjaman-alat/blob/main/backend/app/Models/LogAktivitas.php): `backend/app/Models/LogAktivitas.php`
- **MySQL database**

### Other components

- **Borrower**
- **Staff**
- **Administrator**

## Connections

- Borrower → Web routes: uses web
- Staff → Web routes: uses web
- Administrator → Web routes: uses web
- Borrower → API routes: calls API
- Staff → API routes: calls API
- Administrator → API routes: calls API
- Web routes → Web authentication: dispatches auth
- Web routes → Borrower web: dispatches
- Web routes → Staff operations: dispatches
- Web routes → Admin operations: dispatches
- API routes → API authentication: dispatches auth
- API routes → Loan API: dispatches
- API routes → Return API: dispatches
- API routes → Catalog and user API: dispatches
- API routes → Category API: dispatches
- API routes → User API: dispatches
- API routes → Loan reporting: dispatches reports
- API routes → Activity logs: dispatches logs
- Web routes → Role checks: checks roles
- API routes → Role checks: checks roles
- Borrower web → Loans and details: creates and reads
- Borrower web → Equipment: reads catalog
- Staff operations → Loans and details: approves loans
- Staff operations → Returns: records returns
- Staff operations → Equipment: adjusts stock
- Admin operations → Users: manages users
- Admin operations → Categories: manages categories
- Admin operations → Equipment: manages equipment
- Admin operations → Loans and details: manages loans
- Admin operations → Returns: manages returns
- Loan API → Loans and details: creates and reads
- Loan API → Equipment: checks stock
- Return API → Returns: records returns
- Return API → Loans and details: updates loan status
- Return API → Equipment: updates stock
- Catalog and user API → Equipment: manages equipment
- Category API → Categories: manages categories
- User API → Users: manages users
- Loan reporting → Loans and details: queries loans
- Loan reporting → Returns: queries returns
- Activity logs → Activity records: queries logs
- Loans and details → MySQL database: reads and writes
- Returns → MySQL database: reads and writes
- Equipment → MySQL database: reads and writes
- Categories → MySQL database: reads and writes
- Users → MySQL database: reads and writes
- Activity records → MySQL database: reads and writes
