--- name: Activity Log System description: Hệ thống ghi log toàn diện mọi hành động trên portal - đã implement 2026-05-16 type: project --- Đã implement comprehensive activity log system ghi tất cả hành động create/update/delete/restore/login/logout cho cả admin và customer. **Files đã tạo:** - `database/migrations/2026_05_16_000001_create_activity_logs_table.php` - `app/Models/ActivityLog.php` - `app/Services/ActivityLogger.php` (singleton service) - `app/Traits/LogsActivity.php` (trait gắn vào Eloquent model) - `app/Repositories/ActivityLog/ActivityLogRepositoryInterface.php` - `app/Repositories/ActivityLog/ActivityLogRepository.php` - `app/Http/Controllers/Api/Admin/ActivityLog/ActivityLogController.php` **Models đã gắn trait LogsActivity:** Customer, Order, Invoice, Transaction, Service, Payment, VirtualMachines, ModuleVmware, ModuleHosting, ModuleDomain, IpPool, ModuleSnapshot, DnsDomain, DnsRecord, DnsServer, ModuleIpAddress, Product, Bank, User, Ticket, Addon, Discount **Auth logging:** Admin AuthController + Client ClientController đã log login/logout/login_failed/register **Customer endpoint logging (explicit calls, ngoài trait):** - `ClientController`: register, login, logout - `OrderController`: storeOrder, payOrder, retryOrderProvisioning, updateClientServiceAutoRenew, renewService - `VmController`: powerOn, powerOff, changeIp, changePort, restart, changePassword - `SnapshotController`: store, revert, destroy - `VmRebuildController`: rebuild, upgradeAddons - `ManualDepositController`: prepare, cancel, confirm - `TransactionController`: handle (tạo VNPay), returnCallback (VNPay success) **API Endpoints (admin):** - `GET /api/v1/administrator/activity-logs` — danh sách log với filter - `GET /api/v1/administrator/activity-logs/modules` — danh sách module names - `GET /api/v1/administrator/activity-logs/{id}` — chi tiết 1 log **Filter params:** log_name, event, causer_type (admin/customer/system), causer_id, causer_name, subject_type, subject_id, ip_address, date_from, date_to, search, per_page **Why:** User yêu cầu log tất cả hành động từ admin và customer để audit. **How to apply:** Khi thêm model mới, thêm `use LogsActivity;` vào model. Service ActivityLogger được resolve qua IoC container.