# amberlex78/laradocker architecture

> Architecture diagram of the GitHub repository amberlex78/laradocker, 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/amberlex78/laradocker
- Repository: https://github.com/amberlex78/laradocker

## Overview

Це Laravel-застосунок на основі Docker Starter із Filament-панелями та обліком користувачів і входів. Основний користувацький потік: автентифікація створює запис сесії; користувач переглядає активні сесії та історію, а за потреби завершує інші входи. Окремі гілки охоплюють керування користувачами, ролі й домашню сторінку. Зв’язки спираються на наведені фрагменти та індекс джерел; конфігурації панелей не були показані повністю. README описує Docker-розробку й розгортання, але відповідних файлів немає в дереві, тому інфраструктурний потік тут не деталізовано.

Main entry points: [`app/Models/LoginSession.php`](https://github.com/amberlex78/laradocker/blob/main/app/Models/LoginSession.php) (Запис сесії), [`app/Livewire/ActiveSessionsTable.php`](https://github.com/amberlex78/laradocker/blob/main/app/Livewire/ActiveSessionsTable.php) (Активні сесії), [`app/Models/User.php`](https://github.com/amberlex78/laradocker/blob/main/app/Models/User.php) (Обліковий запис), [`app/Filament/Resources/Users/UserResource.php`](https://github.com/amberlex78/laradocker/blob/main/app/Filament/Resources/Users/UserResource.php) (Керування користувачами)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_auth["Автентифікація"]
  node_login_start["Початок сесії"]
  node_login_end["Завершення сесії"]
  node_terminate_sessions["Завершити інші"]
  node_track_middleware["Відстеження входу"]
  node_record_login["Обробник входу<br/>[RecordLogin.php]"]
  node_record_logout["Обробник виходу<br/>[RecordLogout.php]"]
  node_login_response["Відповідь входу"]
  node_logout_response["Відповідь виходу"]
  node_app_provider["Провайдер застосунку"]
end

subgraph group_sessions["Облік сесій"]
  node_session_model[("Запис сесії<br/>[LoginSession.php]")]
  node_active_sessions["Активні сесії"]
  node_history["Історія входів"]
  node_session_context["Контекст сесії"]
  node_status_resolver["Статус сесії"]
  node_device_column["Дані пристрою<br/>[DeviceColumn.php]"]
  node_device_detection["Визначення пристрою"]
end

subgraph group_panels["Filament-інтерфейс"]
  node_session_page["Сторінки сесій<br/>[ActiveSessions.php]"]
  node_history_page["Сторінка історії<br/>[SessionHistory.php]"]
  node_site_panel["Панель сайту"]
  node_admin_panel["Адмін-панель"]
  node_operator_panel["Панель оператора"]
  node_user_resource["Керування користувачами<br/>[UserResource.php]"]
  node_user_form["Форма користувача<br/>[UserForm.php]"]
  node_users_table["Таблиця користувачів<br/>[UsersTable.php]"]
  node_user_pages["Сторінки користувачів"]
  node_system_overview["Огляд системи<br/>[SystemOverview.php]"]
end

subgraph group_accounts["Облікові записи"]
  node_user_model[("Обліковий запис<br/>[User.php]")]
  node_user_policy["Політика доступу<br/>[UserPolicy.php]"]
  node_user_roles["Ролі користувачів<br/>[UserRole.php]"]
  node_home["Домашня сторінка<br/>[home.blade.php]"]
end

node_visitor(("Відвідувач"))
node_web_entry["HTTP-точка входу<br/>[index.php]"]
node_app_boot["Завантаження Laravel<br/>[app.php]"]
node_provider_registry["Реєстр провайдерів<br/>[providers.php]"]

node_visitor -->|"надсилає запит"| node_web_entry
node_web_entry -->|"завантажує"| node_app_boot
node_provider_registry -->|"реєструє"| node_app_provider
node_provider_registry -->|"реєструє"| node_site_panel
node_provider_registry -->|"реєструє"| node_admin_panel
node_provider_registry -->|"реєструє"| node_operator_panel
node_track_middleware -->|"викликає"| node_login_start
node_track_middleware -->|"оновлює"| node_session_model
node_record_login -->|"викликає"| node_login_start
node_record_logout -->|"викликає"| node_login_end
node_login_start -->|"створює"| node_session_model
node_login_end -->|"завершує"| node_session_model
node_terminate_sessions -->|"завершує"| node_session_model
node_active_sessions -->|"читає"| node_session_model
node_active_sessions -->|"викликає"| node_terminate_sessions
node_active_sessions -->|"знімає контекст"| node_session_context
node_active_sessions -->|"визначає стан"| node_status_resolver
node_active_sessions -->|"показує дані"| node_device_column
node_history -->|"читає"| node_session_model
node_history -->|"знімає контекст"| node_session_context
node_history -->|"визначає стан"| node_status_resolver
node_history -->|"показує дані"| node_device_column
node_status_resolver -->|"оцінює за"| node_session_context
node_status_resolver -->|"оцінює запис"| node_session_model
node_session_context -->|"читає ключ"| node_session_model
node_device_column -->|"визначає пристрій"| node_device_detection
node_device_column -->|"читає запис"| node_session_model
node_session_page -->|"відображає"| node_active_sessions
node_history_page -->|"відображає"| node_history
node_site_panel -->|"підключає"| node_track_middleware
node_site_panel -->|"перевіряє роль"| node_user_roles
node_site_panel -->|"використовує"| node_user_model
node_user_resource -->|"налаштовує"| node_user_form
node_user_resource -->|"налаштовує"| node_users_table
node_user_resource -->|"реєструє сторінки"| node_user_pages
node_user_resource -->|"керує"| node_user_model
node_user_resource -->|"використовує"| node_user_roles
node_user_model -->|"має сесії"| node_session_model
node_user_model -->|"зберігає роль"| node_user_roles
node_user_policy -->|"авторизує"| node_user_model
node_user_policy -->|"перевіряє роль"| node_user_roles
node_home -->|"відображає роль"| node_user_roles
node_system_overview -->|"агрегує дані"| node_user_model
node_system_overview -->|"групує ролі"| node_user_roles
node_app_provider -->|"прив'язує відповідь"| node_login_response
node_app_provider -->|"прив'язує відповідь"| node_logout_response

click node_web_entry "https://github.com/amberlex78/laradocker/blob/main/public/index.php"
click node_app_boot "https://github.com/amberlex78/laradocker/blob/main/bootstrap/app.php"
click node_provider_registry "https://github.com/amberlex78/laradocker/blob/main/bootstrap/providers.php"
click node_login_start "https://github.com/amberlex78/laradocker/blob/main/app/Actions/Auth/StartLoginSession.php"
click node_login_end "https://github.com/amberlex78/laradocker/blob/main/app/Actions/Auth/EndLoginSession.php"
click node_terminate_sessions "https://github.com/amberlex78/laradocker/blob/main/app/Actions/Auth/TerminateOtherSessions.php"
click node_track_middleware "https://github.com/amberlex78/laradocker/blob/main/app/Http/Middleware/TrackLoginSession.php"
click node_record_login "https://github.com/amberlex78/laradocker/blob/main/app/Listeners/RecordLogin.php"
click node_record_logout "https://github.com/amberlex78/laradocker/blob/main/app/Listeners/RecordLogout.php"
click node_login_response "https://github.com/amberlex78/laradocker/blob/main/app/Http/Responses/FilamentLoginResponse.php"
click node_logout_response "https://github.com/amberlex78/laradocker/blob/main/app/Http/Responses/FilamentLogoutResponse.php"
click node_session_model "https://github.com/amberlex78/laradocker/blob/main/app/Models/LoginSession.php"
click node_active_sessions "https://github.com/amberlex78/laradocker/blob/main/app/Livewire/ActiveSessionsTable.php"
click node_history "https://github.com/amberlex78/laradocker/blob/main/app/Livewire/LoginHistoryTable.php"
click node_session_context "https://github.com/amberlex78/laradocker/blob/main/app/Services/LoginSessionStatusContext.php"
click node_status_resolver "https://github.com/amberlex78/laradocker/blob/main/app/Services/LoginSessionStatusResolver.php"
click node_device_column "https://github.com/amberlex78/laradocker/blob/main/app/Filament/Tables/Columns/DeviceColumn.php"
click node_device_detection "https://github.com/amberlex78/laradocker/blob/main/app/Services/DeviceDetectionService.php"
click node_session_page "https://github.com/amberlex78/laradocker/blob/main/app/Filament/Site/Pages/ActiveSessions.php"
click node_history_page "https://github.com/amberlex78/laradocker/blob/main/app/Filament/Site/Pages/SessionHistory.php"
click node_site_panel "https://github.com/amberlex78/laradocker/blob/main/app/Providers/Filament/SitePanelProvider.php"
click node_admin_panel "https://github.com/amberlex78/laradocker/blob/main/app/Providers/Filament/AdminPanelProvider.php"
click node_operator_panel "https://github.com/amberlex78/laradocker/blob/main/app/Providers/Filament/OperatorPanelProvider.php"
click node_user_resource "https://github.com/amberlex78/laradocker/blob/main/app/Filament/Resources/Users/UserResource.php"
click node_user_form "https://github.com/amberlex78/laradocker/blob/main/app/Filament/Resources/Users/Schemas/UserForm.php"
click node_users_table "https://github.com/amberlex78/laradocker/blob/main/app/Filament/Resources/Users/Tables/UsersTable.php"
click node_user_pages "https://github.com/amberlex78/laradocker/tree/main/app/Filament/Resources/Users/Pages"
click node_user_model "https://github.com/amberlex78/laradocker/blob/main/app/Models/User.php"
click node_user_policy "https://github.com/amberlex78/laradocker/blob/main/app/Policies/UserPolicy.php"
click node_user_roles "https://github.com/amberlex78/laradocker/blob/main/app/Enums/UserRole.php"
click node_home "https://github.com/amberlex78/laradocker/blob/main/resources/views/home.blade.php"
click node_system_overview "https://github.com/amberlex78/laradocker/blob/main/app/Filament/Widgets/SystemOverview.php"
click node_app_provider "https://github.com/amberlex78/laradocker/blob/main/app/Providers/AppServiceProvider.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_login_start,node_login_end,node_terminate_sessions,node_track_middleware,node_record_login,node_record_logout,node_login_response,node_logout_response,node_app_provider toneBlue
class node_session_model,node_active_sessions,node_history,node_session_context,node_status_resolver,node_device_column,node_device_detection toneAmber
class node_session_page,node_history_page,node_site_panel,node_admin_panel,node_operator_panel,node_user_resource,node_user_form,node_users_table,node_user_pages,node_system_overview toneMint
class node_user_model,node_user_policy,node_user_roles,node_home toneRose
class node_visitor toneIndigo
class node_web_entry,node_app_boot,node_provider_registry toneTeal
```

## Components

### Автентифікація

- [Початок сесії](https://github.com/amberlex78/laradocker/blob/main/app/Actions/Auth/StartLoginSession.php): `app/Actions/Auth/StartLoginSession.php`
- [Завершення сесії](https://github.com/amberlex78/laradocker/blob/main/app/Actions/Auth/EndLoginSession.php): `app/Actions/Auth/EndLoginSession.php`
- [Завершити інші](https://github.com/amberlex78/laradocker/blob/main/app/Actions/Auth/TerminateOtherSessions.php): `app/Actions/Auth/TerminateOtherSessions.php`
- [Відстеження входу](https://github.com/amberlex78/laradocker/blob/main/app/Http/Middleware/TrackLoginSession.php): `app/Http/Middleware/TrackLoginSession.php`
- [Обробник входу](https://github.com/amberlex78/laradocker/blob/main/app/Listeners/RecordLogin.php): `app/Listeners/RecordLogin.php`
- [Обробник виходу](https://github.com/amberlex78/laradocker/blob/main/app/Listeners/RecordLogout.php): `app/Listeners/RecordLogout.php`
- [Відповідь входу](https://github.com/amberlex78/laradocker/blob/main/app/Http/Responses/FilamentLoginResponse.php): `app/Http/Responses/FilamentLoginResponse.php`
- [Відповідь виходу](https://github.com/amberlex78/laradocker/blob/main/app/Http/Responses/FilamentLogoutResponse.php): `app/Http/Responses/FilamentLogoutResponse.php`
- [Провайдер застосунку](https://github.com/amberlex78/laradocker/blob/main/app/Providers/AppServiceProvider.php): `app/Providers/AppServiceProvider.php`

### Облік сесій

- [Запис сесії](https://github.com/amberlex78/laradocker/blob/main/app/Models/LoginSession.php): `app/Models/LoginSession.php`
- [Активні сесії](https://github.com/amberlex78/laradocker/blob/main/app/Livewire/ActiveSessionsTable.php): `app/Livewire/ActiveSessionsTable.php`
- [Історія входів](https://github.com/amberlex78/laradocker/blob/main/app/Livewire/LoginHistoryTable.php): `app/Livewire/LoginHistoryTable.php`
- [Контекст сесії](https://github.com/amberlex78/laradocker/blob/main/app/Services/LoginSessionStatusContext.php): `app/Services/LoginSessionStatusContext.php`
- [Статус сесії](https://github.com/amberlex78/laradocker/blob/main/app/Services/LoginSessionStatusResolver.php): `app/Services/LoginSessionStatusResolver.php`
- [Дані пристрою](https://github.com/amberlex78/laradocker/blob/main/app/Filament/Tables/Columns/DeviceColumn.php): `app/Filament/Tables/Columns/DeviceColumn.php`
- [Визначення пристрою](https://github.com/amberlex78/laradocker/blob/main/app/Services/DeviceDetectionService.php): `app/Services/DeviceDetectionService.php`

### Filament-інтерфейс

- [Сторінки сесій](https://github.com/amberlex78/laradocker/blob/main/app/Filament/Site/Pages/ActiveSessions.php): `app/Filament/Site/Pages/ActiveSessions.php`
- [Сторінка історії](https://github.com/amberlex78/laradocker/blob/main/app/Filament/Site/Pages/SessionHistory.php): `app/Filament/Site/Pages/SessionHistory.php`
- [Панель сайту](https://github.com/amberlex78/laradocker/blob/main/app/Providers/Filament/SitePanelProvider.php): `app/Providers/Filament/SitePanelProvider.php`
- [Адмін-панель](https://github.com/amberlex78/laradocker/blob/main/app/Providers/Filament/AdminPanelProvider.php): `app/Providers/Filament/AdminPanelProvider.php`
- [Панель оператора](https://github.com/amberlex78/laradocker/blob/main/app/Providers/Filament/OperatorPanelProvider.php): `app/Providers/Filament/OperatorPanelProvider.php`
- [Керування користувачами](https://github.com/amberlex78/laradocker/blob/main/app/Filament/Resources/Users/UserResource.php): `app/Filament/Resources/Users/UserResource.php`
- [Форма користувача](https://github.com/amberlex78/laradocker/blob/main/app/Filament/Resources/Users/Schemas/UserForm.php): `app/Filament/Resources/Users/Schemas/UserForm.php`
- [Таблиця користувачів](https://github.com/amberlex78/laradocker/blob/main/app/Filament/Resources/Users/Tables/UsersTable.php): `app/Filament/Resources/Users/Tables/UsersTable.php`
- [Сторінки користувачів](https://github.com/amberlex78/laradocker/tree/main/app/Filament/Resources/Users/Pages): `app/Filament/Resources/Users/Pages`
- [Огляд системи](https://github.com/amberlex78/laradocker/blob/main/app/Filament/Widgets/SystemOverview.php): `app/Filament/Widgets/SystemOverview.php`

### Облікові записи

- [Обліковий запис](https://github.com/amberlex78/laradocker/blob/main/app/Models/User.php): `app/Models/User.php`
- [Політика доступу](https://github.com/amberlex78/laradocker/blob/main/app/Policies/UserPolicy.php): `app/Policies/UserPolicy.php`
- [Ролі користувачів](https://github.com/amberlex78/laradocker/blob/main/app/Enums/UserRole.php): `app/Enums/UserRole.php`
- [Домашня сторінка](https://github.com/amberlex78/laradocker/blob/main/resources/views/home.blade.php): `resources/views/home.blade.php`

### Other components

- **Відвідувач**
- [HTTP-точка входу](https://github.com/amberlex78/laradocker/blob/main/public/index.php): `public/index.php`
- [Завантаження Laravel](https://github.com/amberlex78/laradocker/blob/main/bootstrap/app.php): `bootstrap/app.php`
- [Реєстр провайдерів](https://github.com/amberlex78/laradocker/blob/main/bootstrap/providers.php): `bootstrap/providers.php`

## Connections

- Відвідувач → HTTP-точка входу: надсилає запит (evidence: `public/index.php`)
- HTTP-точка входу → Завантаження Laravel: завантажує (evidence: `public/index.php`)
- Реєстр провайдерів → Провайдер застосунку: реєструє (evidence: `bootstrap/providers.php`)
- Реєстр провайдерів → Панель сайту: реєструє (evidence: `bootstrap/providers.php`)
- Реєстр провайдерів → Адмін-панель: реєструє (evidence: `bootstrap/providers.php`)
- Реєстр провайдерів → Панель оператора: реєструє (evidence: `bootstrap/providers.php`)
- Відстеження входу → Початок сесії: викликає (evidence: `app/Http/Middleware/TrackLoginSession.php`)
- Відстеження входу → Запис сесії: оновлює (evidence: `app/Http/Middleware/TrackLoginSession.php`)
- Обробник входу → Початок сесії: викликає (evidence: `app/Listeners/RecordLogin.php`)
- Обробник виходу → Завершення сесії: викликає (evidence: `app/Listeners/RecordLogout.php`)
- Початок сесії → Запис сесії: створює (evidence: `app/Actions/Auth/StartLoginSession.php`)
- Завершення сесії → Запис сесії: завершує (evidence: `app/Actions/Auth/EndLoginSession.php`)
- Завершити інші → Запис сесії: завершує (evidence: `app/Actions/Auth/TerminateOtherSessions.php`)
- Активні сесії → Запис сесії: читає (evidence: `app/Livewire/ActiveSessionsTable.php`)
- Активні сесії → Завершити інші: викликає (evidence: `app/Livewire/ActiveSessionsTable.php`)
- Активні сесії → Контекст сесії: знімає контекст (evidence: `app/Livewire/ActiveSessionsTable.php`)
- Активні сесії → Статус сесії: визначає стан (evidence: `app/Livewire/ActiveSessionsTable.php`)
- Активні сесії → Дані пристрою: показує дані (evidence: `app/Livewire/ActiveSessionsTable.php`)
- Історія входів → Запис сесії: читає (evidence: `app/Livewire/LoginHistoryTable.php`)
- Історія входів → Контекст сесії: знімає контекст (evidence: `app/Livewire/LoginHistoryTable.php`)
- Історія входів → Статус сесії: визначає стан (evidence: `app/Livewire/LoginHistoryTable.php`)
- Історія входів → Дані пристрою: показує дані (evidence: `app/Livewire/LoginHistoryTable.php`)
- Статус сесії → Контекст сесії: оцінює за (evidence: `app/Services/LoginSessionStatusResolver.php`)
- Статус сесії → Запис сесії: оцінює запис (evidence: `app/Services/LoginSessionStatusResolver.php`)
- Контекст сесії → Запис сесії: читає ключ (evidence: `app/Services/LoginSessionStatusContext.php`)
- Дані пристрою → Визначення пристрою: визначає пристрій (evidence: `app/Filament/Tables/Columns/DeviceColumn.php`)
- Дані пристрою → Запис сесії: читає запис (evidence: `app/Filament/Tables/Columns/DeviceColumn.php`)
- Сторінки сесій → Активні сесії: відображає (evidence: `app/Filament/Site/Pages/ActiveSessions.php`)
- Сторінка історії → Історія входів: відображає (evidence: `app/Filament/Site/Pages/SessionHistory.php`)
- Панель сайту → Відстеження входу: підключає (evidence: `app/Providers/Filament/SitePanelProvider.php`)
- Панель сайту → Ролі користувачів: перевіряє роль (evidence: `app/Providers/Filament/SitePanelProvider.php`)
- Панель сайту → Обліковий запис: використовує (evidence: `app/Providers/Filament/SitePanelProvider.php`)
- Керування користувачами → Форма користувача: налаштовує (evidence: `app/Filament/Resources/Users/UserResource.php`)
- Керування користувачами → Таблиця користувачів: налаштовує (evidence: `app/Filament/Resources/Users/UserResource.php`)
- Керування користувачами → Сторінки користувачів: реєструє сторінки (evidence: `app/Filament/Resources/Users/UserResource.php`)
- Керування користувачами → Обліковий запис: керує (evidence: `app/Filament/Resources/Users/UserResource.php`)
- Керування користувачами → Ролі користувачів: використовує (evidence: `app/Filament/Resources/Users/UserResource.php`)
- Обліковий запис → Запис сесії: має сесії (evidence: `app/Models/User.php`)
- Обліковий запис → Ролі користувачів: зберігає роль (evidence: `app/Models/User.php`)
- Політика доступу → Обліковий запис: авторизує (evidence: `app/Policies/UserPolicy.php`)
- Політика доступу → Ролі користувачів: перевіряє роль (evidence: `app/Policies/UserPolicy.php`)
- Домашня сторінка → Ролі користувачів: відображає роль (evidence: `resources/views/home.blade.php`)
- Огляд системи → Обліковий запис: агрегує дані (evidence: `app/Filament/Widgets/SystemOverview.php`)
- Огляд системи → Ролі користувачів: групує ролі (evidence: `app/Filament/Widgets/SystemOverview.php`)
- Провайдер застосунку → Відповідь входу: прив'язує відповідь (evidence: `app/Providers/AppServiceProvider.php`)
- Провайдер застосунку → Відповідь виходу: прив'язує відповідь (evidence: `app/Providers/AppServiceProvider.php`)
