Add ToS agreement and support for minors and their legal guardians
[hcoop/portal.git] / tables.sql
CommitLineData
f3f3ad24
AC
1CREATE TABLE MemberApp(
2 id INTEGER PRIMARY KEY,
3 name TEXT NOT NULL,
4 rname TEXT NOT NULL,
5 gname TEXT,
6 email TEXT NOT NULL,
7 forward BOOLEAN NOT NULL,
8 uses TEXT NOT NULL,
9 other TEXT NOT NULL,
10 passwd TEXT NOT NULL,
11 status INTEGER NOT NULL,
12 applied TIMESTAMP NOT NULL,
13 ipaddr TEXT,
14 confirmed TIMESTAMP,
15 decided TIMESTAMP,
16 msg TEXT NOT NULL);
17
18CREATE SEQUENCE MemberAppSeq START 1;
19
208e2cbc
AC
20CREATE TABLE Balance(
21 id INTEGER PRIMARY KEY,
22 name TEXT NOT NULL,
23 amount REAL NOT NULL);
24
25CREATE SEQUENCE BalanceSeq START 1;
26
27INSERT INTO Balance
28 (id, name, amount) VALUES
29 (0, 'adam', 0.0);
30
31CREATE TABLE WebUser(
32 id INTEGER PRIMARY KEY,
33 name TEXT NOT NULL,
34 rname TEXT NOT NULL,
35 bal INTEGER NOT NULL,
36 joined TIMESTAMP NOT NULL,
f3f3ad24
AC
37 app INTEGER NOT NULL,
38 FOREIGN KEY (bal) REFERENCES Balance(id) ON DELETE CASCADE,
39 FOREIGN KEY (app) REFERENCES MemberApp(id) ON DELETE CASCADE);
208e2cbc
AC
40
41CREATE SEQUENCE WebUserSeq START 1;
42
43INSERT INTO WebUser
c9247c1b
AC
44 (id, name, rname, bal, joined) VALUES
45 (0, 'adam', 'Adam Chlipala', 0, CURRENT_TIMESTAMP);
208e2cbc
AC
46
47CREATE TABLE WebGroup(
48 id INTEGER PRIMARY KEY,
49 name TEXT NOT NULL);
50
c9247c1b 51CREATE SEQUENCE WebGroupSeq START 2;
208e2cbc
AC
52
53INSERT INTO WebGroup
54 (id, name) VALUES
55 (0, 'root');
56
c9247c1b
AC
57INSERT INTO WebGroup
58 (id, name) VALUES
59 (1, 'paying');
60
208e2cbc
AC
61CREATE TABLE Membership(
62 grp INTEGER NOT NULL,
63 usr INTEGER NOT NULL,
64 PRIMARY KEY (grp, usr),
65 FOREIGN KEY (grp) REFERENCES WebGroup(id) ON DELETE CASCADE,
66 FOREIGN KEY (usr) REFERENCES WebUser(id) ON DELETE CASCADE);
67
68INSERT INTO Membership
69 (grp, usr) VALUES
70 (0, 0);
71
c9247c1b
AC
72INSERT INTO Membership
73 (grp, usr) VALUES
74 (1, 0);
75
208e2cbc
AC
76CREATE TABLE Transaction(
77 id INTEGER PRIMARY KEY,
78 descr TEXT NOT NULL,
79 amount REAL NOT NULL,
80 d DATE NOT NULL,
81 stamp TIMESTAMP NOT NULL);
82
83CREATE SEQUENCE TransactionSeq START 1;
84
85CREATE TABLE Charge(
86 trn INTEGER NOT NULL,
87 usr INTEGER NOT NULL,
88 amount REAL NOT NULL,
89 PRIMARY KEY (trn, usr),
90 FOREIGN KEY (trn) REFERENCES Transaction(id) ON DELETE CASCADE,
91 FOREIGN KEY (usr) REFERENCES WebUser(id) ON DELETE CASCADE);
92
e68ddb80
AC
93CREATE TABLE Poll(
94 id INTEGER PRIMARY KEY,
95 usr INTEGER NOT NULL,
96 title TEXT NOT NULL,
97 descr TEXT NOT NULL,
98 starts DATE NOT NULL,
99 ends DATE NOT NULL,
100 votes INTEGER NOT NULL,
101 FOREIGN KEY (usr) REFERENCES WebUser(id) ON DELETE CASCADE);
102
103CREATE SEQUENCE PollSeq START 1;
104
105CREATE TABLE PollChoice(
106 id INTEGER PRIMARY KEY,
107 pol INTEGER NOT NULL,
108 seq REAL NOT NULL,
109 descr TEXT NOT NULL,
110 FOREIGN KEY (pol) REFERENCES Poll(id) ON DELETE CASCADE);
111
112CREATE SEQUENCE PollChoiceSeq START 1;
113
114CREATE TABLE Vote(
115 usr INTEGER NOT NULL,
116 cho INTEGER NOT NULL,
117 PRIMARY KEY (usr, cho),
118 FOREIGN KEY (usr) REFERENCES WebUser(id) ON DELETE CASCADE,
119 FOREIGN KEY (cho) REFERENCES PollChoice(id) ON DELETE CASCADE);
120
d6223be9
AC
121CREATE TABLE ContactKind(
122 id INTEGER PRIMARY KEY,
123 name TEXT NOT NULL,
124 url BOOLEAN NOT NULL,
125 urlPrefix TEXT,
126 urlPostfix TEXT);
e68ddb80 127
d6223be9 128CREATE SEQUENCE ContactKindSeq START 1;
208e2cbc 129
d6223be9 130CREATE TABLE Contact(
ee587f7f 131 id INTEGER PRIMARY KEY,
d6223be9
AC
132 usr INTEGER NOT NULL,
133 knd INTEGER NOT NULL,
134 v TEXT NOT NULL,
135 priv INTEGER NOT NULL,
d6223be9
AC
136 FOREIGN KEY (usr) REFERENCES WebUser(id) ON DELETE CASCADE,
137 FOREIGN KEY (knd) REFERENCES ContactKind(id) ON DELETE CASCADE);
ee587f7f
AC
138
139CREATE SEQUENCE ContactSeq START 1;
b340786b
AC
140
141CREATE TABLE Location(
142 id INTEGER PRIMARY KEY,
143 parent INTEGER,
144 name TEXT NOT NULL,
145 FOREIGN KEY (parent) REFERENCES Location(id) ON DELETE CASCADE);
146
147CREATE SEQUENCE LocationSeq START 1;
148
149CREATE TABLE Lives(
150 usr INTEGER NOT NULL,
151 loc INTEGER NOT NULL,
152 PRIMARY KEY (usr, loc),
153 FOREIGN KEY (usr) REFERENCES WebUser(id) ON DELETE CASCADE,
154 FOREIGN KEY (loc) REFERENCES Location(id) ON DELETE CASCADE);
88a858ea
AC
155
156CREATE TABLE Link(
157 id INTEGER PRIMARY KEY,
158 usr INTEGER NOT NULL,
159 title TEXT NOT NULL,
160 url TEXT NOT NULL,
161 descr TEXT NOT NULL,
162 FOREIGN KEY (usr) REFERENCES WebUser(id) ON DELETE CASCADE);
163
164CREATE SEQUENCE LinkSeq START 1;
165
5a2812ca
AC
166CREATE TABLE SupCategory(
167 id INTEGER PRIMARY KEY,
168 grp INTEGER NOT NULL,
169 name TEXT NOT NULL,
170 descr TEXT NOT NULL,
171 FOREIGN KEY (grp) REFERENCES WebGroup(id) ON DELETE CASCADE);
172
173CREATE SEQUENCE SupCategorySeq START 1;
174
175CREATE TABLE SupIssue(
176 id INTEGER PRIMARY KEY,
177 usr INTEGER NOT NULL,
178 cat INTEGER NOT NULL,
179 title TEXT NOT NULL,
180 priv BOOLEAN NOT NULL,
181 status INTEGER NOT NULL,
182 stamp TIMESTAMP NOT NULL,
183 FOREIGN KEY (usr) REFERENCES WebUser(id) ON DELETE CASCADE,
184 FOREIGN KEY (cat) REFERENCES SupCategory(id) ON DELETE CASCADE);
185
186CREATE SEQUENCE SupIssueSeq START 1;
187
188CREATE TABLE SupPost(
189 id INTEGER PRIMARY KEY,
190 usr INTEGER NOT NULL,
191 iss INTEGER NOT NULL,
192 body TEXT NOT NULL,
193 stamp TIMESTAMP NOT NULL,
194 FOREIGN KEY (usr) REFERENCES WebUser(id) ON DELETE CASCADE,
195 FOREIGN KEY (iss) REFERENCES SupIssue(id) ON DELETE CASCADE);
196
197CREATE SEQUENCE SupPostSeq START 1;
198
199CREATE TABLE SupSubscription(
200 usr INTEGER NOT NULL,
201 cat INTEGER NOT NULL,
202 PRIMARY KEY (usr, cat),
203 FOREIGN KEY (usr) REFERENCES WebUser(id) ON DELETE CASCADE,
204 FOREIGN KEY (cat) REFERENCES SupCategory(id) ON DELETE CASCADE);
205
6b23a78b
AC
206CREATE TABLE Apt(
207 id INTEGER PRIMARY KEY,
208 usr INTEGER NOT NULL,
5da9f4a9 209 data TEXT NOT NULL,
6b23a78b
AC
210 msg TEXT NOT NULL,
211 status INTEGER NOT NULL,
212 stamp TIMESTAMP NOT NULL,
213 FOREIGN KEY (usr) REFERENCES WebUser(id) ON DELETE CASCADE);
5a2812ca 214
6b23a78b 215CREATE SEQUENCE AptSeq START 1;
5da9f4a9
AC
216
217CREATE TABLE Domain(
218 id INTEGER PRIMARY KEY,
219 usr INTEGER NOT NULL,
220 data TEXT NOT NULL,
221 msg TEXT NOT NULL,
222 status INTEGER NOT NULL,
223 stamp TIMESTAMP NOT NULL,
224 FOREIGN KEY (usr) REFERENCES WebUser(id) ON DELETE CASCADE);
225
226CREATE SEQUENCE DomainSeq START 1;
9d1c0e98
AC
227
228CREATE TABLE MailingList(
229 id INTEGER PRIMARY KEY,
230 usr INTEGER NOT NULL,
231 data TEXT NOT NULL,
232 msg TEXT NOT NULL,
233 status INTEGER NOT NULL,
234 stamp TIMESTAMP NOT NULL,
235 FOREIGN KEY (usr) REFERENCES WebUser(id) ON DELETE CASCADE);
236
237CREATE SEQUENCE MailingListSeq START 1;
27e48ace
AC
238
239CREATE TABLE DirectoryPref(
240 usr INTEGER PRIMARY KEY,
241 FOREIGN KEY (usr) REFERENCES WebUser(id) ON DELETE CASCADE);
a90da8b1 242
a90da8b1
AC
243CREATE TABLE AppVote(
244 app INTEGER NOT NULL,
245 usr INTEGER NOT NULL,
246 PRIMARY KEY (app, usr),
247 FOREIGN KEY (app) REFERENCES MemberApp(id) ON DELETE CASCADE,
248 FOREIGN KEY (usr) REFERENCES WebUser(id) ON DELETE CASCADE);
249