Fix Mailman subscription by installing /usr/local/sbin/portalsub
[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,
107 FOREIGN KEY (usr) REFERENCES WebUser(id) ON DELETE CASCADE);
108
109CREATE SEQUENCE PollSeq START 1;
110
111CREATE TABLE PollChoice(
112 id INTEGER PRIMARY KEY,
113 pol INTEGER NOT NULL,
114 seq REAL NOT NULL,
115 descr TEXT NOT NULL,
116 FOREIGN KEY (pol) REFERENCES Poll(id) ON DELETE CASCADE);
117
118CREATE SEQUENCE PollChoiceSeq START 1;
119
120CREATE TABLE Vote(
121 usr INTEGER NOT NULL,
122 cho INTEGER NOT NULL,
123 PRIMARY KEY (usr, cho),
124 FOREIGN KEY (usr) REFERENCES WebUser(id) ON DELETE CASCADE,
125 FOREIGN KEY (cho) REFERENCES PollChoice(id) ON DELETE CASCADE);
126
d6223be9
AC
127CREATE TABLE ContactKind(
128 id INTEGER PRIMARY KEY,
129 name TEXT NOT NULL,
130 url BOOLEAN NOT NULL,
131 urlPrefix TEXT,
132 urlPostfix TEXT);
e68ddb80 133
d6223be9 134CREATE SEQUENCE ContactKindSeq START 1;
208e2cbc 135
d6223be9 136CREATE TABLE Contact(
ee587f7f 137 id INTEGER PRIMARY KEY,
d6223be9
AC
138 usr INTEGER NOT NULL,
139 knd INTEGER NOT NULL,
140 v TEXT NOT NULL,
141 priv INTEGER NOT NULL,
d6223be9
AC
142 FOREIGN KEY (usr) REFERENCES WebUser(id) ON DELETE CASCADE,
143 FOREIGN KEY (knd) REFERENCES ContactKind(id) ON DELETE CASCADE);
ee587f7f
AC
144
145CREATE SEQUENCE ContactSeq START 1;
b340786b
AC
146
147CREATE TABLE Location(
148 id INTEGER PRIMARY KEY,
149 parent INTEGER,
150 name TEXT NOT NULL,
151 FOREIGN KEY (parent) REFERENCES Location(id) ON DELETE CASCADE);
152
153CREATE SEQUENCE LocationSeq START 1;
154
155CREATE TABLE Lives(
156 usr INTEGER NOT NULL,
157 loc INTEGER NOT NULL,
158 PRIMARY KEY (usr, loc),
159 FOREIGN KEY (usr) REFERENCES WebUser(id) ON DELETE CASCADE,
160 FOREIGN KEY (loc) REFERENCES Location(id) ON DELETE CASCADE);
88a858ea
AC
161
162CREATE TABLE Link(
163 id INTEGER PRIMARY KEY,
164 usr INTEGER NOT NULL,
165 title TEXT NOT NULL,
166 url TEXT NOT NULL,
167 descr TEXT NOT NULL,
168 FOREIGN KEY (usr) REFERENCES WebUser(id) ON DELETE CASCADE);
169
170CREATE SEQUENCE LinkSeq START 1;
171
5a2812ca
AC
172CREATE TABLE SupCategory(
173 id INTEGER PRIMARY KEY,
174 grp INTEGER NOT NULL,
175 name TEXT NOT NULL,
176 descr TEXT NOT NULL,
177 FOREIGN KEY (grp) REFERENCES WebGroup(id) ON DELETE CASCADE);
178
179CREATE SEQUENCE SupCategorySeq START 1;
180
181CREATE TABLE SupIssue(
182 id INTEGER PRIMARY KEY,
183 usr INTEGER NOT NULL,
184 cat INTEGER NOT NULL,
185 title TEXT NOT NULL,
186 priv BOOLEAN NOT NULL,
187 status INTEGER NOT NULL,
188 stamp TIMESTAMP NOT NULL,
4d46d3eb
AC
189 pstamp TIMESTAMP,
190 cstamp TIMESTAMP,
5a2812ca
AC
191 FOREIGN KEY (usr) REFERENCES WebUser(id) ON DELETE CASCADE,
192 FOREIGN KEY (cat) REFERENCES SupCategory(id) ON DELETE CASCADE);
193
194CREATE SEQUENCE SupIssueSeq START 1;
195
196CREATE TABLE SupPost(
197 id INTEGER PRIMARY KEY,
198 usr INTEGER NOT NULL,
199 iss INTEGER NOT NULL,
200 body TEXT NOT NULL,
201 stamp TIMESTAMP NOT NULL,
202 FOREIGN KEY (usr) REFERENCES WebUser(id) ON DELETE CASCADE,
203 FOREIGN KEY (iss) REFERENCES SupIssue(id) ON DELETE CASCADE);
204
205CREATE SEQUENCE SupPostSeq START 1;
206
207CREATE TABLE SupSubscription(
208 usr INTEGER NOT NULL,
209 cat INTEGER NOT NULL,
210 PRIMARY KEY (usr, cat),
211 FOREIGN KEY (usr) REFERENCES WebUser(id) ON DELETE CASCADE,
212 FOREIGN KEY (cat) REFERENCES SupCategory(id) ON DELETE CASCADE);
213
18eeb749
AC
214CREATE TABLE WebNode(
215 id INTEGER PRIMARY KEY,
216 name TEXT NOT NULL,
217 descr TEXT NOT NULL,
218 debian TEXT NOT NULL);
219
220INSERT INTO WebNode (id, name, descr, debian)
221 VALUES (0, 'fyodor', 'old server', 'testing');
222INSERT INTO WebNode (id, name, descr, debian)
223 VALUES (1, 'deleuze', 'main server', 'stable');
224INSERT INTO WebNode (id, name, descr, debian)
225 VALUES (2, 'mire', 'member web server', 'stable');
226
6b23a78b
AC
227CREATE TABLE Apt(
228 id INTEGER PRIMARY KEY,
229 usr INTEGER NOT NULL,
18eeb749 230 node INTEGER NOT NULL,
5da9f4a9 231 data TEXT NOT NULL,
6b23a78b
AC
232 msg TEXT NOT NULL,
233 status INTEGER NOT NULL,
234 stamp TIMESTAMP NOT NULL,
a75ed94b 235 cstamp TIMESTAMP,
308f44e7
AC
236 FOREIGN KEY (usr) REFERENCES WebUser(id) ON DELETE CASCADE,
237 FOREIGN KEY (node) REFERENCES WebNode(id) ON DELETE CASCADE);
5a2812ca 238
6b23a78b 239CREATE SEQUENCE AptSeq START 1;
5da9f4a9
AC
240
241CREATE TABLE Domain(
242 id INTEGER PRIMARY KEY,
243 usr INTEGER NOT NULL,
244 data TEXT NOT NULL,
245 msg TEXT NOT NULL,
246 status INTEGER NOT NULL,
247 stamp TIMESTAMP NOT NULL,
a75ed94b 248 cstamp TIMESTAMP,
5da9f4a9
AC
249 FOREIGN KEY (usr) REFERENCES WebUser(id) ON DELETE CASCADE);
250
251CREATE SEQUENCE DomainSeq START 1;
9d1c0e98
AC
252
253CREATE TABLE MailingList(
254 id INTEGER PRIMARY KEY,
255 usr INTEGER NOT NULL,
256 data TEXT NOT NULL,
257 msg TEXT NOT NULL,
258 status INTEGER NOT NULL,
259 stamp TIMESTAMP NOT NULL,
a75ed94b 260 cstamp TIMESTAMP,
9d1c0e98
AC
261 FOREIGN KEY (usr) REFERENCES WebUser(id) ON DELETE CASCADE);
262
263CREATE SEQUENCE MailingListSeq START 1;
27e48ace
AC
264
265CREATE TABLE DirectoryPref(
266 usr INTEGER PRIMARY KEY,
267 FOREIGN KEY (usr) REFERENCES WebUser(id) ON DELETE CASCADE);
a90da8b1 268
a90da8b1
AC
269CREATE TABLE AppVote(
270 app INTEGER NOT NULL,
271 usr INTEGER NOT NULL,
272 PRIMARY KEY (app, usr),
273 FOREIGN KEY (app) REFERENCES MemberApp(id) ON DELETE CASCADE,
274 FOREIGN KEY (usr) REFERENCES WebUser(id) ON DELETE CASCADE);
275
711b47a1 276CREATE VIEW WebUserPaying
d5f8418b 277 AS SELECT id, name, rname, bal, joined, app, shares, paypal, checkout
711b47a1
AC
278 FROM WebUser
279 JOIN (SELECT usr FROM Membership JOIN WebGroup
280 ON grp = WebGroup.id
aaa50197 281 AND WebGroup.name = 'paying') AS bob
711b47a1
AC
282 ON usr = WebUser.id;
283
4ac8f639 284CREATE VIEW WebUserActive
d5f8418b 285 AS SELECT id, name, rname, bal, joined, app, shares, paypal, checkout
4ac8f639
AC
286 FROM WebUser
287 LEFT OUTER JOIN (SELECT usr FROM Membership JOIN WebGroup
a4ccdb5e 288 ON grp = WebGroup.id AND (WebGroup.name IN ('retired', 'phantom'))) AS mem
4ac8f639 289 ON usr = WebUser.id
4ac8f639
AC
290 WHERE usr IS NULL;
291
a4ccdb5e
AC
292CREATE TABLE RollCall(
293 id INTEGER PRIMARY KEY,
294 title TEXT NOT NULL,
295 msg TEXT NOT NULL,
296 started TIMESTAMP NOT NULL);
297
298CREATE SEQUENCE RollCallSeq START 1;
299
300CREATE TABLE RollCallEntry(
301 rol INTEGER NOT NULL,
302 usr INTEGER NOT NULL,
303 code TEXT NOT NULL,
304 responded TIMESTAMP,
305 PRIMARY KEY (rol, usr),
306 FOREIGN KEY (rol) REFERENCES RollCall(id) ON DELETE CASCADE,
307 FOREIGN KEY (usr) REFERENCES WebUser(id) ON DELETE CASCADE);
dfb0d0d7
AC
308
309CREATE TABLE Sec(
310 id INTEGER PRIMARY KEY,
311 usr INTEGER NOT NULL,
3d2ed222 312 node INTEGER NOT NULL,
dfb0d0d7
AC
313 data TEXT NOT NULL,
314 msg TEXT NOT NULL,
315 status INTEGER NOT NULL,
316 stamp TIMESTAMP NOT NULL,
a75ed94b 317 cstamp TIMESTAMP,
308f44e7
AC
318 FOREIGN KEY (usr) REFERENCES WebUser(id) ON DELETE CASCADE,
319 FOREIGN KEY (node) REFERENCES WebNode(id) ON DELETE CASCADE);
dfb0d0d7
AC
320
321CREATE SEQUENCE SecSeq START 1;
9a4c122a
AC
322
323CREATE TABLE Ip(
324 id INTEGER PRIMARY KEY,
325 usr INTEGER NOT NULL,
326 node INTEGER NOT NULL,
327 data TEXT NOT NULL,
328 msg TEXT NOT NULL,
329 status INTEGER NOT NULL,
330 stamp TIMESTAMP NOT NULL,
331 cstamp TIMESTAMP,
332 FOREIGN KEY (usr) REFERENCES WebUser(id) ON DELETE CASCADE,
333 FOREIGN KEY (node) REFERENCES WebNode(id) ON DELETE CASCADE);
334
335CREATE SEQUENCE IpSeq START 1;
95a4653e
AC
336
337CREATE TABLE Cert(
338 id INTEGER PRIMARY KEY,
339 usr INTEGER NOT NULL,
340 data TEXT NOT NULL,
341 msg TEXT NOT NULL,
342 status INTEGER NOT NULL,
343 stamp TIMESTAMP NOT NULL,
344 cstamp TIMESTAMP,
345 FOREIGN KEY (usr) REFERENCES WebUser(id) ON DELETE CASCADE,
346 FOREIGN KEY (node) REFERENCES WebNode(id) ON DELETE CASCADE);
347
348CREATE SEQUENCE CertSeq START 1;