# charls-duno/busico-midterm architecture

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

- Interactive diagram: https://gitdiagram.com/charls-duno/busico-midterm
- Repository: https://github.com/charls-duno/busico-midterm

## Overview

charls-db is a Laravel terminal-yard application for registering containers, tracking their yard placements, and calculating dwell time and demurrage. The principal workflow runs from container and placement requests through their controllers to TerminalYardService, which applies validation-related business rules, updates vessel/container/placement records, and computes fees. Authentication and profile management are separate supporting workflows. The tree includes React/Inertia pages, but the README is empty and sampled sources do not establish the full page-to-route wiring; unsampled yard views and dashboard presentation are therefore not mapped in detail.

Main entry points: [`app/Services/TerminalYardService.php`](https://github.com/charls-duno/busico-midterm/blob/main/app/Services/TerminalYardService.php) (Yard rules and fees), [`app/Models/Container.php`](https://github.com/charls-duno/busico-midterm/blob/main/app/Models/Container.php) (Container records), [`app/Models/YardPlacement.php`](https://github.com/charls-duno/busico-midterm/blob/main/app/Models/YardPlacement.php) (Placement records), [`app/Http/Controllers/ContainerController.php`](https://github.com/charls-duno/busico-midterm/blob/main/app/Http/Controllers/ContainerController.php) (Container management)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_yard["Yard operations"]
  node_container_ctl["Container management"]
  node_placement_ctl["Placement management"]
  node_yard_service["Yard rules and fees"]
  node_container_model["Container records<br/>[Container.php]"]
  node_placement_model["Placement records<br/>[YardPlacement.php]"]
  node_vessel_model["Vessel records<br/>[Vessel.php]"]
  node_container_requests["Container request validation"]
  node_placement_requests["Placement request validation"]
  node_dashboard["Yard dashboard"]
end

subgraph group_identity["Identity and profile"]
  node_auth_routes["Authentication routes<br/>[auth.php]"]
  node_session_ctl["Login and logout"]
  node_register_ctl["Account registration"]
  node_login_request["Login validation<br/>[LoginRequest.php]"]
  node_user_model["User account<br/>[User.php]"]
  node_profile_ctl["Profile settings"]
  node_profile_request["Profile validation"]
end

subgraph group_web["Web presentation"]
  node_inertia_middleware["Inertia middleware"]
  node_auth_login_page["Login page<br/>[login.tsx]"]
  node_auth_register_page["Registration page<br/>[register.tsx]"]
  node_profile_page["Profile page<br/>[profile.tsx]"]
  node_appearance_hook["Appearance preference<br/>[use-appearance.tsx]"]
end

node_operator(("Terminal user"))

node_operator -->|"uses routes"| node_auth_routes
node_auth_routes -->|"dispatches login"| node_session_ctl
node_auth_routes -->|"dispatches registration"| node_register_ctl
node_session_ctl -->|"authenticates with"| node_login_request
node_register_ctl -->|"creates account"| node_user_model
node_session_ctl -->|"renders"| node_auth_login_page
node_register_ctl -->|"renders"| node_auth_register_page
node_profile_ctl -->|"validates with"| node_profile_request
node_profile_ctl -->|"renders"| node_profile_page
node_operator -.->|"manages containers"| node_container_ctl
node_container_ctl -->|"creates or updates"| node_yard_service
node_container_ctl -->|"accepts validated data"| node_container_requests
node_operator -.->|"manages placements"| node_placement_ctl
node_placement_ctl -->|"creates or updates"| node_yard_service
node_placement_ctl -->|"accepts validated data"| node_placement_requests
node_yard_service -->|"reads and writes"| node_container_model
node_yard_service -->|"reads and writes"| node_placement_model
node_yard_service -->|"finds or creates"| node_vessel_model
node_container_model -->|"relates to"| node_vessel_model
node_container_model -->|"relates to"| node_placement_model
node_placement_model -->|"belongs to"| node_container_model
node_dashboard -->|"reads"| node_container_model
node_dashboard -->|"reads"| node_placement_model
node_auth_login_page -.->|"uses preference"| node_appearance_hook

click node_container_ctl "https://github.com/charls-duno/busico-midterm/blob/main/app/Http/Controllers/ContainerController.php"
click node_placement_ctl "https://github.com/charls-duno/busico-midterm/blob/main/app/Http/Controllers/YardPlacementController.php"
click node_yard_service "https://github.com/charls-duno/busico-midterm/blob/main/app/Services/TerminalYardService.php"
click node_container_model "https://github.com/charls-duno/busico-midterm/blob/main/app/Models/Container.php"
click node_placement_model "https://github.com/charls-duno/busico-midterm/blob/main/app/Models/YardPlacement.php"
click node_vessel_model "https://github.com/charls-duno/busico-midterm/blob/main/app/Models/Vessel.php"
click node_container_requests "https://github.com/charls-duno/busico-midterm/blob/main/app/Http/Requests/StoreContainerRequest.php"
click node_placement_requests "https://github.com/charls-duno/busico-midterm/blob/main/app/Http/Requests/StoreYardPlacementRequest.php"
click node_dashboard "https://github.com/charls-duno/busico-midterm/blob/main/app/Http/Controllers/DashboardController.php"
click node_auth_routes "https://github.com/charls-duno/busico-midterm/blob/main/routes/auth.php"
click node_session_ctl "https://github.com/charls-duno/busico-midterm/blob/main/app/Http/Controllers/Auth/AuthenticatedSessionController.php"
click node_register_ctl "https://github.com/charls-duno/busico-midterm/blob/main/app/Http/Controllers/Auth/RegisteredUserController.php"
click node_login_request "https://github.com/charls-duno/busico-midterm/blob/main/app/Http/Requests/Auth/LoginRequest.php"
click node_user_model "https://github.com/charls-duno/busico-midterm/blob/main/app/Models/User.php"
click node_profile_ctl "https://github.com/charls-duno/busico-midterm/blob/main/app/Http/Controllers/Settings/ProfileController.php"
click node_profile_request "https://github.com/charls-duno/busico-midterm/blob/main/app/Http/Requests/Settings/ProfileUpdateRequest.php"
click node_inertia_middleware "https://github.com/charls-duno/busico-midterm/blob/main/app/Http/Middleware/HandleInertiaRequests.php"
click node_auth_login_page "https://github.com/charls-duno/busico-midterm/blob/main/resources/js/pages/auth/login.tsx"
click node_auth_register_page "https://github.com/charls-duno/busico-midterm/blob/main/resources/js/pages/auth/register.tsx"
click node_profile_page "https://github.com/charls-duno/busico-midterm/blob/main/resources/js/pages/settings/profile.tsx"
click node_appearance_hook "https://github.com/charls-duno/busico-midterm/blob/main/resources/js/hooks/use-appearance.tsx"

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_container_ctl,node_placement_ctl,node_yard_service,node_container_model,node_placement_model,node_vessel_model,node_container_requests,node_placement_requests,node_dashboard,node_operator toneBlue
class node_auth_routes,node_session_ctl,node_register_ctl,node_login_request,node_user_model,node_profile_ctl,node_profile_request toneAmber
class node_inertia_middleware,node_auth_login_page,node_auth_register_page,node_profile_page,node_appearance_hook toneMint
```

## Components

### Yard operations

- [Container management](https://github.com/charls-duno/busico-midterm/blob/main/app/Http/Controllers/ContainerController.php): `app/Http/Controllers/ContainerController.php`
- [Placement management](https://github.com/charls-duno/busico-midterm/blob/main/app/Http/Controllers/YardPlacementController.php): `app/Http/Controllers/YardPlacementController.php`
- [Yard rules and fees](https://github.com/charls-duno/busico-midterm/blob/main/app/Services/TerminalYardService.php): `app/Services/TerminalYardService.php`
- [Container records](https://github.com/charls-duno/busico-midterm/blob/main/app/Models/Container.php): `app/Models/Container.php`
- [Placement records](https://github.com/charls-duno/busico-midterm/blob/main/app/Models/YardPlacement.php): `app/Models/YardPlacement.php`
- [Vessel records](https://github.com/charls-duno/busico-midterm/blob/main/app/Models/Vessel.php): `app/Models/Vessel.php`
- [Container request validation](https://github.com/charls-duno/busico-midterm/blob/main/app/Http/Requests/StoreContainerRequest.php): `app/Http/Requests/StoreContainerRequest.php`
- [Placement request validation](https://github.com/charls-duno/busico-midterm/blob/main/app/Http/Requests/StoreYardPlacementRequest.php): `app/Http/Requests/StoreYardPlacementRequest.php`
- [Yard dashboard](https://github.com/charls-duno/busico-midterm/blob/main/app/Http/Controllers/DashboardController.php): `app/Http/Controllers/DashboardController.php`

### Identity and profile

- [Authentication routes](https://github.com/charls-duno/busico-midterm/blob/main/routes/auth.php): `routes/auth.php`
- [Login and logout](https://github.com/charls-duno/busico-midterm/blob/main/app/Http/Controllers/Auth/AuthenticatedSessionController.php): `app/Http/Controllers/Auth/AuthenticatedSessionController.php`
- [Account registration](https://github.com/charls-duno/busico-midterm/blob/main/app/Http/Controllers/Auth/RegisteredUserController.php): `app/Http/Controllers/Auth/RegisteredUserController.php`
- [Login validation](https://github.com/charls-duno/busico-midterm/blob/main/app/Http/Requests/Auth/LoginRequest.php): `app/Http/Requests/Auth/LoginRequest.php`
- [User account](https://github.com/charls-duno/busico-midterm/blob/main/app/Models/User.php): `app/Models/User.php`
- [Profile settings](https://github.com/charls-duno/busico-midterm/blob/main/app/Http/Controllers/Settings/ProfileController.php): `app/Http/Controllers/Settings/ProfileController.php`
- [Profile validation](https://github.com/charls-duno/busico-midterm/blob/main/app/Http/Requests/Settings/ProfileUpdateRequest.php): `app/Http/Requests/Settings/ProfileUpdateRequest.php`

### Web presentation

- [Inertia middleware](https://github.com/charls-duno/busico-midterm/blob/main/app/Http/Middleware/HandleInertiaRequests.php): `app/Http/Middleware/HandleInertiaRequests.php`
- [Login page](https://github.com/charls-duno/busico-midterm/blob/main/resources/js/pages/auth/login.tsx): `resources/js/pages/auth/login.tsx`
- [Registration page](https://github.com/charls-duno/busico-midterm/blob/main/resources/js/pages/auth/register.tsx): `resources/js/pages/auth/register.tsx`
- [Profile page](https://github.com/charls-duno/busico-midterm/blob/main/resources/js/pages/settings/profile.tsx): `resources/js/pages/settings/profile.tsx`
- [Appearance preference](https://github.com/charls-duno/busico-midterm/blob/main/resources/js/hooks/use-appearance.tsx): `resources/js/hooks/use-appearance.tsx`

### Other components

- **Terminal user**

## Connections

- Terminal user → Authentication routes: uses routes (evidence: `routes/auth.php`)
- Authentication routes → Login and logout: dispatches login (evidence: `routes/auth.php`)
- Authentication routes → Account registration: dispatches registration (evidence: `routes/auth.php`)
- Login and logout → Login validation: authenticates with (evidence: `app/Http/Controllers/Auth/AuthenticatedSessionController.php`)
- Account registration → User account: creates account (evidence: `app/Http/Controllers/Auth/RegisteredUserController.php`)
- Login and logout → Login page: renders (evidence: `app/Http/Controllers/Auth/AuthenticatedSessionController.php`)
- Account registration → Registration page: renders (evidence: `app/Http/Controllers/Auth/RegisteredUserController.php`)
- Profile settings → Profile validation: validates with (evidence: `app/Http/Controllers/Settings/ProfileController.php`)
- Profile settings → Profile page: renders (evidence: `app/Http/Controllers/Settings/ProfileController.php`)
- Terminal user → Container management: manages containers
- Container management → Yard rules and fees: creates or updates (evidence: `app/Http/Controllers/ContainerController.php`)
- Container management → Container request validation: accepts validated data (evidence: `app/Http/Controllers/ContainerController.php`)
- Terminal user → Placement management: manages placements
- Placement management → Yard rules and fees: creates or updates (evidence: `app/Http/Controllers/YardPlacementController.php`)
- Placement management → Placement request validation: accepts validated data (evidence: `app/Http/Controllers/YardPlacementController.php`)
- Yard rules and fees → Container records: reads and writes (evidence: `app/Services/TerminalYardService.php`)
- Yard rules and fees → Placement records: reads and writes (evidence: `app/Services/TerminalYardService.php`)
- Yard rules and fees → Vessel records: finds or creates (evidence: `app/Services/TerminalYardService.php`)
- Container records → Vessel records: relates to (evidence: `app/Models/Container.php`)
- Container records → Placement records: relates to (evidence: `app/Models/Container.php`)
- Placement records → Container records: belongs to (evidence: `app/Models/YardPlacement.php`)
- Yard dashboard → Container records: reads (evidence: `app/Http/Controllers/DashboardController.php`)
- Yard dashboard → Placement records: reads (evidence: `app/Http/Controllers/DashboardController.php`)
- Login page → Appearance preference: uses preference
