Repository navigation
Expand file tree
/
Copy pathschema.sql
More file actions
99 lines (84 loc) · 2.77 KB
/
Copy pathschema.sql
File metadata and controls
99 lines (84 loc) · 2.77 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
92
93
94
95
96
97
98
99
create table user (
id text primary key,
handle text unique,
name text,
bio text,
avatar_icon integer,
avatar_palette text,
created_at integer not null,
updated_at integer not null,
handle_changed_at integer,
quota integer,
check ((avatar_icon is null) = (avatar_palette is null))
) strict;
-- A handle somebody leaves is held here, against everybody but the person who left it.
create table vacated (
handle text primary key,
left_by text,
vacated_at integer not null
) strict;
create table account (
provider text not null check (provider in ('email', 'github', 'google')),
provider_id text not null check (provider_id = lower(provider_id)),
user_id text not null references user(id) on delete cascade,
created_at integer not null,
primary key (provider, provider_id)
) strict;
create unique index account_one_per_provider on account(user_id, provider);
create table session (
token_hash text primary key,
user_id text not null references user(id) on delete cascade,
created_at integer not null,
expires_at integer not null
) strict;
create index session_user on session(user_id);
create index session_expiry on session(expires_at);
create table email_code (
email text primary key check (email = lower(email)),
purpose text not null,
hash text not null,
attempts integer not null default 0,
created_at integer not null,
expires_at integer not null
) strict;
create index email_code_expiry on email_code(expires_at);
create table token (
id text primary key,
user_id text not null references user(id) on delete cascade,
name text not null check (length(name) > 0),
salt text not null,
hash text not null,
created_at integer not null,
used_at integer,
expires_at integer
) strict;
create index token_user on token(user_id);
create index token_expiry on token(expires_at);
create table package (
name text primary key check (name = lower(name)),
user_id text not null references user(id),
downloads integer not null default 0,
created_at integer not null
) strict;
create index package_user on package(user_id);
-- A reach counted once a day for each visitor, a hash of the address and the day standing for it.
create table download (
package text not null references package(name),
visitor text not null,
day text not null,
primary key (package, visitor, day)
) strict;
create table version (
package text not null references package(name),
version text not null,
digest text not null,
size integer not null,
description text,
license text,
hosts text,
published_at integer not null,
yanked_at integer,
primary key (package, version)
) strict;
create index version_package on version(package);
create virtual table page_search using fts5(package, path, title, section, anchor, body, tokenize = 'trigram');