-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathinit.sql
More file actions
415 lines (386 loc) · 14.1 KB
/
Copy pathinit.sql
File metadata and controls
415 lines (386 loc) · 14.1 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
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
CREATE EXTENSION IF NOT EXISTS "pgcrypto";
CREATE EXTENSION IF NOT EXISTS "citext";
CREATE EXTENSION IF NOT EXISTS hstore;
CREATE EXTENSION IF NOT EXISTS dblink;
CREATE EXTENSION IF NOT EXISTS postgis;
CREATE EXTENSION IF NOT EXISTS ltree;
-- CREATE TABLE contributors (
-- id SERIAL PRIMARY KEY UNIQUE NOT NULL,
-- name VARCHAR(99),
-- position VARCHAR(99),
-- country VARCHAR(99),
-- email VARCHAR(99) UNIQUE,
-- password VARCHAR(99) NOT NULL,
-- uuid uuid UNIQUE DEFAULT uuid_generate_v4(),
-- rights SMALLINT DEFAULT 0,
-- lang VARCHAR(9) DEFAULT 'en'
-- );
-- CREATE TABLE centerpoints (
-- id SERIAL PRIMARY KEY UNIQUE NOT NULL,
-- country VARCHAR(99),
-- lat DOUBLE PRECISION,
-- lng DOUBLE PRECISION
-- );
CREATE TABLE templates (
id SERIAL PRIMARY KEY UNIQUE NOT NULL,
medium VARCHAR(9),
title VARCHAR(99),
description TEXT,
sections JSONB,
full_text TEXT,
language VARCHAR(9),
status INT DEFAULT 0,
"date" TIMESTAMPTZ NOT NULL DEFAULT NOW(),
"update_at" TIMESTAMPTZ NOT NULL DEFAULT NOW(),
-- contributor INT REFERENCES contributors(id) ON UPDATE CASCADE ON DELETE CASCADE,
owner uuid,
-- published BOOLEAN DEFAULT FALSE,
source INT REFERENCES templates(id) ON UPDATE CASCADE ON DELETE CASCADE,
slideshow BOOLEAN DEFAULT FALSE,
imported BOOLEAN DEFAULT FALSE,
version ltree
);
CREATE INDEX version_idx ON templates USING GIST (version);
CREATE TABLE pads (
id SERIAL PRIMARY KEY UNIQUE NOT NULL,
title VARCHAR(99),
sections JSONB,
full_text TEXT,
-- location JSONB,
-- sdgs JSONB,
-- tags JSONB,
-- impact SMALLINT,
-- personas JSONB,
status INT DEFAULT 0,
"date" TIMESTAMPTZ NOT NULL DEFAULT NOW(),
"update_at" TIMESTAMPTZ NOT NULL DEFAULT NOW(),
-- contributor INT REFERENCES contributors(id) ON UPDATE CASCADE ON DELETE CASCADE,
owner uuid,
template INT REFERENCES templates(id) DEFAULT NULL,
-- published BOOLEAN DEFAULT FALSE,
source INT REFERENCES pads(id) ON UPDATE CASCADE ON DELETE CASCADE,
version ltree
-- review_status INT DEFAULT 0
);
CREATE INDEX version_idx ON pads USING GIST (version);
CREATE TABLE files (
id SERIAL PRIMARY KEY UNIQUE NOT NULL,
name VARCHAR(99),
path TEXT,
vignette TEXT,
full_text TEXT,
-- location JSONB,
sdgs JSONB,
tags JSONB,
status INT DEFAULT 1,
"date" TIMESTAMPTZ NOT NULL DEFAULT NOW(),
"update_at" TIMESTAMPTZ NOT NULL DEFAULT NOW(),
-- contributor INT REFERENCES contributors(id) ON UPDATE CASCADE ON DELETE CASCADE,
owner uuid,
published BOOLEAN DEFAULT FALSE,
source INT REFERENCES pads(id) ON UPDATE CASCADE ON DELETE CASCADE
);
CREATE TABLE locations (
id SERIAL PRIMARY KEY UNIQUE NOT NULL,
pad INT REFERENCES pads(id) ON UPDATE CASCADE ON DELETE CASCADE,
lat DOUBLE PRECISION,
lng DOUBLE PRECISION,
iso3 VARCHAR(3)
);
ALTER TABLE locations ADD CONSTRAINT unique_pad_lnglat UNIQUE (pad, lng, lat);
-- CREATE TABLE skills (
-- id SERIAL PRIMARY KEY UNIQUE NOT NULL,
-- category VARCHAR(99),
-- name VARCHAR(99),
-- label VARCHAR(99),
-- language VARCHAR(9) DEFAULT 'en'
-- );
-- CREATE TABLE methods (
-- id SERIAL PRIMARY KEY UNIQUE NOT NULL,
-- name VARCHAR(99),
-- label VARCHAR(99),
-- language VARCHAR(9) DEFAULT 'en'
-- );
-- CREATE TABLE datasources (
-- id SERIAL PRIMARY KEY UNIQUE NOT NULL,
-- name CITEXT UNIQUE,
-- description VARCHAR(99),
-- contributor INT,
-- language VARCHAR(9) DEFAULT 'en'
-- );
-- CREATE TABLE tags (
-- id SERIAL PRIMARY KEY UNIQUE NOT NULL,
-- key INT,
-- name CITEXT,
-- description TEXT,
-- contributor uuid,
-- type VARCHAR(19)
-- language VARCHAR(9) DEFAULT 'en'
-- );
-- ALTER TABLE tags ADD CONSTRAINT name_type UNIQUE (name, type);
CREATE TABLE cohorts (
id SERIAL PRIMARY KEY UNIQUE NOT NULL,
-- source INT REFERENCES contributors(id) ON UPDATE CASCADE ON DELETE CASCADE,
-- target INT REFERENCES contributors(id) ON UPDATE CASCADE ON DELETE CASCADE
host uuid,
contributor uuid
);
ALTER TABLE cohorts ADD CONSTRAINT unique_host_contributor UNIQUE (host, contributor);
CREATE TABLE mobilizations (
id SERIAL PRIMARY KEY UNIQUE NOT NULL,
title VARCHAR(99),
-- host INT REFERENCES contributors(id) ON UPDATE CASCADE ON DELETE CASCADE,
owner uuid,
template INT REFERENCES templates(id) ON UPDATE CASCADE ON DELETE CASCADE,
status INT DEFAULT 1,
public BOOLEAN DEFAULT FALSE,
start_date TIMESTAMPTZ NOT NULL DEFAULT NOW(),
end_date TIMESTAMPTZ,
source INT REFERENCES mobilizations(id) ON UPDATE CASCADE ON DELETE CASCADE,
copy BOOLEAN DEFAULT FALSE,
child BOOLEAN DEFAULT FALSE,
pad_limit INT DEFAULT 1,
description TEXT,
language VARCHAR(9),
old_collection INT,
collection INT,
version ltree
);
ALTER TABLE mobilizations ALTER pad_limit SET DEFAULT 0;
CREATE INDEX version_idx ON mobilizations USING GIST (version);
CREATE TABLE mobilization_contributors (
id SERIAL PRIMARY KEY UNIQUE NOT NULL,
-- contributor INT REFERENCES contributors(id) ON UPDATE CASCADE ON DELETE CASCADE,
participant uuid,
mobilization INT REFERENCES mobilizations(id) ON UPDATE CASCADE ON DELETE CASCADE
);
CREATE TABLE mobilization_contributions (
id SERIAL PRIMARY KEY UNIQUE NOT NULL,
pad INT REFERENCES pads(id) ON UPDATE CASCADE ON DELETE CASCADE,
mobilization INT REFERENCES mobilizations(id) ON UPDATE CASCADE ON DELETE CASCADE
);
CREATE TABLE extern_db (
id SERIAL PRIMARY KEY UNIQUE NOT NULL,
db VARCHAR(20) UNIQUE NOT NULL,
url_prefix TEXT NOT NULL
);
INSERT INTO extern_db (db, url_prefix) VALUES ('ap', 'https://learningplans.sdg-innovation-commons.org/');
INSERT INTO extern_db (db, url_prefix) VALUES ('exp', 'https://experiments.sdg-innovation-commons.org/');
INSERT INTO extern_db (db, url_prefix) VALUES ('global', 'https://www.sdg-innovation-commons.org/');
INSERT INTO extern_db (db, url_prefix) VALUES ('sm', 'https://solutions.sdg-innovation-commons.org/');
INSERT INTO extern_db (db, url_prefix) VALUES ('blogs', 'https://blogs.sdg-innovation-commons.org/');
INSERT INTO extern_db (db, url_prefix) VALUES ('consent', 'https://consent.sdg-innovation-commons.org/');
INSERT INTO extern_db (db, url_prefix) VALUES ('login', 'https://login.sdg-innovation-commons.org/');
INSERT INTO extern_db (db, url_prefix) VALUES ('codification', 'https://practice.sdg-innovation-commons.org/');
CREATE TABLE pinboards (
id SERIAL PRIMARY KEY UNIQUE NOT NULL,
old_id INT,
old_db INT REFERENCES extern_db(id) ON UPDATE CASCADE ON DELETE CASCADE,
title VARCHAR(99),
description TEXT,
-- host INT REFERENCES contributors(id) ON UPDATE CASCADE ON DELETE CASCADE,
owner uuid,
-- public BOOLEAN DEFAULT FALSE,
status INT DEFAULT 0,
display_filters BOOLEAN DEFAULT FALSE,
display_map BOOLEAN DEFAULT FALSE,
display_fullscreen BOOLEAN DEFAULT FALSE,
slideshow BOOLEAN DEFAULT FALSE,
"date" TIMESTAMPTZ NOT NULL DEFAULT NOW(),
mobilization_db INT REFERENCES extern_db(id) ON UPDATE CASCADE ON DELETE CASCADE,
mobilization INT -- THIS IS TO CONNECT A PINBOARD DIRECTLY TO A MOBILIZATION
);
-- for migrating
ALTER TABLE pinboards ADD CONSTRAINT unique_pinboard_owner UNIQUE (title, owner, old_db);
ALTER TABLE pinboards DROP CONSTRAINT IF EXISTS unique_pinboard_owner;
ALTER TABLE pinboards ADD CONSTRAINT unique_pinboard_owner UNIQUE (title, owner);
CREATE TABLE pinboard_contributors (
participant uuid NOT NULL,
pinboard INT REFERENCES pinboards(id) ON UPDATE CASCADE ON DELETE CASCADE,
PRIMARY KEY (participant, pinboard)
);
CREATE TABLE pinboard_sections (
id SERIAL PRIMARY KEY UNIQUE NOT NULL,
pinboard INT REFERENCES pinboards(id) ON UPDATE CASCADE ON DELETE CASCADE,
title VARCHAR(99),
description TEXT
);
CREATE TABLE pinboard_contributions (
pad INT NOT NULL,
db INT REFERENCES extern_db(id) ON UPDATE CASCADE ON DELETE CASCADE,
pinboard INT REFERENCES pinboards(id) ON UPDATE CASCADE ON DELETE CASCADE,
PRIMARY KEY (pad, db, pinboard)
);
-- for adding sections
ALTER TABLE pinboard_contributions ADD COLUMN section INT REFERENCES pinboard_sections(id) ON UPDATE CASCADE;
CREATE TABLE tagging (
id SERIAL PRIMARY KEY UNIQUE NOT NULL,
pad INT REFERENCES pads(id) ON UPDATE CASCADE ON DELETE CASCADE,
tag_id INT NOT NULL,
-- tag_name TEXT NOT NULL,
type VARCHAR(19)
);
ALTER TABLE tagging ADD CONSTRAINT unique_pad_tag_type UNIQUE (pad, tag_id, type);
CREATE TABLE metafields (
id SERIAL PRIMARY KEY UNIQUE NOT NULL,
pad INT REFERENCES pads(id) ON UPDATE CASCADE ON DELETE CASCADE,
type VARCHAR(19),
name CITEXT,
key INT,
value TEXT,
CONSTRAINT pad_value_type UNIQUE (pad, value, type)
);
-- TO DO
-- CREATE TABLE engagement_pads (
CREATE TABLE engagement (
id SERIAL PRIMARY KEY UNIQUE NOT NULL,
-- contributor INT REFERENCES contributors(id) ON UPDATE CASCADE ON DELETE CASCADE,
contributor uuid,
-- pad INT REFERENCES pads(id) ON UPDATE CASCADE ON DELETE CASCADE,
doctype VARCHAR(19),
docid INT,
type VARCHAR(19),
date TIMESTAMPTZ NOT NULL DEFAULT NOW(),
-- message TEXT,
CONSTRAINT unique_engagement UNIQUE (contributor, doctype, docid, type)
);
CREATE TABLE comments (
id SERIAL PRIMARY KEY UNIQUE NOT NULL,
contributor uuid,
doctype VARCHAR(19),
docid INT,
date TIMESTAMPTZ NOT NULL DEFAULT NOW(),
message TEXT,
source INT REFERENCES comments(id) ON UPDATE CASCADE ON DELETE CASCADE
);
CREATE TABLE review_templates (
id SERIAL PRIMARY KEY UNIQUE NOT NULL,
template INT REFERENCES templates(id) NOT NULL,
language VARCHAR(9) UNIQUE
);
-- CREATE TABLE review_pads (
-- id SERIAL PRIMARY KEY UNIQUE NOT NULL,
-- pad INT REFERENCES pad(id) NOT NULL,
-- );
CREATE TABLE review_requests (
id SERIAL PRIMARY KEY UNIQUE NOT NULL,
pad INT UNIQUE REFERENCES pads(id) NOT NULL,
language VARCHAR(9),
status INT DEFAULT 0,
"date" TIMESTAMPTZ NOT NULL DEFAULT NOW()
);
CREATE TABLE reviewer_pool (
id SERIAL PRIMARY KEY UNIQUE NOT NULL,
reviewer uuid,
request INT REFERENCES review_requests(id) ON UPDATE CASCADE ON DELETE CASCADE,
rank INT DEFAULT 0,
status INT DEFAULT 0,
invited_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
CONSTRAINT unique_reviewer_pad UNIQUE (reviewer, request)
);
CREATE TABLE reviews (
id SERIAL PRIMARY KEY UNIQUE NOT NULL,
pad INT REFERENCES pads(id) ON UPDATE CASCADE ON DELETE CASCADE,
review INT REFERENCES pads(id) ON UPDATE CASCADE ON DELETE CASCADE,
reviewer uuid,
status INT DEFAULT 0,
request INT
-- CONSTRAINT unique_reviewer UNIQUE (pad, reviewer)
);
CREATE TABLE "session" (
"sid" varchar NOT NULL COLLATE "default",
"sess" json NOT NULL,
"expire" timestamp(6) NOT NULL
)
WITH (OIDS=FALSE);
ALTER TABLE "session" ADD CONSTRAINT "session_pkey" PRIMARY KEY ("sid") NOT DEFERRABLE INITIALLY IMMEDIATE;
CREATE INDEX "IDX_session_expire" ON "session" ("expire");
-- exploration tables
CREATE TABLE IF NOT EXISTS public.exploration
(
id SERIAL UNIQUE NOT NULL,
uuid uuid NOT NULL,
prompt text COLLATE pg_catalog."default" NOT NULL,
last_access timestamp with time zone NOT NULL,
created_at timestamp with time zone NOT NULL,
linked_pinboard INT UNIQUE NOT NULL REFERENCES pinboards(id) ON UPDATE CASCADE ON DELETE CASCADE,
CONSTRAINT exploration_pkey PRIMARY KEY (id, uuid, prompt),
CONSTRAINT id_key UNIQUE (id),
CONSTRAINT uuid_prompt_key UNIQUE (uuid, prompt)
);
ALTER TABLE IF EXISTS public.users
ADD COLUMN confirmed_feature_exploration timestamp with time zone;
ALTER TABLE IF EXISTS public.pinboard_contributions
ADD COLUMN is_included boolean NOT NULL DEFAULT true;
-- viewer stat table
CREATE TABLE IF NOT EXISTS public.page_stats
(
doc_id INT, -- 0 as null
doc_type VARCHAR(19), -- empty string as null
db INT REFERENCES extern_db(id) ON UPDATE CASCADE ON DELETE CASCADE,
page_url text COLLATE pg_catalog."default", -- empty string as null
viewer_country VARCHAR(3), -- empty string as null
viewer_rights SMALLINT, -- -1 as null
view_count INT DEFAULT 0,
read_count INT DEFAULT 0,
CONSTRAINT page_stats_pkey PRIMARY KEY (doc_id, doc_type, db, page_url, viewer_country, viewer_rights)
);
-- User trusted device table
CREATE TABLE public.trusted_devices (
id SERIAL PRIMARY KEY,
user_uuid UUID NOT NULL,
device_name VARCHAR(255),
device_type VARCHAR(255),
device_os VARCHAR(255) NOT NULL,
device_browser VARCHAR(255) NOT NULL,
last_login TIMESTAMP with time zone NOT NULL,
is_trusted BOOLEAN NOT NULL DEFAULT true,
session_sid VARCHAR(255) REFERENCES session(sid) ON UPDATE CASCADE ON DELETE CASCADE,
duuid1 UUID NOT NULL,
duuid2 UUID NOT NULL,
duuid3 UUID NOT NULL,
created_at TIMESTAMP with time zone DEFAULT NOW()
);
CREATE TABLE public.device_confirmation_code (
id SERIAL PRIMARY KEY,
user_uuid UUID NOT NULL,
code INTEGER NOT NULL,
expiration_time TIMESTAMP with time zone NOT NULL
);
ALTER TABLE users
ADD COLUMN created_from_sso BOOLEAN DEFAULT FALSE,
ADD CONSTRAINT unique_email UNIQUE (email);
ALTER TABLE trusted_devices
ADD CONSTRAINT unique_user_device UNIQUE (user_uuid, device_os, device_browser, session_sid, duuid1, duuid2, duuid3);
-- Add created_at column and set its value for existing users
ALTER TABLE public.users
ADD COLUMN created_at timestamp with time zone;
-- Update created_at column with invited_at value for existing users
UPDATE public.users
SET created_at = invited_at;
-- Set default value for created_at column for new users
ALTER TABLE public.users
ALTER COLUMN created_at SET DEFAULT now();
-- Add last_login column
ALTER TABLE public.users
ADD COLUMN last_login timestamp with time zone;
-- Create a Function to Update update_at
CREATE OR REPLACE FUNCTION update_timestamp()
RETURNS TRIGGER AS $$
BEGIN
NEW.update_at = NOW();
RETURN NEW;
END;
$$ LANGUAGE plpgsql;
-- Create a Trigger to Call the Function
CREATE TRIGGER set_timestamp
BEFORE UPDATE ON pads
FOR EACH ROW
EXECUTE FUNCTION update_timestamp();
-- Create a table to store maps generated via API calls
CREATE TABLE IF NOT EXISTS public.generated_maps (
id SERIAL PRIMARY KEY,
filename VARCHAR(255),
query_string TEXT
);