Skip to content

Commit 55bed87

Browse files
committed
Deduplicate tech review report rows
1 parent 650123c commit 55bed87

File tree

1 file changed

+57
-52
lines changed

1 file changed

+57
-52
lines changed

apps/labrinth/src/routes/internal/moderation/tech_review.rs

Lines changed: 57 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -191,7 +191,6 @@ async fn get_issue(
191191
)
192192
) AS "data!: sqlx::types::Json<FileIssue>"
193193
FROM delphi_report_issues dri
194-
LEFT JOIN delphi_report_issue_details drid ON dri.id = drid.issue_id
195194
WHERE dri.id = $1
196195
"#,
197196
issue_id as DelphiReportIssueId,
@@ -230,7 +229,7 @@ async fn get_report(
230229

231230
let row = sqlx::query!(
232231
r#"
233-
SELECT
232+
SELECT DISTINCT ON (dr.id)
234233
to_jsonb(dr)
235234
|| jsonb_build_object(
236235
'file_id', to_base62(f.id),
@@ -256,8 +255,6 @@ async fn get_report(
256255
FROM delphi_reports dr
257256
INNER JOIN files f ON f.id = dr.file_id
258257
INNER JOIN versions v ON v.id = f.version_id
259-
INNER JOIN delphi_report_issues dri ON dri.report_id = dr.id
260-
LEFT JOIN delphi_report_issue_details drid ON drid.issue_id = dri.id
261258
WHERE dr.id = $1
262259
"#,
263260
report_id as DelphiReportId,
@@ -320,59 +317,67 @@ async fn search_projects(
320317
let mut rows = sqlx::query!(
321318
r#"
322319
SELECT
323-
m.id AS "project_id: DBProjectId",
324-
t.id AS "project_thread_id: DBThreadId",
325-
to_jsonb(dr)
326-
|| jsonb_build_object(
327-
'file_id', to_base62(f.id),
328-
'version_id', to_base62(v.id),
329-
'project_id', to_base62(v.mod_id),
330-
'file_name', f.filename,
331-
'file_size', f.size,
332-
'flag_reason', 'delphi',
333-
'issues', json_array(
334-
SELECT
335-
to_jsonb(dri)
336-
|| jsonb_build_object(
337-
'details', json_array(
338-
SELECT jsonb_build_object(
339-
'id', drid.id,
340-
'issue_id', drid.issue_id,
341-
'key', drid.key,
342-
'file_path', drid.file_path,
343-
-- ignore `decompiled_source`
344-
'data', drid.data,
345-
'severity', drid.severity
320+
project_id AS "project_id: DBProjectId",
321+
project_thread_id AS "project_thread_id: DBThreadId",
322+
report AS "report!: sqlx::types::Json<FileReport>"
323+
FROM (
324+
SELECT DISTINCT ON (dr.id)
325+
dr.id AS report_id,
326+
dr.created AS report_created,
327+
dr.severity AS report_severity,
328+
m.id AS project_id,
329+
t.id AS project_thread_id,
330+
331+
to_jsonb(dr)
332+
|| jsonb_build_object(
333+
'file_id', to_base62(f.id),
334+
'version_id', to_base62(v.id),
335+
'project_id', to_base62(v.mod_id),
336+
'file_name', f.filename,
337+
'file_size', f.size,
338+
'flag_reason', 'delphi',
339+
'issues', json_array(
340+
SELECT
341+
to_jsonb(dri)
342+
|| jsonb_build_object(
343+
'details', json_array(
344+
SELECT jsonb_build_object(
345+
'id', drid.id,
346+
'issue_id', drid.issue_id,
347+
'key', drid.key,
348+
'file_path', drid.file_path,
349+
-- ignore `decompiled_source`
350+
'data', drid.data,
351+
'severity', drid.severity
352+
)
353+
FROM delphi_report_issue_details drid
354+
WHERE drid.issue_id = dri.id
346355
)
347-
FROM delphi_report_issue_details drid
348-
WHERE drid.issue_id = dri.id
349356
)
350-
)
351-
FROM delphi_report_issues dri
352-
WHERE dri.report_id = dr.id
353-
)
354-
) AS "report!: sqlx::types::Json<FileReport>"
355-
FROM delphi_reports dr
356-
INNER JOIN files f ON f.id = dr.file_id
357-
INNER JOIN versions v ON v.id = f.version_id
358-
INNER JOIN mods m ON m.id = v.mod_id
359-
INNER JOIN threads t ON t.mod_id = m.id
360-
INNER JOIN delphi_report_issues dri ON dri.report_id = dr.id
361-
LEFT JOIN delphi_report_issue_details drid ON drid.issue_id = dri.id
362-
363-
-- filtering
364-
LEFT JOIN mods_categories mc ON mc.joining_mod_id = m.id
365-
LEFT JOIN categories c ON c.id = mc.joining_category_id
366-
WHERE
367-
-- project type
368-
(cardinality($1::int[]) = 0 OR c.project_type = ANY($1::int[]))
357+
FROM delphi_report_issues dri
358+
WHERE dri.report_id = dr.id
359+
)
360+
) AS report
361+
FROM delphi_reports dr
362+
INNER JOIN files f ON f.id = dr.file_id
363+
INNER JOIN versions v ON v.id = f.version_id
364+
INNER JOIN mods m ON m.id = v.mod_id
365+
INNER JOIN threads t ON t.mod_id = m.id
366+
367+
-- filtering
368+
LEFT JOIN mods_categories mc ON mc.joining_mod_id = m.id
369+
LEFT JOIN categories c ON c.id = mc.joining_category_id
370+
WHERE
371+
-- project type
372+
(cardinality($1::int[]) = 0 OR c.project_type = ANY($1::int[]))
373+
) t
369374
370375
-- sorting
371376
ORDER BY
372-
CASE WHEN $2 = 'created_asc' THEN created ELSE TO_TIMESTAMP(0) END ASC,
373-
CASE WHEN $2 = 'created_desc' THEN created ELSE TO_TIMESTAMP(0) END DESC,
374-
CASE WHEN $2 = 'severity_asc' THEN dr.severity ELSE 'low'::delphi_severity END ASC,
375-
CASE WHEN $2 = 'severity_desc' THEN dr.severity ELSE 'low'::delphi_severity END DESC
377+
CASE WHEN $2 = 'created_asc' THEN t.report_created ELSE TO_TIMESTAMP(0) END ASC,
378+
CASE WHEN $2 = 'created_desc' THEN t.report_created ELSE TO_TIMESTAMP(0) END DESC,
379+
CASE WHEN $2 = 'severity_asc' THEN t.report_severity ELSE 'low'::delphi_severity END ASC,
380+
CASE WHEN $2 = 'severity_desc' THEN t.report_severity ELSE 'low'::delphi_severity END DESC
376381
377382
-- pagination
378383
LIMIT $3

0 commit comments

Comments
 (0)