2025-01-21 11:39:10 +00:00
|
|
|
CREATE TABLE instance (
|
|
|
|
id serial PRIMARY KEY,
|
|
|
|
domain text NOT NULL UNIQUE,
|
|
|
|
ap_id varchar(255) NOT NULL UNIQUE,
|
2024-02-01 15:46:36 +00:00
|
|
|
description text,
|
2025-01-21 11:39:10 +00:00
|
|
|
articles_url varchar(255) NOT NULL UNIQUE,
|
|
|
|
inbox_url varchar(255) NOT NULL,
|
|
|
|
public_key text NOT NULL,
|
2023-12-02 01:38:57 +00:00
|
|
|
private_key text,
|
2025-01-21 11:39:10 +00:00
|
|
|
last_refreshed_at timestamptz NOT NULL DEFAULT now(),
|
|
|
|
local bool NOT NULL
|
2023-12-02 01:38:57 +00:00
|
|
|
);
|
|
|
|
|
2025-01-21 11:39:10 +00:00
|
|
|
CREATE TABLE person (
|
|
|
|
id serial PRIMARY KEY,
|
|
|
|
username text NOT NULL,
|
|
|
|
ap_id varchar(255) NOT NULL UNIQUE,
|
|
|
|
inbox_url varchar(255) NOT NULL,
|
|
|
|
public_key text NOT NULL,
|
2023-12-08 21:21:31 +00:00
|
|
|
private_key text,
|
2025-01-21 11:39:10 +00:00
|
|
|
last_refreshed_at timestamptz NOT NULL DEFAULT now(),
|
|
|
|
local bool NOT NULL
|
2023-12-08 21:21:31 +00:00
|
|
|
);
|
|
|
|
|
2025-01-21 11:39:10 +00:00
|
|
|
CREATE TABLE local_user (
|
|
|
|
id serial PRIMARY KEY,
|
|
|
|
password_encrypted text NOT NULL,
|
2024-02-01 15:46:36 +00:00
|
|
|
person_id int REFERENCES person ON UPDATE CASCADE ON DELETE CASCADE NOT NULL,
|
2025-01-21 11:39:10 +00:00
|
|
|
admin bool NOT NULL
|
2023-12-08 21:21:31 +00:00
|
|
|
);
|
2023-12-05 14:50:10 +00:00
|
|
|
|
2025-01-21 11:39:10 +00:00
|
|
|
CREATE TABLE instance_follow (
|
|
|
|
id serial PRIMARY KEY,
|
2023-12-04 14:10:07 +00:00
|
|
|
instance_id int REFERENCES instance ON UPDATE CASCADE ON DELETE CASCADE NOT NULL,
|
2023-12-14 16:06:44 +00:00
|
|
|
follower_id int REFERENCES person ON UPDATE CASCADE ON DELETE CASCADE NOT NULL,
|
2025-01-21 11:39:10 +00:00
|
|
|
pending boolean NOT NULL,
|
|
|
|
UNIQUE (instance_id, follower_id)
|
2023-12-02 01:38:57 +00:00
|
|
|
);
|
2023-12-04 14:10:07 +00:00
|
|
|
|
2025-01-21 11:39:10 +00:00
|
|
|
CREATE TABLE article (
|
|
|
|
id serial PRIMARY KEY,
|
|
|
|
title text NOT NULL,
|
|
|
|
text text NOT NULL,
|
|
|
|
ap_id varchar(255) NOT NULL UNIQUE,
|
2023-12-02 01:38:57 +00:00
|
|
|
instance_id int REFERENCES instance ON UPDATE CASCADE ON DELETE CASCADE NOT NULL,
|
2025-01-21 11:39:10 +00:00
|
|
|
local bool NOT NULL,
|
|
|
|
protected bool NOT NULL
|
2023-11-29 15:41:29 +00:00
|
|
|
);
|
|
|
|
|
2025-01-21 11:39:10 +00:00
|
|
|
CREATE TABLE edit (
|
|
|
|
id serial PRIMARY KEY,
|
2023-12-18 15:40:27 +00:00
|
|
|
creator_id int REFERENCES person ON UPDATE CASCADE ON DELETE CASCADE NOT NULL,
|
2025-01-21 11:39:10 +00:00
|
|
|
hash uuid NOT NULL,
|
|
|
|
ap_id varchar(255) NOT NULL UNIQUE,
|
|
|
|
diff text NOT NULL,
|
|
|
|
summary text NOT NULL,
|
2023-11-29 15:41:29 +00:00
|
|
|
article_id int REFERENCES article ON UPDATE CASCADE ON DELETE CASCADE NOT NULL,
|
2025-01-21 11:39:10 +00:00
|
|
|
previous_version_id uuid NOT NULL,
|
|
|
|
created timestamptz NOT NULL
|
2023-12-05 00:17:02 +00:00
|
|
|
);
|
|
|
|
|
2025-01-21 11:39:10 +00:00
|
|
|
CREATE TABLE CONFLICT (
|
|
|
|
id serial PRIMARY KEY,
|
|
|
|
hash uuid NOT NULL,
|
|
|
|
diff text NOT NULL,
|
|
|
|
summary text NOT NULL,
|
2023-12-19 14:32:14 +00:00
|
|
|
creator_id int REFERENCES local_user ON UPDATE CASCADE ON DELETE CASCADE NOT NULL,
|
2023-12-05 00:17:02 +00:00
|
|
|
article_id int REFERENCES article ON UPDATE CASCADE ON DELETE CASCADE NOT NULL,
|
2025-01-21 11:39:10 +00:00
|
|
|
previous_version_id uuid NOT NULL
|
2023-12-19 15:15:43 +00:00
|
|
|
);
|
|
|
|
|
|
|
|
-- generate a jwt secret
|
|
|
|
CREATE EXTENSION IF NOT EXISTS pgcrypto;
|
|
|
|
|
|
|
|
CREATE TABLE jwt_secret (
|
|
|
|
id serial PRIMARY KEY,
|
|
|
|
secret varchar NOT NULL DEFAULT gen_random_uuid ()
|
|
|
|
);
|
|
|
|
|
|
|
|
INSERT INTO jwt_secret DEFAULT VALUES;
|