Merge branch 'combined_tables_2' into combined_profile

This commit is contained in:
Dessalines 2024-12-08 08:50:07 -05:00
commit 40fead2bee
4 changed files with 27 additions and 28 deletions

View file

@ -180,8 +180,7 @@ pub struct LtreeDef(pub String);
pub struct DbUrl(pub(crate) Box<Url>);
#[derive(Debug, Copy, Clone, Hash, Eq, PartialEq, Serialize, Deserialize, Default)]
#[cfg_attr(feature = "full", derive(DieselNewType, TS))]
#[cfg_attr(feature = "full", ts(export))]
#[cfg_attr(feature = "full", derive(DieselNewType))]
/// The report combined id
pub struct ReportCombinedId(i32);

View file

@ -6,27 +6,21 @@ use chrono::{DateTime, Utc};
use i_love_jesus::CursorKeysModule;
use serde::{Deserialize, Serialize};
use serde_with::skip_serializing_none;
#[cfg(feature = "full")]
use ts_rs::TS;
#[skip_serializing_none]
#[derive(PartialEq, Eq, Serialize, Deserialize, Debug, Clone)]
#[cfg_attr(
feature = "full",
derive(Identifiable, Queryable, Selectable, TS, CursorKeysModule)
derive(Identifiable, Queryable, Selectable, CursorKeysModule)
)]
#[cfg_attr(feature = "full", diesel(table_name = report_combined))]
#[cfg_attr(feature = "full", diesel(check_for_backend(diesel::pg::Pg)))]
#[cfg_attr(feature = "full", ts(export))]
#[cfg_attr(feature = "full", cursor_keys_module(name = report_combined_keys))]
/// A combined reports table.
pub struct ReportCombined {
pub id: ReportCombinedId,
pub published: DateTime<Utc>,
#[cfg_attr(feature = "full", ts(optional))]
pub post_report_id: Option<PostReportId>,
#[cfg_attr(feature = "full", ts(optional))]
pub comment_report_id: Option<CommentReportId>,
#[cfg_attr(feature = "full", ts(optional))]
pub private_message_report_id: Option<PrivateMessageReportId>,
}

View file

@ -16,6 +16,7 @@ use diesel::{
ExpressionMethods,
JoinOnDsl,
NullableExpressionMethods,
PgExpressionMethods,
QueryDsl,
SelectableHelper,
};
@ -82,9 +83,12 @@ impl ReportCombinedViewInternal {
Some(my_person_id),
post::community_id,
))
.filter(post_report::resolved.eq(false))
.or_filter(comment_report::resolved.eq(false))
.or_filter(private_message_report::resolved.eq(false))
.filter(
post_report::resolved
.or(comment_report::resolved)
.or(private_message_report::resolved)
.is_distinct_from(true),
)
.into_boxed();
if let Some(community_id) = community_id {
@ -191,9 +195,7 @@ impl ReportCombinedQuery {
.or(comment::post_id.eq(post::id)),
),
)
// The item creator
// You can now use aliases::person1.field(person::id) / item_creator
// for all the item actions
// The item creator (`item_creator` is the id of this person)
.inner_join(
aliases::person1.on(
post::creator_id
@ -312,9 +314,9 @@ impl ReportCombinedQuery {
query = query
.filter(
post_report::resolved
.eq(false)
.or(comment_report::resolved.eq(false))
.or(private_message_report::resolved.eq(false)),
.or(comment_report::resolved)
.or(private_message_report::resolved)
.is_distinct_from(true),
)
// TODO: when a `then_asc` method is added, use it here, make the id sort direction match,
// and remove the separate index; unless additional columns are added to this sort

View file

@ -7,7 +7,7 @@ CREATE TABLE report_combined (
comment_report_id int UNIQUE REFERENCES comment_report ON UPDATE CASCADE ON DELETE CASCADE,
private_message_report_id int UNIQUE REFERENCES private_message_report ON UPDATE CASCADE ON DELETE CASCADE,
-- Make sure only one of the columns is not null
CHECK ((post_report_id IS NOT NULL)::integer + (comment_report_id IS NOT NULL)::integer + (private_message_report_id IS NOT NULL)::integer = 1)
CHECK (num_nonnulls (post_report_id, comment_report_id, private_message_report_id) = 1)
);
CREATE INDEX idx_report_combined_published ON report_combined (published DESC, id DESC);
@ -15,23 +15,27 @@ CREATE INDEX idx_report_combined_published ON report_combined (published DESC, i
CREATE INDEX idx_report_combined_published_asc ON report_combined (reverse_timestamp_sort (published) DESC, id DESC);
-- Updating the history
INSERT INTO report_combined (published, post_report_id)
INSERT INTO report_combined (published, post_report_id, comment_report_id, private_message_report_id)
SELECT
published,
id
id,
NULL,
NULL
FROM
post_report;
INSERT INTO report_combined (published, comment_report_id)
post_report
UNION ALL
SELECT
published,
id
NULL,
id,
NULL
FROM
comment_report;
INSERT INTO report_combined (published, private_message_report_id)
comment_report
UNION ALL
SELECT
published,
NULL,
NULL,
id
FROM
private_message_report;