From 4776a7351422b32f4c310856fe4a2cf038134edf Mon Sep 17 00:00:00 2001 From: aecsocket <43144841+aecsocket@users.noreply.github.com> Date: Mon, 3 Aug 2026 18:01:36 +0100 Subject: [PATCH] migration does not auto-set updated_at --- ...7577935ac84730b52a2ee090512a460cf512432.json} | 4 ++-- ...b9201239cefbe174f4a5cc4b8eb21a10268cd73.json} | 4 ++-- ...03120000_delphi_detail_verdict_timestamps.sql | 4 ++-- .../routes/internal/moderation/tech_review.rs | 16 ++++++++++------ 4 files changed, 16 insertions(+), 12 deletions(-) rename apps/labrinth/.sqlx/{query-81de9687f92b6be616272e3188259d50d772f9aafa17d89fff3c79fbf77b682a.json => query-7ca9b8f5699f4d60acc50647b7577935ac84730b52a2ee090512a460cf512432.json} (64%) rename apps/labrinth/.sqlx/{query-cfdcc9daa9264d3881441d82e5bf567eab291d80f3c69fdfb6b3d3de12691cc9.json => query-c40c2085202bc4486568fb24db9201239cefbe174f4a5cc4b8eb21a10268cd73.json} (72%) diff --git a/apps/labrinth/.sqlx/query-81de9687f92b6be616272e3188259d50d772f9aafa17d89fff3c79fbf77b682a.json b/apps/labrinth/.sqlx/query-7ca9b8f5699f4d60acc50647b7577935ac84730b52a2ee090512a460cf512432.json similarity index 64% rename from apps/labrinth/.sqlx/query-81de9687f92b6be616272e3188259d50d772f9aafa17d89fff3c79fbf77b682a.json rename to apps/labrinth/.sqlx/query-7ca9b8f5699f4d60acc50647b7577935ac84730b52a2ee090512a460cf512432.json index 1e2380952b..606f1b807f 100644 --- a/apps/labrinth/.sqlx/query-81de9687f92b6be616272e3188259d50d772f9aafa17d89fff3c79fbf77b682a.json +++ b/apps/labrinth/.sqlx/query-7ca9b8f5699f4d60acc50647b7577935ac84730b52a2ee090512a460cf512432.json @@ -1,6 +1,6 @@ { "db_name": "PostgreSQL", - "query": "\n WITH incoming AS (\n SELECT *\n FROM unnest($1::text[], $2::text[]) WITH ORDINALITY\n AS u(detail_key, verdict, ord)\n ),\n latest AS (\n SELECT DISTINCT ON (detail_key)\n detail_key,\n verdict\n FROM incoming\n ORDER BY detail_key, ord DESC\n ),\n deleted AS (\n DELETE FROM delphi_global_detail_verdicts dgdv\n USING latest\n WHERE\n dgdv.detail_key = latest.detail_key\n AND latest.verdict = 'pending'\n RETURNING 1\n )\n INSERT INTO delphi_global_detail_verdicts (\n detail_key,\n verdict\n )\n SELECT\n detail_key,\n verdict::delphi_report_issue_status\n FROM latest\n WHERE verdict != 'pending'\n ON CONFLICT (detail_key)\n DO UPDATE SET\n verdict = EXCLUDED.verdict,\n updated_at = NOW()\n ", + "query": "\n WITH incoming AS (\n SELECT *\n FROM unnest($1::text[], $2::text[]) WITH ORDINALITY\n AS u(detail_key, verdict, ord)\n ),\n latest AS (\n SELECT DISTINCT ON (detail_key)\n detail_key,\n verdict\n FROM incoming\n ORDER BY detail_key, ord DESC\n ),\n deleted AS (\n DELETE FROM delphi_global_detail_verdicts dgdv\n USING latest\n WHERE\n dgdv.detail_key = latest.detail_key\n AND latest.verdict = 'pending'\n RETURNING 1\n )\n INSERT INTO delphi_global_detail_verdicts (\n detail_key,\n verdict,\n updated_at\n )\n SELECT\n detail_key,\n verdict::delphi_report_issue_status,\n NOW()\n FROM latest\n WHERE verdict != 'pending'\n ON CONFLICT (detail_key)\n DO UPDATE SET\n verdict = EXCLUDED.verdict,\n updated_at = EXCLUDED.updated_at\n ", "describe": { "columns": [], "parameters": { @@ -11,5 +11,5 @@ }, "nullable": [] }, - "hash": "81de9687f92b6be616272e3188259d50d772f9aafa17d89fff3c79fbf77b682a" + "hash": "7ca9b8f5699f4d60acc50647b7577935ac84730b52a2ee090512a460cf512432" } diff --git a/apps/labrinth/.sqlx/query-cfdcc9daa9264d3881441d82e5bf567eab291d80f3c69fdfb6b3d3de12691cc9.json b/apps/labrinth/.sqlx/query-c40c2085202bc4486568fb24db9201239cefbe174f4a5cc4b8eb21a10268cd73.json similarity index 72% rename from apps/labrinth/.sqlx/query-cfdcc9daa9264d3881441d82e5bf567eab291d80f3c69fdfb6b3d3de12691cc9.json rename to apps/labrinth/.sqlx/query-c40c2085202bc4486568fb24db9201239cefbe174f4a5cc4b8eb21a10268cd73.json index 1fd9748f40..81c343b584 100644 --- a/apps/labrinth/.sqlx/query-cfdcc9daa9264d3881441d82e5bf567eab291d80f3c69fdfb6b3d3de12691cc9.json +++ b/apps/labrinth/.sqlx/query-c40c2085202bc4486568fb24db9201239cefbe174f4a5cc4b8eb21a10268cd73.json @@ -1,6 +1,6 @@ { "db_name": "PostgreSQL", - "query": "\n WITH incoming AS (\n SELECT *\n FROM unnest($1::bigint[], $2::text[]) WITH ORDINALITY\n AS u(detail_id, verdict, ord)\n ),\n resolved AS (\n SELECT\n i.ord,\n didws.project_id,\n didws.key AS detail_key,\n i.verdict\n FROM incoming i\n INNER JOIN delphi_issue_details_with_statuses didws ON didws.id = i.detail_id\n INNER JOIN delphi_report_issues dri ON dri.id = didws.issue_id\n WHERE\n -- see delphi.rs todo comment\n dri.issue_type != '__dummy'\n ),\n validated AS (\n SELECT\n (SELECT COUNT(*) FROM incoming) AS incoming_count,\n (SELECT COUNT(*) FROM resolved) AS resolved_count\n ),\n latest AS (\n SELECT DISTINCT ON (project_id, detail_key)\n project_id,\n detail_key,\n verdict\n FROM resolved\n ORDER BY project_id, detail_key, ord DESC\n ),\n deleted AS (\n DELETE FROM delphi_issue_detail_verdicts didv\n USING latest\n WHERE\n didv.project_id = latest.project_id\n AND didv.detail_key = latest.detail_key\n AND latest.verdict = 'pending'\n RETURNING 1\n ),\n upserted AS (\n INSERT INTO delphi_issue_detail_verdicts (\n project_id,\n detail_key,\n verdict\n )\n SELECT\n project_id,\n detail_key,\n verdict::delphi_report_issue_status\n FROM latest\n WHERE verdict != 'pending'\n ON CONFLICT (project_id, detail_key)\n DO UPDATE SET\n verdict = EXCLUDED.verdict,\n updated_at = NOW()\n RETURNING 1\n )\n SELECT\n (v.incoming_count = v.resolved_count) AS \"all_found!\",\n (SELECT COUNT(*) FROM upserted) AS \"upserted_count!\"\n FROM validated v\n ", + "query": "\n WITH incoming AS (\n SELECT *\n FROM unnest($1::bigint[], $2::text[]) WITH ORDINALITY\n AS u(detail_id, verdict, ord)\n ),\n resolved AS (\n SELECT\n i.ord,\n didws.project_id,\n didws.key AS detail_key,\n i.verdict\n FROM incoming i\n INNER JOIN delphi_issue_details_with_statuses didws ON didws.id = i.detail_id\n INNER JOIN delphi_report_issues dri ON dri.id = didws.issue_id\n WHERE\n -- see delphi.rs todo comment\n dri.issue_type != '__dummy'\n ),\n validated AS (\n SELECT\n (SELECT COUNT(*) FROM incoming) AS incoming_count,\n (SELECT COUNT(*) FROM resolved) AS resolved_count\n ),\n latest AS (\n SELECT DISTINCT ON (project_id, detail_key)\n project_id,\n detail_key,\n verdict\n FROM resolved\n ORDER BY project_id, detail_key, ord DESC\n ),\n deleted AS (\n DELETE FROM delphi_issue_detail_verdicts didv\n USING latest\n WHERE\n didv.project_id = latest.project_id\n AND didv.detail_key = latest.detail_key\n AND latest.verdict = 'pending'\n RETURNING 1\n ),\n upserted AS (\n INSERT INTO delphi_issue_detail_verdicts (\n project_id,\n detail_key,\n verdict,\n updated_at\n )\n SELECT\n project_id,\n detail_key,\n verdict::delphi_report_issue_status,\n NOW()\n FROM latest\n WHERE verdict != 'pending'\n ON CONFLICT (project_id, detail_key)\n DO UPDATE SET\n verdict = EXCLUDED.verdict,\n updated_at = EXCLUDED.updated_at\n RETURNING 1\n )\n SELECT\n (v.incoming_count = v.resolved_count) AS \"all_found!\",\n (SELECT COUNT(*) FROM upserted) AS \"upserted_count!\"\n FROM validated v\n ", "describe": { "columns": [ { @@ -25,5 +25,5 @@ null ] }, - "hash": "cfdcc9daa9264d3881441d82e5bf567eab291d80f3c69fdfb6b3d3de12691cc9" + "hash": "c40c2085202bc4486568fb24db9201239cefbe174f4a5cc4b8eb21a10268cd73" } diff --git a/apps/labrinth/migrations/20260803120000_delphi_detail_verdict_timestamps.sql b/apps/labrinth/migrations/20260803120000_delphi_detail_verdict_timestamps.sql index 253805ea7f..1c76f65d59 100644 --- a/apps/labrinth/migrations/20260803120000_delphi_detail_verdict_timestamps.sql +++ b/apps/labrinth/migrations/20260803120000_delphi_detail_verdict_timestamps.sql @@ -1,5 +1,5 @@ ALTER TABLE delphi_issue_detail_verdicts - ADD COLUMN updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(); + ADD COLUMN updated_at TIMESTAMPTZ; ALTER TABLE delphi_global_detail_verdicts - ADD COLUMN updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(); + ADD COLUMN updated_at TIMESTAMPTZ; diff --git a/apps/labrinth/src/routes/internal/moderation/tech_review.rs b/apps/labrinth/src/routes/internal/moderation/tech_review.rs index be1e2d7f56..ea694627eb 100644 --- a/apps/labrinth/src/routes/internal/moderation/tech_review.rs +++ b/apps/labrinth/src/routes/internal/moderation/tech_review.rs @@ -1288,18 +1288,20 @@ pub async fn update_issue_details( INSERT INTO delphi_issue_detail_verdicts ( project_id, detail_key, - verdict + verdict, + updated_at ) SELECT project_id, detail_key, - verdict::delphi_report_issue_status + verdict::delphi_report_issue_status, + NOW() FROM latest WHERE verdict != 'pending' ON CONFLICT (project_id, detail_key) DO UPDATE SET verdict = EXCLUDED.verdict, - updated_at = NOW() + updated_at = EXCLUDED.updated_at RETURNING 1 ) SELECT @@ -1433,17 +1435,19 @@ pub async fn update_global_issue_details( ) INSERT INTO delphi_global_detail_verdicts ( detail_key, - verdict + verdict, + updated_at ) SELECT detail_key, - verdict::delphi_report_issue_status + verdict::delphi_report_issue_status, + NOW() FROM latest WHERE verdict != 'pending' ON CONFLICT (detail_key) DO UPDATE SET verdict = EXCLUDED.verdict, - updated_at = NOW() + updated_at = EXCLUDED.updated_at "#, &detail_keys, &verdicts,