A community based topic aggregation platform built on atproto
1-- +goose Up
2CREATE TABLE community_blocks (
3 id SERIAL PRIMARY KEY,
4 user_did TEXT NOT NULL CHECK (user_did ~ '^did:(plc|web):[a-zA-Z0-9._:%-]+$'),
5 community_did TEXT NOT NULL CHECK (community_did ~ '^did:(plc|web):[a-zA-Z0-9._:%-]+$'),
6 blocked_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT CURRENT_TIMESTAMP,
7
8 -- AT-Proto metadata (block record lives in user's repo)
9 -- These are required for atProto record verification and federation
10 record_uri TEXT NOT NULL, -- atProto record identifier (at://user_did/social.coves.community.block/rkey)
11 record_cid TEXT NOT NULL, -- Content address (critical for verification)
12
13 UNIQUE(user_did, community_did)
14);
15
16-- Indexes for efficient queries
17CREATE INDEX idx_blocks_user ON community_blocks(user_did);
18CREATE INDEX idx_blocks_community ON community_blocks(community_did);
19CREATE INDEX idx_blocks_user_community ON community_blocks(user_did, community_did);
20CREATE INDEX idx_blocks_blocked_at ON community_blocks(blocked_at);
21
22-- +goose Down
23DROP INDEX IF EXISTS idx_blocks_blocked_at;
24DROP INDEX IF EXISTS idx_blocks_user_community;
25DROP INDEX IF EXISTS idx_blocks_community;
26DROP INDEX IF EXISTS idx_blocks_user;
27DROP TABLE IF EXISTS community_blocks;