-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathschema.sql
More file actions
91 lines (84 loc) · 2.67 KB
/
Copy pathschema.sql
File metadata and controls
91 lines (84 loc) · 2.67 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
-- Reference only. Migrations are the source of truth.
-- Update this file when writing new migrations.
CREATE TABLE users (
id SERIAL PRIMARY KEY,
email TEXT UNIQUE NOT NULL,
name TEXT,
subdomain TEXT UNIQUE NOT NULL,
title TEXT NOT NULL,
bio TEXT,
avatar TEXT,
custom_domain TEXT UNIQUE,
domain_verified_at TIMESTAMPTZ,
domain_verification_token TEXT,
license TEXT,
links JSONB DEFAULT '[]',
theme TEXT,
accent_color TEXT,
plan VARCHAR NOT NULL DEFAULT 'free', -- 'free' | 'monthly' | 'yearly' | 'lifetime'
plan_expires_at TIMESTAMPTZ,
plan_cancels_at TIMESTAMPTZ,
stripe_customer_id VARCHAR,
created_at TIMESTAMPTZ DEFAULT NOW(),
updated_at TIMESTAMPTZ DEFAULT NOW()
);
CREATE TABLE posts (
id SERIAL PRIMARY KEY,
user_id INTEGER NOT NULL REFERENCES users(id),
slug TEXT NOT NULL,
title TEXT,
body TEXT NOT NULL,
is_draft BOOLEAN NOT NULL DEFAULT FALSE,
is_pinned BOOLEAN NOT NULL DEFAULT FALSE,
published_at TIMESTAMPTZ,
sent_at TIMESTAMPTZ,
created_at TIMESTAMPTZ DEFAULT NOW(),
updated_at TIMESTAMPTZ DEFAULT NOW(),
UNIQUE(user_id, slug)
);
CREATE TABLE subscribers (
id SERIAL PRIMARY KEY,
user_id INTEGER NOT NULL REFERENCES users(id),
email TEXT NOT NULL,
confirmed BOOLEAN NOT NULL DEFAULT FALSE,
token TEXT NOT NULL UNIQUE,
created_at TIMESTAMPTZ DEFAULT NOW()
);
CREATE TABLE feeds (
id SERIAL PRIMARY KEY,
url TEXT NOT NULL UNIQUE,
feed_url TEXT,
feed_title TEXT,
feed_icon_url TEXT,
latest_post_title TEXT,
latest_post_url TEXT,
last_updated TIMESTAMPTZ,
last_fetched TIMESTAMPTZ,
created_at TIMESTAMPTZ DEFAULT NOW()
);
CREATE TABLE blogroll (
id SERIAL PRIMARY KEY,
user_id INTEGER NOT NULL REFERENCES users(id) ON DELETE CASCADE,
name TEXT NOT NULL,
feed_id INTEGER NOT NULL REFERENCES feeds(id),
sort_order INTEGER NOT NULL DEFAULT 0,
created_at TIMESTAMPTZ DEFAULT NOW()
);
CREATE TABLE indieauth_codes (
id SERIAL PRIMARY KEY,
user_id INTEGER NOT NULL REFERENCES users(id) ON DELETE CASCADE,
code TEXT UNIQUE NOT NULL,
client_id TEXT NOT NULL,
redirect_uri TEXT NOT NULL,
scope TEXT NOT NULL DEFAULT '',
code_challenge TEXT NOT NULL,
code_challenge_method TEXT NOT NULL DEFAULT 'S256',
token TEXT UNIQUE,
used_at TIMESTAMPTZ,
expires_at TIMESTAMPTZ NOT NULL,
created_at TIMESTAMPTZ DEFAULT NOW()
);
CREATE INDEX idx_posts_user_id ON posts (user_id);
CREATE INDEX idx_subscribers_user_id ON subscribers (user_id);
CREATE INDEX idx_blogroll_user_id ON blogroll (user_id);
CREATE INDEX idx_indieauth_codes_user_id ON indieauth_codes (user_id);