validate([ 'page' => ['sometimes', 'integer', 'min:1'], 'per_page' => ['sometimes', 'integer', 'in:10,20,50'], ]); $customer = auth('client')->user(); $history = ActivityLog::query() ->where('log_name', 'auth') ->where('causer_type', 'customer') ->where('causer_id', $customer->id) ->whereIn('event', ['login', 'logout']) ->latest('created_at') ->paginate($validated['per_page'] ?? 10); return response()->json([ 'error' => false, 'data' => collect($history->items())->map(fn (ActivityLog $log) => [ 'id' => $log->id, 'event' => $log->event, 'ip_address' => $log->ip_address, 'user_agent' => $log->user_agent, 'created_at' => $log->created_at?->toIso8601String(), ])->values(), 'meta' => [ 'current_page' => $history->currentPage(), 'per_page' => $history->perPage(), 'total' => $history->total(), 'last_page' => $history->lastPage(), ], ]); } public function updatePreferences(ClientPreferencesRequest $request) { $customer = auth('client')->user(); $oldValues = $customer->only(['email_marketing', 'receive_deposit']); $customer->fill($request->validated()); $dirty = $customer->getDirty(); $customer->save(); if ($dirty !== []) { $this->activityLogger->log( event: 'preferences_update', logName: 'Customer', description: "Customer {$customer->email} cập nhật tuỳ chọn tài khoản", subject: $customer, oldValues: array_intersect_key($oldValues, $dirty), newValues: $dirty, ); } return response()->json([ 'error' => false, 'message' => 'Đã lưu cài đặt tài khoản.', 'data' => ['client' => new ClientResource($customer->fresh())], ]); } }