1 |
dpavlin |
1 |
create table users ( |
2 |
|
|
id serial, |
3 |
|
|
email text not null, |
4 |
dpavlin |
33 |
full_name text default '', |
5 |
dpavlin |
4 |
date timestamp not null default now(), |
6 |
|
|
active boolean not null default true, |
7 |
|
|
bounce_count int not null default 0, |
8 |
|
|
ext_id text, |
9 |
dpavlin |
1 |
primary key(id) |
10 |
|
|
); |
11 |
|
|
|
12 |
dpavlin |
30 |
create unique index users_email_ind on users(email); |
13 |
|
|
|
14 |
dpavlin |
1 |
create table lists ( |
15 |
|
|
id serial, |
16 |
|
|
name text not null, |
17 |
dpavlin |
30 |
email text not null, |
18 |
dpavlin |
4 |
bounce_limit int not null default 3, |
19 |
|
|
date timestamp not null default now(), |
20 |
dpavlin |
1 |
primary key(id) |
21 |
|
|
); |
22 |
|
|
|
23 |
dpavlin |
30 |
create unique index lists_name_ind on lists(name); |
24 |
|
|
create unique index lists_email_ind on lists(email); |
25 |
dpavlin |
5 |
|
26 |
dpavlin |
1 |
create table user_list ( |
27 |
dpavlin |
4 |
user_id int not null references users(id) on update cascade on delete cascade, |
28 |
|
|
list_id int not null references lists(id) on update cascade on delete cascade, |
29 |
|
|
date timestamp not null default now(), |
30 |
dpavlin |
1 |
primary key (user_id, list_id) |
31 |
|
|
); |
32 |
|
|
|
33 |
|
|
create table messages ( |
34 |
|
|
id serial, |
35 |
|
|
message text not null, |
36 |
dpavlin |
4 |
date timestamp not null default now(), |
37 |
dpavlin |
1 |
primary key(id) |
38 |
|
|
); |
39 |
|
|
|
40 |
dpavlin |
11 |
create table queue ( |
41 |
dpavlin |
4 |
message_id int not null references messages(id) on update cascade on delete cascade, |
42 |
dpavlin |
11 |
list_id int not null references lists(id) on update cascade on delete cascade, |
43 |
dpavlin |
4 |
date timestamp not null default now(), |
44 |
dpavlin |
11 |
all_sent boolean default false, |
45 |
dpavlin |
4 |
primary key(message_id, list_id) |
46 |
|
|
); |
47 |
|
|
|
48 |
|
|
create table sent ( |
49 |
|
|
message_id int not null references messages(id) on update cascade on delete cascade, |
50 |
|
|
user_id int not null references users(id) on update cascade on delete cascade, |
51 |
dpavlin |
36 |
hash text not null, |
52 |
dpavlin |
4 |
date timestamp not null default now(), |
53 |
|
|
primary key(message_id, user_id) |
54 |
|
|
); |
55 |
|
|
|
56 |
dpavlin |
36 |
create unique index sent_hash_ind on sent(hash); |
57 |
|
|
|
58 |
dpavlin |
4 |
create table received ( |
59 |
dpavlin |
11 |
id serial, |
60 |
dpavlin |
36 |
user_id int not null references users(id), |
61 |
|
|
list_id int not null references lists(id), |
62 |
|
|
message_id int references messages(id), |
63 |
dpavlin |
4 |
message text not null, |
64 |
|
|
bounced boolean not null default false, |
65 |
|
|
date timestamp not null default now(), |
66 |
dpavlin |
11 |
primary key (id) |
67 |
dpavlin |
4 |
); |
68 |
|
|
|
69 |
dpavlin |
36 |
create index received_user_id_int on received(user_id); |
70 |
|
|
create index received_list_id_int on received(list_id); |
71 |
dpavlin |
4 |
|
72 |
dpavlin |
36 |
|
73 |
dpavlin |
1 |
insert into users (email, full_name) values ('dpavlin@rot13.org', 'DbP'); |
74 |
|
|
insert into users (email, full_name) values ('dpavlin@gmail.com', 'DbP'); |
75 |
|
|
insert into users (email, full_name) values ('xxx_doesnt_exist_xxx@gmail.com', 'fake'); |
76 |
|
|
|
77 |
dpavlin |
17 |
insert into lists (name, email) values ('Just me','my-alter-ego@rot13.org'); |
78 |
|
|
insert into lists (name, email) values ('All users','announce@example.com'); |
79 |
dpavlin |
1 |
|
80 |
|
|
insert into user_list (user_id, list_id) select users.id,1 from users limit 1; |
81 |
|
|
insert into user_list (user_id, list_id) select users.id,2 from users; |