From a52be3b488dcf8edd2cf11bf4bd5e50f77b048f2 Mon Sep 17 00:00:00 2001 From: bwees Date: Wed, 18 Feb 2026 23:40:25 -0600 Subject: [PATCH] fix: audit table implementation --- server/src/schema/functions.ts | 4 ++-- ...etEditSync.ts => 1771479910447-AssetEditSync.ts} | 13 +++++-------- server/src/schema/tables/asset-edit-audit.table.ts | 3 +++ 3 files changed, 10 insertions(+), 10 deletions(-) rename server/src/schema/migrations/{1769026065658-AssetEditSync.ts => 1771479910447-AssetEditSync.ts} (88%) diff --git a/server/src/schema/functions.ts b/server/src/schema/functions.ts index d4e9364600..6741ac7d6b 100644 --- a/server/src/schema/functions.ts +++ b/server/src/schema/functions.ts @@ -293,8 +293,8 @@ export const asset_edit_audit = registerFunction({ language: 'PLPGSQL', body: ` BEGIN - INSERT INTO asset_edit_audit ("assetId") - SELECT "assetId" + INSERT INTO asset_edit_audit ("editId", "assetId") + SELECT "id", "assetId" FROM OLD; RETURN NULL; END`, diff --git a/server/src/schema/migrations/1769026065658-AssetEditSync.ts b/server/src/schema/migrations/1771479910447-AssetEditSync.ts similarity index 88% rename from server/src/schema/migrations/1769026065658-AssetEditSync.ts rename to server/src/schema/migrations/1771479910447-AssetEditSync.ts index 86d3c6b86c..ce17548561 100644 --- a/server/src/schema/migrations/1769026065658-AssetEditSync.ts +++ b/server/src/schema/migrations/1771479910447-AssetEditSync.ts @@ -6,14 +6,15 @@ export async function up(db: Kysely): Promise { LANGUAGE PLPGSQL AS $$ BEGIN - INSERT INTO asset_edit_audit ("assetId") - SELECT "assetId" + INSERT INTO asset_edit_audit ("editId", "assetId") + SELECT "id", "assetId" FROM OLD; RETURN NULL; END $$;`.execute(db); await sql`CREATE TABLE "asset_edit_audit" ( "id" uuid NOT NULL DEFAULT immich_uuid_v7(), + "editId" uuid NOT NULL, "assetId" uuid NOT NULL, "deletedAt" timestamp with time zone NOT NULL DEFAULT clock_timestamp(), CONSTRAINT "asset_edit_audit_pkey" PRIMARY KEY ("id") @@ -28,12 +29,8 @@ export async function up(db: Kysely): Promise { FOR EACH STATEMENT WHEN (pg_trigger_depth() = 0) EXECUTE FUNCTION asset_edit_audit();`.execute(db); - await sql`INSERT INTO "migration_overrides" ("name", "value") VALUES ('function_asset_edit_audit', '{"type":"function","name":"asset_edit_audit","sql":"CREATE OR REPLACE FUNCTION asset_edit_audit()\\n RETURNS TRIGGER\\n LANGUAGE PLPGSQL\\n AS $$\\n BEGIN\\n INSERT INTO asset_edit_audit (\\"assetId\\")\\n SELECT \\"assetId\\"\\n FROM OLD;\\n RETURN NULL;\\n END\\n $$;"}'::jsonb);`.execute( - db, - ); - await sql`INSERT INTO "migration_overrides" ("name", "value") VALUES ('trigger_asset_edit_audit', '{"type":"trigger","name":"asset_edit_audit","sql":"CREATE OR REPLACE TRIGGER \\"asset_edit_audit\\"\\n AFTER DELETE ON \\"asset_edit\\"\\n REFERENCING OLD TABLE AS \\"old\\"\\n FOR EACH STATEMENT\\n WHEN (pg_trigger_depth() = 0)\\n EXECUTE FUNCTION asset_edit_audit();"}'::jsonb);`.execute( - db, - ); + await sql`INSERT INTO "migration_overrides" ("name", "value") VALUES ('function_asset_edit_audit', '{"type":"function","name":"asset_edit_audit","sql":"CREATE OR REPLACE FUNCTION asset_edit_audit()\\n RETURNS TRIGGER\\n LANGUAGE PLPGSQL\\n AS $$\\n BEGIN\\n INSERT INTO asset_edit_audit (\\"editId\\", \\"assetId\\")\\n SELECT \\"id\\", \\"assetId\\"\\n FROM OLD;\\n RETURN NULL;\\n END\\n $$;"}'::jsonb);`.execute(db); + await sql`INSERT INTO "migration_overrides" ("name", "value") VALUES ('trigger_asset_edit_audit', '{"type":"trigger","name":"asset_edit_audit","sql":"CREATE OR REPLACE TRIGGER \\"asset_edit_audit\\"\\n AFTER DELETE ON \\"asset_edit\\"\\n REFERENCING OLD TABLE AS \\"old\\"\\n FOR EACH STATEMENT\\n WHEN (pg_trigger_depth() = 0)\\n EXECUTE FUNCTION asset_edit_audit();"}'::jsonb);`.execute(db); } export async function down(db: Kysely): Promise { diff --git a/server/src/schema/tables/asset-edit-audit.table.ts b/server/src/schema/tables/asset-edit-audit.table.ts index d08350ef70..9ac5290c3b 100644 --- a/server/src/schema/tables/asset-edit-audit.table.ts +++ b/server/src/schema/tables/asset-edit-audit.table.ts @@ -6,6 +6,9 @@ export class AssetEditAuditTable { @PrimaryGeneratedUuidV7Column() id!: Generated; + @Column({ type: 'uuid' }) + editId!: string; + @Column({ type: 'uuid', index: true }) assetId!: string;