# nirvanaguys/sdn027_web_perpus architecture

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

- Interactive diagram: https://gitdiagram.com/nirvanaguys/sdn027_web_perpus
- Repository: https://github.com/nirvanaguys/sdn027_web_perpus

## Overview

This is a decoupled library-management application: members and administrators use a Vue interface backed by a Laravel REST API. The main workflow covers account access, book discovery and administration, then borrowing, returning, and viewing loan history. Sampled controllers show the API’s model and transaction behavior; README capabilities fill in the broader product scope. Frontend-to-controller page wiring and API route dispatch are not established by the sampled source, so those links are not asserted.

Main entry points: [`library-api/app/Models/Book.php`](https://github.com/nirvanaguys/sdn027_web_perpus/blob/main/library-api/app/Models/Book.php) (Book model), [`library-api/app/Http/Controllers/Api/TransactionController.php`](https://github.com/nirvanaguys/sdn027_web_perpus/blob/main/library-api/app/Http/Controllers/Api/TransactionController.php) (Loan endpoints), [`library-frontend/src/App.vue`](https://github.com/nirvanaguys/sdn027_web_perpus/blob/main/library-frontend/src/App.vue) (Application shell), [`library-api/app/Http/Controllers/Api/AuthController.php`](https://github.com/nirvanaguys/sdn027_web_perpus/blob/main/library-api/app/Http/Controllers/Api/AuthController.php) (Authentication)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_frontend["Vue interface"]
  node_app["Application shell<br/>[App.vue]"]
  node_router["Page router<br/>[index.js]"]
  node_catalog_view["Book catalog<br/>[BookCatalog.vue]"]
  node_login_view["Login<br/>[Login.vue]"]
  node_loans_view["My loans<br/>[MyLoans.vue]"]
  node_admin_view["Admin dashboard<br/>[AdminDashboard.vue]"]
  node_api_client["API client<br/>[api.js]"]
end

subgraph group_api["Laravel API"]
  node_auth_controller["Authentication<br/>[AuthController.php]"]
  node_book_controller["Book endpoints<br/>[BookController.php]"]
  node_transaction_controller["Loan endpoints"]
end

subgraph group_domain["Library domain"]
  node_user_model["User model<br/>[User.php]"]
  node_book_model["Book model<br/>[Book.php]"]
  node_transaction_model["Transaction model<br/>[Transaction.php]"]
end

subgraph group_persistence["Persistence"]
  node_database[("Application database")]
end

node_people(("Members and admins"))

node_people -->|"uses"| node_app
node_app -->|"renders routes"| node_router
node_api_client -->|"HTTP API"| node_auth_controller
node_auth_controller -->|"creates and checks"| node_user_model
node_book_controller -->|"queries and updates"| node_book_model
node_transaction_controller -->|"locks and adjusts stock"| node_book_model
node_transaction_controller -->|"creates and updates"| node_transaction_model
node_user_model -->|"persists"| node_database
node_book_model -->|"persists"| node_database
node_transaction_model -->|"persists"| node_database

click node_app "https://github.com/nirvanaguys/sdn027_web_perpus/blob/main/library-frontend/src/App.vue"
click node_router "https://github.com/nirvanaguys/sdn027_web_perpus/blob/main/library-frontend/src/router/index.js"
click node_catalog_view "https://github.com/nirvanaguys/sdn027_web_perpus/blob/main/library-frontend/src/views/BookCatalog.vue"
click node_login_view "https://github.com/nirvanaguys/sdn027_web_perpus/blob/main/library-frontend/src/views/Login.vue"
click node_loans_view "https://github.com/nirvanaguys/sdn027_web_perpus/blob/main/library-frontend/src/views/MyLoans.vue"
click node_admin_view "https://github.com/nirvanaguys/sdn027_web_perpus/blob/main/library-frontend/src/views/AdminDashboard.vue"
click node_api_client "https://github.com/nirvanaguys/sdn027_web_perpus/blob/main/library-frontend/src/services/api.js"
click node_auth_controller "https://github.com/nirvanaguys/sdn027_web_perpus/blob/main/library-api/app/Http/Controllers/Api/AuthController.php"
click node_book_controller "https://github.com/nirvanaguys/sdn027_web_perpus/blob/main/library-api/app/Http/Controllers/Api/BookController.php"
click node_transaction_controller "https://github.com/nirvanaguys/sdn027_web_perpus/blob/main/library-api/app/Http/Controllers/Api/TransactionController.php"
click node_user_model "https://github.com/nirvanaguys/sdn027_web_perpus/blob/main/library-api/app/Models/User.php"
click node_book_model "https://github.com/nirvanaguys/sdn027_web_perpus/blob/main/library-api/app/Models/Book.php"
click node_transaction_model "https://github.com/nirvanaguys/sdn027_web_perpus/blob/main/library-api/app/Models/Transaction.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_app,node_router,node_catalog_view,node_login_view,node_loans_view,node_admin_view,node_api_client toneBlue
class node_auth_controller,node_book_controller,node_transaction_controller toneAmber
class node_user_model,node_book_model,node_transaction_model toneMint
class node_database toneRose
class node_people toneIndigo
```

## Components

### Vue interface

- [Application shell](https://github.com/nirvanaguys/sdn027_web_perpus/blob/main/library-frontend/src/App.vue): `library-frontend/src/App.vue`
- [Page router](https://github.com/nirvanaguys/sdn027_web_perpus/blob/main/library-frontend/src/router/index.js): `library-frontend/src/router/index.js`
- [Book catalog](https://github.com/nirvanaguys/sdn027_web_perpus/blob/main/library-frontend/src/views/BookCatalog.vue): `library-frontend/src/views/BookCatalog.vue`
- [Login](https://github.com/nirvanaguys/sdn027_web_perpus/blob/main/library-frontend/src/views/Login.vue): `library-frontend/src/views/Login.vue`
- [My loans](https://github.com/nirvanaguys/sdn027_web_perpus/blob/main/library-frontend/src/views/MyLoans.vue): `library-frontend/src/views/MyLoans.vue`
- [Admin dashboard](https://github.com/nirvanaguys/sdn027_web_perpus/blob/main/library-frontend/src/views/AdminDashboard.vue): `library-frontend/src/views/AdminDashboard.vue`
- [API client](https://github.com/nirvanaguys/sdn027_web_perpus/blob/main/library-frontend/src/services/api.js): `library-frontend/src/services/api.js`

### Laravel API

- [Authentication](https://github.com/nirvanaguys/sdn027_web_perpus/blob/main/library-api/app/Http/Controllers/Api/AuthController.php): `library-api/app/Http/Controllers/Api/AuthController.php`
- [Book endpoints](https://github.com/nirvanaguys/sdn027_web_perpus/blob/main/library-api/app/Http/Controllers/Api/BookController.php): `library-api/app/Http/Controllers/Api/BookController.php`
- [Loan endpoints](https://github.com/nirvanaguys/sdn027_web_perpus/blob/main/library-api/app/Http/Controllers/Api/TransactionController.php): `library-api/app/Http/Controllers/Api/TransactionController.php`

### Library domain

- [User model](https://github.com/nirvanaguys/sdn027_web_perpus/blob/main/library-api/app/Models/User.php): `library-api/app/Models/User.php`
- [Book model](https://github.com/nirvanaguys/sdn027_web_perpus/blob/main/library-api/app/Models/Book.php): `library-api/app/Models/Book.php`
- [Transaction model](https://github.com/nirvanaguys/sdn027_web_perpus/blob/main/library-api/app/Models/Transaction.php): `library-api/app/Models/Transaction.php`

### Persistence

- **Application database**

### Other components

- **Members and admins**

## Connections

- Members and admins → Application shell: uses
- Application shell → Page router: renders routes
- API client → Authentication: HTTP API
- Authentication → User model: creates and checks
- Book endpoints → Book model: queries and updates
- Loan endpoints → Book model: locks and adjusts stock
- Loan endpoints → Transaction model: creates and updates
- User model → Application database: persists
- Book model → Application database: persists
- Transaction model → Application database: persists
