Reports for figuring out which accounts to freeze or boot; most of new SSL request...
[bpt/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,
a2d53da2 16 msg TEXT NOT NULL,
d5f8418b
AC
17 unix_passwd TEXT NOT NULL,
18 paypal TEXT,
19 checkout TEXT);
f3f3ad24
AC
20
21CREATE SEQUENCE MemberAppSeq START 1;
22
208e2cbc
AC
23CREATE TABLE Balance(
24 id INTEGER PRIMARY KEY,
25 name TEXT NOT NULL,
26 amount REAL NOT NULL);
27
28CREATE SEQUENCE BalanceSeq START 1;
29
30INSERT INTO Balance
31 (id, name, amount) VALUES
32 (0, 'adam', 0.0);
33
34CREATE TABLE WebUser(
35 id INTEGER PRIMARY KEY,
36 name TEXT NOT NULL,
37 rname TEXT NOT NULL,
38 bal INTEGER NOT NULL,
39 joined TIMESTAMP NOT NULL,
f3f3ad24 40 app INTEGER NOT NULL,
aaa50197 41 shares INTEGER NOT NULL,
d5f8418b
AC
42 paypal TEXT,
43 checkout TEXT
f3f3ad24
AC
44 FOREIGN KEY (bal) REFERENCES Balance(id) ON DELETE CASCADE,
45 FOREIGN KEY (app) REFERENCES MemberApp(id) ON DELETE CASCADE);
208e2cbc
AC
46
47CREATE SEQUENCE WebUserSeq START 1;
48
49INSERT INTO WebUser
c9247c1b
AC
50 (id, name, rname, bal, joined) VALUES
51 (0, 'adam', 'Adam Chlipala', 0, CURRENT_TIMESTAMP);
208e2cbc
AC
52
53CREATE TABLE WebGroup(
54 id INTEGER PRIMARY KEY,
55 name TEXT NOT NULL);
56
c9247c1b 57CREATE SEQUENCE WebGroupSeq START 2;
208e2cbc
AC
58
59INSERT INTO WebGroup
60 (id, name) VALUES
61 (0, 'root');
62
c9247c1b
AC
63INSERT INTO WebGroup
64 (id, name) VALUES
65 (1, 'paying');
66
208e2cbc
AC
67CREATE TABLE Membership(
68 grp INTEGER NOT NULL,
69 usr INTEGER NOT NULL,
70 PRIMARY KEY (grp, usr),
71 FOREIGN KEY (grp) REFERENCES WebGroup(id) ON DELETE CASCADE,
72 FOREIGN KEY (usr) REFERENCES WebUser(id) ON DELETE CASCADE);
73
74INSERT INTO Membership
75 (grp, usr) VALUES
76 (0, 0);
77
c9247c1b
AC
78INSERT INTO Membership
79 (grp, usr) VALUES
80 (1, 0);
81
208e2cbc
AC
82CREATE TABLE Transaction(
83 id INTEGER PRIMARY KEY,
84 descr TEXT NOT NULL,
85 amount REAL NOT NULL,
86 d DATE NOT NULL,
87 stamp TIMESTAMP NOT NULL);
88
89CREATE SEQUENCE TransactionSeq START 1;
90
91CREATE TABLE Charge(
92 trn INTEGER NOT NULL,
93 usr INTEGER NOT NULL,
94 amount REAL NOT NULL,
95 PRIMARY KEY (trn, usr),
96 FOREIGN KEY (trn) REFERENCES Transaction(id) ON DELETE CASCADE,
97 FOREIGN KEY (usr) REFERENCES WebUser(id) ON DELETE CASCADE);
98
e68ddb80
AC
99CREATE TABLE Poll(
100 id INTEGER PRIMARY KEY,
101 usr INTEGER NOT NULL,
102 title TEXT NOT NULL,
103 descr TEXT NOT NULL,
104 starts DATE NOT NULL,
105 ends DATE NOT NULL,
106 votes INTEGER NOT NULL,
a0a15865 107 official BOOL NOT NULL,
e68ddb80
AC
108 FOREIGN KEY (usr) REFERENCES WebUser(id) ON DELETE CASCADE);
109
110CREATE SEQUENCE PollSeq START 1;
111
112CREATE TABLE PollChoice(
113 id INTEGER PRIMARY KEY,
114 pol INTEGER NOT NULL,
115 seq REAL NOT NULL,
116 descr TEXT NOT NULL,
117 FOREIGN KEY (pol) REFERENCES Poll(id) ON DELETE CASCADE);
118
119CREATE SEQUENCE PollChoiceSeq START 1;
120
121CREATE TABLE Vote(
122 usr INTEGER NOT NULL,
123 cho INTEGER NOT NULL,
124 PRIMARY KEY (usr, cho),
125 FOREIGN KEY (usr) REFERENCES WebUser(id) ON DELETE CASCADE,
126 FOREIGN KEY (cho) REFERENCES PollChoice(id) ON DELETE CASCADE);
127
d6223be9
AC
128CREATE TABLE ContactKind(
129 id INTEGER PRIMARY KEY,
130 name TEXT NOT NULL,
131 url BOOLEAN NOT NULL,
132 urlPrefix TEXT,
133 urlPostfix TEXT);
e68ddb80 134
d6223be9 135CREATE SEQUENCE ContactKindSeq START 1;
208e2cbc 136
d6223be9 137CREATE TABLE Contact(
ee587f7f 138 id INTEGER PRIMARY KEY,
d6223be9
AC
139 usr INTEGER NOT NULL,
140 knd INTEGER NOT NULL,
141 v TEXT NOT NULL,
142 priv INTEGER NOT NULL,
d6223be9
AC
143 FOREIGN KEY (usr) REFERENCES WebUser(id) ON DELETE CASCADE,
144 FOREIGN KEY (knd) REFERENCES ContactKind(id) ON DELETE CASCADE);
ee587f7f
AC
145
146CREATE SEQUENCE ContactSeq START 1;
b340786b
AC
147
148CREATE TABLE Location(
149 id INTEGER PRIMARY KEY,
150 parent INTEGER,
151 name TEXT NOT NULL,
152 FOREIGN KEY (parent) REFERENCES Location(id) ON DELETE CASCADE);
153
154CREATE SEQUENCE LocationSeq START 1;
155
156CREATE TABLE Lives(
157 usr INTEGER NOT NULL,
158 loc INTEGER NOT NULL,
159 PRIMARY KEY (usr, loc),
160 FOREIGN KEY (usr) REFERENCES WebUser(id) ON DELETE CASCADE,
161 FOREIGN KEY (loc) REFERENCES Location(id) ON DELETE CASCADE);
88a858ea
AC
162
163CREATE TABLE Link(
164 id INTEGER PRIMARY KEY,
165 usr INTEGER NOT NULL,
166 title TEXT NOT NULL,
167 url TEXT NOT NULL,
168 descr TEXT NOT NULL,
169 FOREIGN KEY (usr) REFERENCES WebUser(id) ON DELETE CASCADE);
170
171CREATE SEQUENCE LinkSeq START 1;
172
5a2812ca
AC
173CREATE TABLE SupCategory(
174 id INTEGER PRIMARY KEY,
175 grp INTEGER NOT NULL,
176 name TEXT NOT NULL,
177 descr TEXT NOT NULL,
178 FOREIGN KEY (grp) REFERENCES WebGroup(id) ON DELETE CASCADE);
179
180CREATE SEQUENCE SupCategorySeq START 1;
181
182CREATE TABLE SupIssue(
183 id INTEGER PRIMARY KEY,
184 usr INTEGER NOT NULL,
185 cat INTEGER NOT NULL,
186 title TEXT NOT NULL,
187 priv BOOLEAN NOT NULL,
188 status INTEGER NOT NULL,
189 stamp TIMESTAMP NOT NULL,
4d46d3eb
AC
190 pstamp TIMESTAMP,
191 cstamp TIMESTAMP,
5a2812ca
AC
192 FOREIGN KEY (usr) REFERENCES WebUser(id) ON DELETE CASCADE,
193 FOREIGN KEY (cat) REFERENCES SupCategory(id) ON DELETE CASCADE);
194
195CREATE SEQUENCE SupIssueSeq START 1;
196
197CREATE TABLE SupPost(
198 id INTEGER PRIMARY KEY,
199 usr INTEGER NOT NULL,
200 iss INTEGER NOT NULL,
201 body TEXT NOT NULL,
202 stamp TIMESTAMP NOT NULL,
203 FOREIGN KEY (usr) REFERENCES WebUser(id) ON DELETE CASCADE,
204 FOREIGN KEY (iss) REFERENCES SupIssue(id) ON DELETE CASCADE);
205
206CREATE SEQUENCE SupPostSeq START 1;
207
208CREATE TABLE SupSubscription(
209 usr INTEGER NOT NULL,
210 cat INTEGER NOT NULL,
211 PRIMARY KEY (usr, cat),
212 FOREIGN KEY (usr) REFERENCES WebUser(id) ON DELETE CASCADE,
213 FOREIGN KEY (cat) REFERENCES SupCategory(id) ON DELETE CASCADE);
214
18eeb749
AC
215CREATE TABLE WebNode(
216 id INTEGER PRIMARY KEY,
217 name TEXT NOT NULL,
218 descr TEXT NOT NULL,
219 debian TEXT NOT NULL);
220
221INSERT INTO WebNode (id, name, descr, debian)
222 VALUES (0, 'fyodor', 'old server', 'testing');
223INSERT INTO WebNode (id, name, descr, debian)
224 VALUES (1, 'deleuze', 'main server', 'stable');
225INSERT INTO WebNode (id, name, descr, debian)
226 VALUES (2, 'mire', 'member web server', 'stable');
227
6b23a78b
AC
228CREATE TABLE Apt(
229 id INTEGER PRIMARY KEY,
230 usr INTEGER NOT NULL,
18eeb749 231 node INTEGER NOT NULL,
5da9f4a9 232 data TEXT NOT NULL,
6b23a78b
AC
233 msg TEXT NOT NULL,
234 status INTEGER NOT NULL,
235 stamp TIMESTAMP NOT NULL,
a75ed94b 236 cstamp TIMESTAMP,
308f44e7
AC
237 FOREIGN KEY (usr) REFERENCES WebUser(id) ON DELETE CASCADE,
238 FOREIGN KEY (node) REFERENCES WebNode(id) ON DELETE CASCADE);
5a2812ca 239
6b23a78b 240CREATE SEQUENCE AptSeq START 1;
5da9f4a9
AC
241
242CREATE TABLE Domain(
243 id INTEGER PRIMARY KEY,
244 usr INTEGER NOT NULL,
245 data TEXT NOT NULL,
246 msg TEXT NOT NULL,
247 status INTEGER NOT NULL,
248 stamp TIMESTAMP NOT NULL,
a75ed94b 249 cstamp TIMESTAMP,
5da9f4a9
AC
250 FOREIGN KEY (usr) REFERENCES WebUser(id) ON DELETE CASCADE);
251
252CREATE SEQUENCE DomainSeq START 1;
9d1c0e98
AC
253
254CREATE TABLE MailingList(
255 id INTEGER PRIMARY KEY,
256 usr INTEGER NOT NULL,
257 data TEXT NOT NULL,
258 msg TEXT NOT NULL,
259 status INTEGER NOT NULL,
260 stamp TIMESTAMP NOT NULL,
a75ed94b 261 cstamp TIMESTAMP,
9d1c0e98
AC
262 FOREIGN KEY (usr) REFERENCES WebUser(id) ON DELETE CASCADE);
263
264CREATE SEQUENCE MailingListSeq START 1;
27e48ace
AC
265
266CREATE TABLE DirectoryPref(
267 usr INTEGER PRIMARY KEY,
268 FOREIGN KEY (usr) REFERENCES WebUser(id) ON DELETE CASCADE);
a90da8b1 269
a90da8b1
AC
270CREATE TABLE AppVote(
271 app INTEGER NOT NULL,
272 usr INTEGER NOT NULL,
273 PRIMARY KEY (app, usr),
274 FOREIGN KEY (app) REFERENCES MemberApp(id) ON DELETE CASCADE,
275 FOREIGN KEY (usr) REFERENCES WebUser(id) ON DELETE CASCADE);
276
711b47a1 277CREATE VIEW WebUserPaying
d5f8418b 278 AS SELECT id, name, rname, bal, joined, app, shares, paypal, checkout
711b47a1
AC
279 FROM WebUser
280 JOIN (SELECT usr FROM Membership JOIN WebGroup
281 ON grp = WebGroup.id
aaa50197 282 AND WebGroup.name = 'paying') AS bob
711b47a1
AC
283 ON usr = WebUser.id;
284
4ac8f639 285CREATE VIEW WebUserActive
d5f8418b 286 AS SELECT id, name, rname, bal, joined, app, shares, paypal, checkout
4ac8f639
AC
287 FROM WebUser
288 LEFT OUTER JOIN (SELECT usr FROM Membership JOIN WebGroup
a4ccdb5e 289 ON grp = WebGroup.id AND (WebGroup.name IN ('retired', 'phantom'))) AS mem
4ac8f639 290 ON usr = WebUser.id
4ac8f639
AC
291 WHERE usr IS NULL;
292
a4ccdb5e
AC
293CREATE TABLE RollCall(
294 id INTEGER PRIMARY KEY,
295 title TEXT NOT NULL,
296 msg TEXT NOT NULL,
297 started TIMESTAMP NOT NULL);
298
299CREATE SEQUENCE RollCallSeq START 1;
300
301CREATE TABLE RollCallEntry(
302 rol INTEGER NOT NULL,
303 usr INTEGER NOT NULL,
304 code TEXT NOT NULL,
305 responded TIMESTAMP,
306 PRIMARY KEY (rol, usr),
307 FOREIGN KEY (rol) REFERENCES RollCall(id) ON DELETE CASCADE,
308 FOREIGN KEY (usr) REFERENCES WebUser(id) ON DELETE CASCADE);
dfb0d0d7
AC
309
310CREATE TABLE Sec(
311 id INTEGER PRIMARY KEY,
312 usr INTEGER NOT NULL,
3d2ed222 313 node INTEGER NOT NULL,
dfb0d0d7
AC
314 data TEXT NOT NULL,
315 msg TEXT NOT NULL,
316 status INTEGER NOT NULL,
317 stamp TIMESTAMP NOT NULL,
a75ed94b 318 cstamp TIMESTAMP,
308f44e7
AC
319 FOREIGN KEY (usr) REFERENCES WebUser(id) ON DELETE CASCADE,
320 FOREIGN KEY (node) REFERENCES WebNode(id) ON DELETE CASCADE);
dfb0d0d7
AC
321
322CREATE SEQUENCE SecSeq START 1;
9a4c122a
AC
323
324CREATE TABLE Ip(
325 id INTEGER PRIMARY KEY,
326 usr INTEGER NOT NULL,
327 node INTEGER NOT NULL,
328 data TEXT NOT NULL,
329 msg TEXT NOT NULL,
330 status INTEGER NOT NULL,
331 stamp TIMESTAMP NOT NULL,
332 cstamp TIMESTAMP,
333 FOREIGN KEY (usr) REFERENCES WebUser(id) ON DELETE CASCADE,
334 FOREIGN KEY (node) REFERENCES WebNode(id) ON DELETE CASCADE);
335
336CREATE SEQUENCE IpSeq START 1;
95a4653e
AC
337
338CREATE TABLE Cert(
339 id INTEGER PRIMARY KEY,
340 usr INTEGER NOT NULL,
341 data TEXT NOT NULL,
342 msg TEXT NOT NULL,
343 status INTEGER NOT NULL,
344 stamp TIMESTAMP NOT NULL,
345 cstamp TIMESTAMP,
6704531c 346 FOREIGN KEY (usr) REFERENCES WebUser(id) ON DELETE CASCADE);
95a4653e
AC
347
348CREATE SEQUENCE CertSeq START 1;
6704531c 349
eafe3d52
AC
350CREATE TABLE Sign(
351 id INTEGER PRIMARY KEY,
352 usr INTEGER NOT NULL,
353 data TEXT NOT NULL,
354 msg TEXT NOT NULL,
355 status INTEGER NOT NULL,
356 stamp TIMESTAMP NOT NULL,
357 cstamp TIMESTAMP,
358 FOREIGN KEY (usr) REFERENCES WebUser(id) ON DELETE CASCADE);
359
360CREATE SEQUENCE SignSeq START 1;
361
6704531c
AC
362CREATE TABLE Quota(
363 id INTEGER PRIMARY KEY,
364 usr INTEGER NOT NULL,
365 data TEXT NOT NULL,
366 msg TEXT NOT NULL,
367 status INTEGER NOT NULL,
368 stamp TIMESTAMP NOT NULL,
369 cstamp TIMESTAMP,
370 FOREIGN KEY (usr) REFERENCES WebUser(id) ON DELETE CASCADE);
371
372CREATE SEQUENCE QuotaSeq START 1;