aboutsummaryrefslogtreecommitdiffhomepage
path: root/migrations
diff options
context:
space:
mode:
authorwinter2024-12-20 17:57:36 +0000
committerwinter2024-12-20 18:01:26 +0000
commit8ca2452dd05f614d55d2fd3ce188d9d04f44d285 (patch)
tree7c850737c216df179ce00fa874b1de508894eb71 /migrations
parent583b1f8a865935dd4ae1b0c9fa40a4b347ea3d4d (diff)
implement deletion/tombstones?
Diffstat (limited to 'migrations')
-rw-r--r--migrations/20241220_152023_deletion.php60
1 files changed, 60 insertions, 0 deletions
diff --git a/migrations/20241220_152023_deletion.php b/migrations/20241220_152023_deletion.php
new file mode 100644
index 0000000..3b5dd9b
--- /dev/null
+++ b/migrations/20241220_152023_deletion.php
@@ -0,0 +1,60 @@
+<?php
+
+use \Digitigrade\Db\Migrator;
+
+Migrator::getInstance()->register(20241220_152023, function (PDO $db) {
+ // all fetchable/pushable objects can be marked as deleted, which will hide them, and make them get swept up later
+ // when they're actually deleted i also need any referents to be cascade-deleted
+ // also i noticed the column type for note.in_reply_to is wrong lol
+ $db->beginTransaction();
+ $db->exec(<<<END
+ ALTER TABLE actor ADD COLUMN deleted boolean not null default false;
+ ALTER TABLE note ADD COLUMN deleted boolean not null default false;
+ ALTER TABLE interaction ADD COLUMN deleted boolean not null default false;
+
+ ALTER TABLE actor_endpoints
+ DROP CONSTRAINT actor_endpoints_actor_id_fkey,
+ ADD foreign key (actor_id) references actor on delete cascade;
+ ALTER TABLE actor_extension
+ DROP CONSTRAINT actor_extension_actor_id_fkey,
+ ADD foreign key (actor_id) references actor on delete cascade;
+ ALTER TABLE actor_webfinger
+ DROP CONSTRAINT actor_webfinger_actor_fkey,
+ ADD foreign key (actor) references actor on delete cascade;
+ ALTER TABLE follow_relation
+ DROP CONSTRAINT follow_relation_object_fkey,
+ DROP CONSTRAINT follow_relation_subject_fkey,
+ ADD foreign key (object) references actor on delete cascade,
+ ADD foreign key (subject) references actor on delete cascade;
+ ALTER TABLE interaction
+ DROP CONSTRAINT interaction_author_fkey,
+ DROP CONSTRAINT interaction_target_fkey,
+ ADD foreign key (author) references actor on delete cascade,
+ ADD foreign key (target) references note on delete cascade;
+ ALTER TABLE note
+ DROP CONSTRAINT note_author_fkey,
+ DROP CONSTRAINT note_thread_apex_fkey,
+ DROP COLUMN in_reply_to,
+ ADD COLUMN in_reply_to bigint references note on delete set null,
+ ADD foreign key (author) references actor on delete cascade,
+ ADD foreign key (thread_apex) references note on delete set null;
+ ALTER TABLE note_attachment
+ DROP CONSTRAINT note_attachment_note_id_fkey,
+ ADD foreign key (note_id) references note on delete cascade;
+ ALTER TABLE note_extension
+ DROP CONSTRAINT note_extension_note_id_fkey,
+ ADD foreign key (note_id) references note on delete cascade;
+ ALTER TABLE note_formatted_content
+ DROP CONSTRAINT note_formatted_content_note_id_fkey,
+ ADD foreign key (note_id) references note on delete cascade;
+ ALTER TABLE note_mention
+ DROP CONSTRAINT note_mention_actor_id_fkey,
+ DROP CONSTRAINT note_mention_note_id_fkey,
+ ADD foreign key (actor_id) references actor on delete cascade,
+ ADD foreign key (note_id) references note on delete cascade;
+ ALTER TABLE note_privacy
+ DROP CONSTRAINT note_privacy_note_id_fkey,
+ ADD foreign key (note_id) references note on delete cascade;
+ END);
+ $db->commit();
+});