desc('Audits worker') ->inject('message') ->inject('dbForProject') ->callback(fn ($message, $dbForProject) => $this->action($message, $dbForProject)); } /** * @param Message $message * @param Database $dbForProject * @return void * @throws Throwable * @throws \Utopia\Database\Exception * @throws Authorization * @throws Structure */ public function action(Message $message, Database $dbForProject): void { $payload = $message->getPayload() ?? []; if (empty($payload)) { throw new Exception('Missing payload'); } $event = $payload['event'] ?? ''; $auditPayload = $payload['payload'] ?? ''; $mode = $payload['mode'] ?? ''; $resource = $payload['resource'] ?? ''; $userAgent = $payload['userAgent'] ?? ''; $ip = $payload['ip'] ?? ''; $user = new Document($payload['user'] ?? []); $userName = $user->getAttribute('name', ''); $userEmail = $user->getAttribute('email', ''); $audit = new Audit($dbForProject); $audit->log( userId: $user->getInternalId(), // Pass first, most verbose event pattern event: $event, resource: $resource, userAgent: $userAgent, ip: $ip, location: '', data: [ 'userId' => $user->getId(), 'userName' => $userName, 'userEmail' => $userEmail, 'mode' => $mode, 'data' => $auditPayload, ] ); } }