База данных адаптирована под актуальный бизнес-процесс

Этот коммит содержится в:
Глеб Иваницкий 2024-08-19 18:16:07 +03:00
родитель 8bc44bd59d
Коммит b0edb71ad4

Просмотреть файл

@ -1,18 +1,27 @@
create type user_role as enum (
'user',
'moderator',
'admin'
);
create table users (
id bigserial not null,
telegram_user_id bigint not null,
first_name character varying (64) not null,
last_name character varying (64),
username character varying (32),
role user_role,
primary key (id),
unique (telegram_user_id)
);
create table poll_schemas (
id bigserial not null,
owner_id bigint not null,
name character varying (32) not null,
question character varying (255) not null,
primary key (id),
foreign key (owner_id) references users on delete cascade on update cascade,
unique (name)
);
@ -27,19 +36,57 @@ create table poll_options (
unique (poll_schema_id, ordinal)
);
create table polls (
create table messages (
id bigserial not null,
telegram_message_id bigint not null,
created_at timestamp default now() not null,
primary key (id),
unique (telegram_message_id)
);
create table text_messages (
text character varying (4096) not null
) inherits (messages);
create table poll_messages (
telegram_poll_id text not null,
poll_schema_id bigint not null,
created_at timestamp default now() not null,
is_complete boolean default false not null,
primary key (id),
foreign key (poll_schema_id) references poll_schemas on delete cascade on update cascade,
unique (telegram_message_id),
unique (telegram_poll_id)
);
create table media_messages () inherits (messages);
create table media_message_files (
id bigserial not null,
media_message_id bigint not null,
name character varying (256) not null,
caption character varying (4096) not null,
primary key (id),
foreign key (media_message_id) references media_messages on delete cascade on update cascade
);
create table contact_messages (
phone_number character varying (16) not null,
first_name character varying (32) not null
) inherits (messages);
create table dice_messages (
value smallint not null
);
-- create table polls (
-- id bigserial not null,
-- telegram_message_id bigint not null,
-- telegram_poll_id text not null,
-- poll_schema_id bigint not null,
-- created_at timestamp default now() not null,
-- is_complete boolean default false not null,
-- primary key (id),
-- foreign key (poll_schema_id) references poll_schemas on delete cascade on update cascade,
-- unique (telegram_message_id),
-- unique (telegram_poll_id)
-- );
create table poll_answers (
id bigserial not null,
poll_id bigint not null,