fix(audit): stop duplicate and empty audit rows

- Set env var version and compose parsing version while creating, so a create writes one row
- Record no rows for the auto-created preview copy of an env var
- Record env and application API updates only with the fields that really changed
- Store no change data for new env vars, and null for empty change data
- Store metadata team_id as an integer
- Drop the unused level and resource indexes of audit_events

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Andras Bacsai
2026-11-05 23:49:17 +01:00
co-authored by Claude Opus 5.5
parent 13298591d8
commit b7d0e6be2a
10 changed files with 111 additions and 39 deletions
@@ -1584,14 +1584,19 @@ class ServicesController extends Controller
if ($request->has('comment')) {
$env->comment = $request->comment;
}
$env->save();
// One audit row with the service context, instead of a second row from the model.
$env->withoutAuditLogging(fn () => $env->save());
$changedFields = auditSavedFields($env);
auditLog('api.service.env_updated', [
'team_id' => $teamId,
'service_uuid' => $service->uuid,
'env_uuid' => $env->uuid,
'env_key' => $env->key,
]);
if ($changedFields !== []) {
auditLog('api.service.env_updated', [
'team_id' => $teamId,
'service_uuid' => $service->uuid,
'env_uuid' => $env->uuid,
'env_key' => $env->key,
'changed_fields' => $changedFields,
]);
}
return response()->json($this->removeSensitiveData($env))->setStatusCode(201);
}