Save pending/closing time stamps for misc support issues
[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,
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 37 app INTEGER NOT NULL,
aaa50197 38 shares INTEGER NOT NULL,
f3f3ad24
AC
39 FOREIGN KEY (bal) REFERENCES Balance(id) ON DELETE CASCADE,
40 FOREIGN KEY (app) REFERENCES MemberApp(id) ON DELETE CASCADE);
208e2cbc
AC
41
42CREATE SEQUENCE WebUserSeq START 1;
43
44INSERT INTO WebUser
c9247c1b
AC
45 (id, name, rname, bal, joined) VALUES
46 (0, 'adam', 'Adam Chlipala', 0, CURRENT_TIMESTAMP);
208e2cbc
AC
47
48CREATE TABLE WebGroup(
49 id INTEGER PRIMARY KEY,
50 name TEXT NOT NULL);
51
c9247c1b 52CREATE SEQUENCE WebGroupSeq START 2;
208e2cbc
AC
53
54INSERT INTO WebGroup
55 (id, name) VALUES
56 (0, 'root');
57
c9247c1b
AC
58INSERT INTO WebGroup
59 (id, name) VALUES
60 (1, 'paying');
61
208e2cbc
AC
62CREATE TABLE Membership(
63 grp INTEGER NOT NULL,
64 usr INTEGER NOT NULL,
65 PRIMARY KEY (grp, usr),
66 FOREIGN KEY (grp) REFERENCES WebGroup(id) ON DELETE CASCADE,
67 FOREIGN KEY (usr) REFERENCES WebUser(id) ON DELETE CASCADE);
68
69INSERT INTO Membership
70 (grp, usr) VALUES
71 (0, 0);
72
c9247c1b
AC
73INSERT INTO Membership
74 (grp, usr) VALUES
75 (1, 0);
76
208e2cbc
AC
77CREATE TABLE Transaction(
78 id INTEGER PRIMARY KEY,
79 descr TEXT NOT NULL,
80 amount REAL NOT NULL,
81 d DATE NOT NULL,
82 stamp TIMESTAMP NOT NULL);
83
84CREATE SEQUENCE TransactionSeq START 1;
85
86CREATE TABLE Charge(
87 trn INTEGER NOT NULL,
88 usr INTEGER NOT NULL,
89 amount REAL NOT NULL,
90 PRIMARY KEY (trn, usr),
91 FOREIGN KEY (trn) REFERENCES Transaction(id) ON DELETE CASCADE,
92 FOREIGN KEY (usr) REFERENCES WebUser(id) ON DELETE CASCADE);
93
e68ddb80
AC
94CREATE TABLE Poll(
95 id INTEGER PRIMARY KEY,
96 usr INTEGER NOT NULL,
97 title TEXT NOT NULL,
98 descr TEXT NOT NULL,
99 starts DATE NOT NULL,
100 ends DATE NOT NULL,
101 votes INTEGER NOT NULL,
102 FOREIGN KEY (usr) REFERENCES WebUser(id) ON DELETE CASCADE);
103
104CREATE SEQUENCE PollSeq START 1;
105
106CREATE TABLE PollChoice(
107 id INTEGER PRIMARY KEY,
108 pol INTEGER NOT NULL,
109 seq REAL NOT NULL,
110 descr TEXT NOT NULL,
111 FOREIGN KEY (pol) REFERENCES Poll(id) ON DELETE CASCADE);
112
113CREATE SEQUENCE PollChoiceSeq START 1;
114
115CREATE TABLE Vote(
116 usr INTEGER NOT NULL,
117 cho INTEGER NOT NULL,
118 PRIMARY KEY (usr, cho),
119 FOREIGN KEY (usr) REFERENCES WebUser(id) ON DELETE CASCADE,
120 FOREIGN KEY (cho) REFERENCES PollChoice(id) ON DELETE CASCADE);
121
d6223be9
AC
122CREATE TABLE ContactKind(
123 id INTEGER PRIMARY KEY,
124 name TEXT NOT NULL,
125 url BOOLEAN NOT NULL,
126 urlPrefix TEXT,
127 urlPostfix TEXT);
e68ddb80 128
d6223be9 129CREATE SEQUENCE ContactKindSeq START 1;
208e2cbc 130
d6223be9 131CREATE TABLE Contact(
ee587f7f 132 id INTEGER PRIMARY KEY,
d6223be9
AC
133 usr INTEGER NOT NULL,
134 knd INTEGER NOT NULL,
135 v TEXT NOT NULL,
136 priv INTEGER NOT NULL,
d6223be9
AC
137 FOREIGN KEY (usr) REFERENCES WebUser(id) ON DELETE CASCADE,
138 FOREIGN KEY (knd) REFERENCES ContactKind(id) ON DELETE CASCADE);
ee587f7f
AC
139
140CREATE SEQUENCE ContactSeq START 1;
b340786b
AC
141
142CREATE TABLE Location(
143 id INTEGER PRIMARY KEY,
144 parent INTEGER,
145 name TEXT NOT NULL,
146 FOREIGN KEY (parent) REFERENCES Location(id) ON DELETE CASCADE);
147
148CREATE SEQUENCE LocationSeq START 1;
149
150CREATE TABLE Lives(
151 usr INTEGER NOT NULL,
152 loc INTEGER NOT NULL,
153 PRIMARY KEY (usr, loc),
154 FOREIGN KEY (usr) REFERENCES WebUser(id) ON DELETE CASCADE,
155 FOREIGN KEY (loc) REFERENCES Location(id) ON DELETE CASCADE);
88a858ea
AC
156
157CREATE TABLE Link(
158 id INTEGER PRIMARY KEY,
159 usr INTEGER NOT NULL,
160 title TEXT NOT NULL,
161 url TEXT NOT NULL,
162 descr TEXT NOT NULL,
163 FOREIGN KEY (usr) REFERENCES WebUser(id) ON DELETE CASCADE);
164
165CREATE SEQUENCE LinkSeq START 1;
166
5a2812ca
AC
167CREATE TABLE SupCategory(
168 id INTEGER PRIMARY KEY,
169 grp INTEGER NOT NULL,
170 name TEXT NOT NULL,
171 descr TEXT NOT NULL,
172 FOREIGN KEY (grp) REFERENCES WebGroup(id) ON DELETE CASCADE);
173
174CREATE SEQUENCE SupCategorySeq START 1;
175
176CREATE TABLE SupIssue(
177 id INTEGER PRIMARY KEY,
178 usr INTEGER NOT NULL,
179 cat INTEGER NOT NULL,
180 title TEXT NOT NULL,
181 priv BOOLEAN NOT NULL,
182 status INTEGER NOT NULL,
183 stamp TIMESTAMP NOT NULL,
4d46d3eb
AC
184 pstamp TIMESTAMP,
185 cstamp TIMESTAMP,
5a2812ca
AC
186 FOREIGN KEY (usr) REFERENCES WebUser(id) ON DELETE CASCADE,
187 FOREIGN KEY (cat) REFERENCES SupCategory(id) ON DELETE CASCADE);
188
189CREATE SEQUENCE SupIssueSeq START 1;
190
191CREATE TABLE SupPost(
192 id INTEGER PRIMARY KEY,
193 usr INTEGER NOT NULL,
194 iss INTEGER NOT NULL,
195 body TEXT NOT NULL,
196 stamp TIMESTAMP NOT NULL,
197 FOREIGN KEY (usr) REFERENCES WebUser(id) ON DELETE CASCADE,
198 FOREIGN KEY (iss) REFERENCES SupIssue(id) ON DELETE CASCADE);
199
200CREATE SEQUENCE SupPostSeq START 1;
201
202CREATE TABLE SupSubscription(
203 usr INTEGER NOT NULL,
204 cat INTEGER NOT NULL,
205 PRIMARY KEY (usr, cat),
206 FOREIGN KEY (usr) REFERENCES WebUser(id) ON DELETE CASCADE,
207 FOREIGN KEY (cat) REFERENCES SupCategory(id) ON DELETE CASCADE);
208
18eeb749
AC
209CREATE TABLE WebNode(
210 id INTEGER PRIMARY KEY,
211 name TEXT NOT NULL,
212 descr TEXT NOT NULL,
213 debian TEXT NOT NULL);
214
215INSERT INTO WebNode (id, name, descr, debian)
216 VALUES (0, 'fyodor', 'old server', 'testing');
217INSERT INTO WebNode (id, name, descr, debian)
218 VALUES (1, 'deleuze', 'main server', 'stable');
219INSERT INTO WebNode (id, name, descr, debian)
220 VALUES (2, 'mire', 'member web server', 'stable');
221
6b23a78b
AC
222CREATE TABLE Apt(
223 id INTEGER PRIMARY KEY,
224 usr INTEGER NOT NULL,
18eeb749 225 node INTEGER NOT NULL,
5da9f4a9 226 data TEXT NOT NULL,
6b23a78b
AC
227 msg TEXT NOT NULL,
228 status INTEGER NOT NULL,
229 stamp TIMESTAMP NOT NULL,
308f44e7
AC
230 FOREIGN KEY (usr) REFERENCES WebUser(id) ON DELETE CASCADE,
231 FOREIGN KEY (node) REFERENCES WebNode(id) ON DELETE CASCADE);
5a2812ca 232
6b23a78b 233CREATE SEQUENCE AptSeq START 1;
5da9f4a9
AC
234
235CREATE TABLE Domain(
236 id INTEGER PRIMARY KEY,
237 usr INTEGER NOT NULL,
238 data TEXT NOT NULL,
239 msg TEXT NOT NULL,
240 status INTEGER NOT NULL,
241 stamp TIMESTAMP NOT NULL,
242 FOREIGN KEY (usr) REFERENCES WebUser(id) ON DELETE CASCADE);
243
244CREATE SEQUENCE DomainSeq START 1;
9d1c0e98
AC
245
246CREATE TABLE MailingList(
247 id INTEGER PRIMARY KEY,
248 usr INTEGER NOT NULL,
249 data TEXT NOT NULL,
250 msg TEXT NOT NULL,
251 status INTEGER NOT NULL,
252 stamp TIMESTAMP NOT NULL,
253 FOREIGN KEY (usr) REFERENCES WebUser(id) ON DELETE CASCADE);
254
255CREATE SEQUENCE MailingListSeq START 1;
27e48ace
AC
256
257CREATE TABLE DirectoryPref(
258 usr INTEGER PRIMARY KEY,
259 FOREIGN KEY (usr) REFERENCES WebUser(id) ON DELETE CASCADE);
a90da8b1 260
a90da8b1
AC
261CREATE TABLE AppVote(
262 app INTEGER NOT NULL,
263 usr INTEGER NOT NULL,
264 PRIMARY KEY (app, usr),
265 FOREIGN KEY (app) REFERENCES MemberApp(id) ON DELETE CASCADE,
266 FOREIGN KEY (usr) REFERENCES WebUser(id) ON DELETE CASCADE);
267
711b47a1 268CREATE VIEW WebUserPaying
aaa50197 269 AS SELECT id, name, rname, bal, joined, app, shares
711b47a1
AC
270 FROM WebUser
271 JOIN (SELECT usr FROM Membership JOIN WebGroup
272 ON grp = WebGroup.id
aaa50197 273 AND WebGroup.name = 'paying') AS bob
711b47a1
AC
274 ON usr = WebUser.id;
275
4ac8f639 276CREATE VIEW WebUserActive
aaa50197 277 AS SELECT id, name, rname, bal, joined, app, shares
4ac8f639
AC
278 FROM WebUser
279 LEFT OUTER JOIN (SELECT usr FROM Membership JOIN WebGroup
a4ccdb5e 280 ON grp = WebGroup.id AND (WebGroup.name IN ('retired', 'phantom'))) AS mem
4ac8f639 281 ON usr = WebUser.id
4ac8f639
AC
282 WHERE usr IS NULL;
283
a4ccdb5e
AC
284CREATE TABLE RollCall(
285 id INTEGER PRIMARY KEY,
286 title TEXT NOT NULL,
287 msg TEXT NOT NULL,
288 started TIMESTAMP NOT NULL);
289
290CREATE SEQUENCE RollCallSeq START 1;
291
292CREATE TABLE RollCallEntry(
293 rol INTEGER NOT NULL,
294 usr INTEGER NOT NULL,
295 code TEXT NOT NULL,
296 responded TIMESTAMP,
297 PRIMARY KEY (rol, usr),
298 FOREIGN KEY (rol) REFERENCES RollCall(id) ON DELETE CASCADE,
299 FOREIGN KEY (usr) REFERENCES WebUser(id) ON DELETE CASCADE);
dfb0d0d7
AC
300
301CREATE TABLE Sec(
302 id INTEGER PRIMARY KEY,
303 usr INTEGER NOT NULL,
3d2ed222 304 node INTEGER NOT NULL,
dfb0d0d7
AC
305 data TEXT NOT NULL,
306 msg TEXT NOT NULL,
307 status INTEGER NOT NULL,
308 stamp TIMESTAMP NOT NULL,
308f44e7
AC
309 FOREIGN KEY (usr) REFERENCES WebUser(id) ON DELETE CASCADE,
310 FOREIGN KEY (node) REFERENCES WebNode(id) ON DELETE CASCADE);
dfb0d0d7
AC
311
312CREATE SEQUENCE SecSeq START 1;