lemmy/migrations/2024-10-29-090055_private-community/up.sql
Nutomic ad90cd77f9
Implement private communities (#5076)
* add private visibility

* filter private communities in post_view.rs

* also filter in comment_view

* community follower state

* remove unused method

* sql fmt

* add CommunityFollower.approved_by

* implement api endpoints

* api changes

* only admins can create private community for now

* add local api tests

* fix api tests

* follow remote private community

* use authorized fetch for content in private community

* federate community visibility

* dont mark content in private community as public

* expose ApprovalRequired in api

* also check content fetchable for outbox/featured

* address private community content to followers

* implement reject activity

* fix tests

* add files

* remove local api tests

* dont use delay

* is_new_instance

* single query for is_new_instance

* return subscribed type for pending follow

* working

* need to catch errors in waitUntil

* clippy

* fix query

* lint for unused async

* diesel.toml comment

* add comment

* avoid db reads

* rename approved_by to approver_id

* add helper

* form init

* list pending follows should return items for all communities

* clippy

* ci

* fix down migration

* fix api tests

* references

* rename

* run git diff

* ci

* fix schema check

* fix joins

* ci

* ci

* skip_serializing_none

* fix test

---------

Co-authored-by: Dessalines <dessalines@users.noreply.github.com>
2024-11-07 05:49:05 -05:00

48 lines
1.3 KiB
PL/PgSQL

ALTER TYPE community_visibility
ADD value 'Private';
-- Change `community_follower.pending` to `state` enum
CREATE TYPE community_follower_state AS enum (
'Accepted',
'Pending',
'ApprovalRequired'
);
ALTER TABLE community_follower
ALTER COLUMN pending DROP DEFAULT;
CREATE OR REPLACE FUNCTION convert_follower_state (b bool)
RETURNS community_follower_state
LANGUAGE sql
AS $$
SELECT
CASE WHEN b = TRUE THEN
'Pending'::community_follower_state
ELSE
'Accepted'::community_follower_state
END
$$;
ALTER TABLE community_follower
ALTER COLUMN pending TYPE community_follower_state
USING convert_follower_state (pending);
DROP FUNCTION convert_follower_state;
ALTER TABLE community_follower RENAME COLUMN pending TO state;
-- Add column for mod who approved the private community follower
-- Dont use foreign key here, otherwise joining to person table doesnt work easily
ALTER TABLE community_follower
ADD COLUMN approver_id int REFERENCES person ON UPDATE CASCADE ON DELETE CASCADE;
-- Enable signed fetch, necessary to fetch content in private communities
ALTER TABLE ONLY local_site
ALTER COLUMN federation_signed_fetch SET DEFAULT TRUE;
UPDATE
local_site
SET
federation_signed_fetch = TRUE;