Adding unique constraint for activity ap_id. Fixes #1878

This commit is contained in:
Dessalines 2021-11-22 09:21:31 -05:00
parent 76c4378011
commit 744f242061
5 changed files with 30 additions and 3 deletions

View file

@ -127,7 +127,7 @@ mod tests {
let inserted_activity = Activity::create(&conn, &activity_form).unwrap();
let expected_activity = Activity {
ap_id: Some(ap_id.clone()),
ap_id: ap_id.clone(),
id: inserted_activity.id,
data: test_json,
local: true,

View file

@ -5,7 +5,7 @@ table! {
local -> Bool,
published -> Timestamp,
updated -> Nullable<Timestamp>,
ap_id -> Nullable<Text>,
ap_id -> Text,
sensitive -> Nullable<Bool>,
}
}

View file

@ -10,7 +10,7 @@ pub struct Activity {
pub local: bool,
pub published: chrono::NaiveDateTime,
pub updated: Option<chrono::NaiveDateTime>,
pub ap_id: Option<DbUrl>,
pub ap_id: DbUrl,
pub sensitive: Option<bool>,
}

View file

@ -0,0 +1,5 @@
alter table activity alter column ap_id drop not null;
create unique index idx_activity_unique_apid on activity ((data ->> 'id'::text));
drop index idx_activity_ap_id;

View file

@ -0,0 +1,22 @@
-- Delete the empty ap_ids
delete from activity where ap_id is null;
-- Make it required
alter table activity alter column ap_id set not null;
-- Delete dupes, keeping the first one
delete
from activity
where id not in (
select min(id)
from activity
group by ap_id
);
-- The index
create unique index idx_activity_ap_id on activity(ap_id);
-- Drop the old index
drop index idx_activity_unique_apid;