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
@@ -4016,14 +4016,19 @@ class DatabasesController extends Controller
if ($request->has('comment')) {
$env->comment = $request->comment;
}
$env->save();
// One audit row with the database context, instead of a second row from the model.
$env->withoutAuditLogging(fn () => $env->save());
$changedFields = auditSavedFields($env);
auditLog('api.database.env_updated', [
'team_id' => $teamId,
'database_uuid' => $database->uuid,
'env_uuid' => $env->uuid,
'env_key' => $env->key,
]);
if ($changedFields !== []) {
auditLog('api.database.env_updated', [
'team_id' => $teamId,
'database_uuid' => $database->uuid,
'env_uuid' => $env->uuid,
'env_key' => $env->key,
'changed_fields' => $changedFields,
]);
}
return response()->json($this->removeSensitiveEnvData($env))->setStatusCode(201);
}