510 lines
16 KiB
SQL
510 lines
16 KiB
SQL
\connect sova_backend_local
|
|
|
|
DROP SCHEMA public CASCADE;
|
|
CREATE SCHEMA public;
|
|
GRANT ALL ON SCHEMA public TO sova_local;
|
|
|
|
CREATE TABLE users (
|
|
id INTEGER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
|
|
uid INTEGER NOT NULL UNIQUE,
|
|
email VARCHAR(180),
|
|
roles JSONB NOT NULL DEFAULT '[]',
|
|
region_id INTEGER NOT NULL DEFAULT 91,
|
|
password VARCHAR(255) NOT NULL,
|
|
birth_date DATE,
|
|
logged_in TIMESTAMP
|
|
);
|
|
|
|
CREATE TABLE departments (
|
|
id INTEGER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
|
|
did BIGINT NOT NULL UNIQUE,
|
|
name VARCHAR(255) NOT NULL,
|
|
online_mode BOOLEAN NOT NULL DEFAULT true,
|
|
alias VARCHAR(255) NOT NULL,
|
|
active BOOLEAN NOT NULL DEFAULT true,
|
|
group_name VARCHAR(255)
|
|
);
|
|
|
|
CREATE TABLE filial (
|
|
id INTEGER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
|
|
fid INTEGER NOT NULL UNIQUE,
|
|
name VARCHAR(255) NOT NULL,
|
|
address VARCHAR(255),
|
|
region_id INTEGER,
|
|
site_id INTEGER,
|
|
active BOOLEAN NOT NULL DEFAULT true,
|
|
company VARCHAR(255),
|
|
short_name VARCHAR(255),
|
|
phone VARCHAR(255),
|
|
policy TEXT,
|
|
picture VARCHAR(255),
|
|
email VARCHAR(255),
|
|
origin VARCHAR(255)
|
|
);
|
|
|
|
CREATE TABLE specialist (
|
|
id INTEGER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
|
|
name VARCHAR(255) NOT NULL,
|
|
preview_picture VARCHAR(255),
|
|
active BOOLEAN NOT NULL DEFAULT true,
|
|
display_schedule BOOLEAN NOT NULL DEFAULT true,
|
|
dcodes VARCHAR(255),
|
|
region_id INTEGER,
|
|
alias VARCHAR(255) NOT NULL,
|
|
post VARCHAR(255),
|
|
experience VARCHAR(255),
|
|
s_type INTEGER,
|
|
update_at TIMESTAMP NOT NULL DEFAULT now(),
|
|
anons TEXT,
|
|
content TEXT,
|
|
tags JSONB,
|
|
highlighted_tags JSONB,
|
|
video VARCHAR(255),
|
|
video_vertical VARCHAR(255),
|
|
schedule_text VARCHAR(255),
|
|
category VARCHAR(255),
|
|
patient_age INTEGER,
|
|
kodoper JSONB,
|
|
only_online_mode BOOLEAN,
|
|
prodoctor BOOLEAN,
|
|
prodoctor_text VARCHAR(255),
|
|
prodoctor_link VARCHAR(255),
|
|
degree VARCHAR(255),
|
|
kiosk BOOLEAN NOT NULL DEFAULT false,
|
|
filials JSONB,
|
|
accepts_dms BOOLEAN,
|
|
specialities JSONB
|
|
);
|
|
|
|
CREATE TABLE location (
|
|
id BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
|
|
dcode BIGINT,
|
|
department BIGINT NOT NULL,
|
|
filial INTEGER NOT NULL,
|
|
online_mode BOOLEAN NOT NULL DEFAULT true,
|
|
active BOOLEAN NOT NULL DEFAULT true,
|
|
nearest_date DATE,
|
|
specialist_id INTEGER REFERENCES specialist(id) ON DELETE CASCADE
|
|
);
|
|
|
|
CREATE TABLE review (
|
|
id INTEGER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
|
|
specialist_id INTEGER REFERENCES specialist(id) ON DELETE CASCADE,
|
|
active BOOLEAN NOT NULL DEFAULT true,
|
|
date_create DATE NOT NULL DEFAULT CURRENT_DATE,
|
|
message TEXT NOT NULL,
|
|
author VARCHAR(255) NOT NULL,
|
|
rating DOUBLE PRECISION NOT NULL DEFAULT 5,
|
|
source VARCHAR(255),
|
|
external_id INTEGER
|
|
);
|
|
|
|
CREATE TABLE specialist_docs (
|
|
id INTEGER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
|
|
specialist_id INTEGER REFERENCES specialist(id) ON DELETE CASCADE,
|
|
name VARCHAR(255) NOT NULL,
|
|
description VARCHAR(255),
|
|
picture VARCHAR(255),
|
|
active BOOLEAN NOT NULL DEFAULT true,
|
|
type VARCHAR(255) NOT NULL
|
|
);
|
|
|
|
CREATE TABLE specialist_dcode_description (
|
|
id INTEGER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
|
|
dcode BIGINT NOT NULL,
|
|
department BIGINT,
|
|
specialist_id INTEGER NOT NULL REFERENCES specialist(id) ON DELETE CASCADE,
|
|
content TEXT NOT NULL,
|
|
create_at TIMESTAMP NOT NULL DEFAULT now(),
|
|
update_at TIMESTAMP NOT NULL DEFAULT now()
|
|
);
|
|
|
|
CREATE TABLE stock (
|
|
id INTEGER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
|
|
name VARCHAR(255) NOT NULL,
|
|
content TEXT NOT NULL,
|
|
picture VARCHAR(255),
|
|
anons TEXT,
|
|
start_date TIMESTAMP NOT NULL DEFAULT now(),
|
|
end_date TIMESTAMP NOT NULL DEFAULT now() + interval '30 days'
|
|
);
|
|
|
|
CREATE TABLE stock_specialist (
|
|
stock_id INTEGER NOT NULL REFERENCES stock(id) ON DELETE CASCADE,
|
|
specialist_id INTEGER NOT NULL REFERENCES specialist(id) ON DELETE CASCADE,
|
|
PRIMARY KEY (stock_id, specialist_id)
|
|
);
|
|
|
|
CREATE TABLE price_department (
|
|
id INTEGER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
|
|
name VARCHAR(255) NOT NULL,
|
|
group_id INTEGER NOT NULL,
|
|
doct_count INTEGER DEFAULT 0,
|
|
view_in_web BOOLEAN DEFAULT true
|
|
);
|
|
|
|
CREATE TABLE price_list (
|
|
id INTEGER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
|
|
kodoper INTEGER,
|
|
schname VARCHAR(255),
|
|
specname VARCHAR(255),
|
|
speccode INTEGER,
|
|
price_info JSONB,
|
|
discprice NUMERIC(10,2),
|
|
structname VARCHAR(255),
|
|
fname VARCHAR(255),
|
|
filial INTEGER,
|
|
comment TEXT,
|
|
media_id INTEGER,
|
|
date_update TIMESTAMP DEFAULT now(),
|
|
group_id INTEGER,
|
|
discpercent INTEGER
|
|
);
|
|
|
|
CREATE TABLE schedule (
|
|
id INTEGER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
|
|
dcode BIGINT,
|
|
department BIGINT,
|
|
filial INTEGER,
|
|
schedident BIGINT,
|
|
workdate DATE,
|
|
rnum VARCHAR(255),
|
|
rfloor VARCHAR(255),
|
|
rbuilding VARCHAR(255),
|
|
time JSONB,
|
|
is_free BOOLEAN DEFAULT true,
|
|
online_mode BOOLEAN DEFAULT false,
|
|
query_string TEXT,
|
|
created_at TIMESTAMP DEFAULT now(),
|
|
interval_is_free BOOLEAN DEFAULT true,
|
|
price_info NUMERIC(10,2)
|
|
);
|
|
|
|
CREATE TABLE record (
|
|
id INTEGER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
|
|
specialist_id INTEGER NOT NULL,
|
|
phone VARCHAR(255) NOT NULL,
|
|
create_at TIMESTAMP NOT NULL DEFAULT now(),
|
|
hash VARCHAR(255) NOT NULL,
|
|
reserve JSONB NOT NULL DEFAULT '{}'
|
|
);
|
|
|
|
CREATE TABLE alert_sms (
|
|
id INTEGER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
|
|
record_id INTEGER UNIQUE REFERENCES record(id) ON DELETE CASCADE,
|
|
date_create TIMESTAMP NOT NULL DEFAULT now(),
|
|
response TEXT NOT NULL
|
|
);
|
|
|
|
CREATE TABLE widget_form (
|
|
id INTEGER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
|
|
name VARCHAR(255) NOT NULL
|
|
);
|
|
|
|
CREATE TABLE widget_form_input (
|
|
id INTEGER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
|
|
text VARCHAR(255) NOT NULL,
|
|
type VARCHAR(255) NOT NULL,
|
|
bitrix24_id VARCHAR(255) NOT NULL,
|
|
widget_form_id INTEGER NOT NULL REFERENCES widget_form(id) ON DELETE CASCADE,
|
|
sort INTEGER NOT NULL DEFAULT 100
|
|
);
|
|
|
|
CREATE TABLE article (
|
|
id INTEGER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
|
|
name TEXT,
|
|
preview_picture TEXT,
|
|
active BOOLEAN DEFAULT true,
|
|
doctors JSONB,
|
|
services JSONB,
|
|
region_id INTEGER,
|
|
alias TEXT,
|
|
anons TEXT,
|
|
content TEXT,
|
|
update_at TIMESTAMP DEFAULT now()
|
|
);
|
|
|
|
CREATE TABLE disease (
|
|
id INTEGER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
|
|
name VARCHAR(255),
|
|
preview_picture VARCHAR(255),
|
|
active BOOLEAN DEFAULT true,
|
|
region_id INTEGER,
|
|
alias VARCHAR(255),
|
|
anons TEXT,
|
|
update_at TIMESTAMP DEFAULT now(),
|
|
hide_picture BOOLEAN,
|
|
read_time TEXT,
|
|
diseases_name TEXT,
|
|
tags_important JSONB,
|
|
tags JSONB,
|
|
diseases_other_name TEXT,
|
|
symptom TEXT,
|
|
staff TEXT,
|
|
link_services JSONB,
|
|
staff_list JSONB,
|
|
staff_post JSONB,
|
|
staff_post_exclude JSONB,
|
|
link_faq JSONB,
|
|
bibliography TEXT,
|
|
staff_check JSONB,
|
|
content TEXT
|
|
);
|
|
|
|
CREATE TABLE medical_center (
|
|
id INTEGER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
|
|
name VARCHAR(255),
|
|
active BOOLEAN DEFAULT true,
|
|
region_id INTEGER,
|
|
alias VARCHAR(255),
|
|
anons TEXT,
|
|
content TEXT,
|
|
update_at TIMESTAMP DEFAULT now(),
|
|
kod_uslug JSONB,
|
|
doctors JSONB,
|
|
services JSONB,
|
|
articles JSONB,
|
|
txt_up JSONB,
|
|
main_link_staff TEXT,
|
|
contraindications JSONB,
|
|
hide_picture INTEGER,
|
|
indications JSONB,
|
|
link_sale JSONB,
|
|
plus_list JSONB,
|
|
plus_text TEXT,
|
|
plus_title TEXT,
|
|
process_text TEXT,
|
|
process_title TEXT,
|
|
services_list JSONB,
|
|
services_photos JSONB,
|
|
services_title TEXT,
|
|
sort_staff JSONB,
|
|
training_text TEXT,
|
|
training_text_title TEXT,
|
|
why_text TEXT,
|
|
why_title TEXT
|
|
);
|
|
|
|
CREATE TABLE news (
|
|
id INTEGER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
|
|
name VARCHAR(255),
|
|
active BOOLEAN DEFAULT true,
|
|
region_id INTEGER,
|
|
alias VARCHAR(255),
|
|
anons TEXT,
|
|
content TEXT,
|
|
update_at TIMESTAMP DEFAULT now(),
|
|
link_el_price TEXT,
|
|
short_name TEXT,
|
|
timer TEXT,
|
|
timer_bg TEXT,
|
|
form_order JSONB,
|
|
link_services JSONB,
|
|
link_staff JSONB,
|
|
photos JSONB
|
|
);
|
|
|
|
CREATE TABLE promo (
|
|
id INTEGER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
|
|
name VARCHAR(255),
|
|
active BOOLEAN DEFAULT true,
|
|
region_id INTEGER,
|
|
alias VARCHAR(255),
|
|
anons TEXT,
|
|
content TEXT,
|
|
update_at TIMESTAMP DEFAULT now(),
|
|
clinics JSONB,
|
|
timer TEXT,
|
|
timer_bg TEXT,
|
|
short_name TEXT,
|
|
link_services JSONB,
|
|
link_staff JSONB,
|
|
period VARCHAR(255),
|
|
photos JSONB
|
|
);
|
|
|
|
CREATE TABLE site_services (
|
|
id INTEGER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
|
|
name VARCHAR(255),
|
|
active BOOLEAN DEFAULT true,
|
|
region_id INTEGER,
|
|
alias VARCHAR(255),
|
|
anons TEXT,
|
|
content TEXT,
|
|
update_at TIMESTAMP DEFAULT now(),
|
|
link_videoreviews JSONB,
|
|
preview_img TEXT,
|
|
faq JSONB,
|
|
part_price TEXT,
|
|
pokazaniya TEXT,
|
|
preparation TEXT,
|
|
protivopokazaniya TEXT,
|
|
hide_sign_btn JSONB,
|
|
quiz JSONB,
|
|
tags JSONB,
|
|
tags_important JSONB,
|
|
banner_img TEXT,
|
|
banner_img_m TEXT,
|
|
banner_img_url TEXT,
|
|
clinics JSONB,
|
|
download_file TEXT,
|
|
full_width_banner TEXT,
|
|
staff_up JSONB,
|
|
advantages JSONB,
|
|
hide_picture INTEGER,
|
|
kod_uslug TEXT,
|
|
link_price TEXT,
|
|
photos_title TEXT,
|
|
sale_id JSONB,
|
|
sort_staff JSONB,
|
|
contraindications_list TEXT,
|
|
custom_block_text TEXT,
|
|
custom_block_text2 TEXT,
|
|
custom_block_title TEXT,
|
|
custom_block_title2 TEXT,
|
|
indications_list TEXT,
|
|
link_articles_services JSONB,
|
|
plus_list TEXT,
|
|
plus_text TEXT,
|
|
plus_title TEXT,
|
|
prepare_title TEXT,
|
|
process_text TEXT,
|
|
process_title TEXT,
|
|
services_list TEXT,
|
|
services_photos JSONB,
|
|
services_title TEXT,
|
|
text_up TEXT,
|
|
training_text TEXT,
|
|
why_text TEXT,
|
|
why_title TEXT,
|
|
link_faq JSONB,
|
|
link_services JSONB,
|
|
link_staff JSONB,
|
|
photos JSONB
|
|
);
|
|
|
|
CREATE TABLE web_get_docinfo (
|
|
id INTEGER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
|
|
source_table VARCHAR(255),
|
|
doc_name VARCHAR(255),
|
|
doc_post VARCHAR(255),
|
|
filial INTEGER,
|
|
viewinweb BOOLEAN,
|
|
depnum INTEGER,
|
|
first_schid INTEGER,
|
|
second_schid INTEGER,
|
|
accepts_dms BOOLEAN,
|
|
anons TEXT,
|
|
content TEXT,
|
|
updated_at TIMESTAMP DEFAULT now()
|
|
);
|
|
|
|
CREATE TABLE idoctor (
|
|
id INTEGER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
|
|
dcode INTEGER,
|
|
name VARCHAR(255),
|
|
department INTEGER,
|
|
filial INTEGER,
|
|
nearest_date DATE,
|
|
online_mode BOOLEAN DEFAULT true,
|
|
updated TIMESTAMP DEFAULT now()
|
|
);
|
|
|
|
INSERT INTO users (uid, email, roles, region_id, password, birth_date)
|
|
VALUES (100001, md5('local.backend@example.test'), '["ROLE_USER","ROLE_ADMIN"]', 91, '$2y$13$Y98kYF03yQjzDo0HsvvWMu..4SqB3Kgv2d8GNf870MEjJbXUJ2i.a', '1990-01-01');
|
|
|
|
INSERT INTO departments (did, name, online_mode, alias, group_name)
|
|
VALUES (10, 'Терапия', true, 'terapiya', 'Взрослые специалисты');
|
|
|
|
INSERT INTO filial (fid, name, address, region_id, site_id, company, short_name, phone, email)
|
|
VALUES
|
|
(1, 'Сова Саратов', 'Localhost, 1', 91, 1, 'ООО Local Clinic', 'Саратов', '+70000000001', 'saratov@example.test'),
|
|
(2, 'Сова Волгоград', 'Localhost, 2', 92, 2, 'ООО Local Clinic', 'Волгоград', '+70000000002', 'volgograd@example.test'),
|
|
(3, 'Сова Воронеж', 'Localhost, 3', 93, 3, 'ООО Local Clinic', 'Воронеж', '+70000000003', 'voronezh@example.test'),
|
|
(4, 'Сова Краснодар', 'Localhost, 4', 94, 4, 'ООО Local Clinic', 'Краснодар', '+70000000004', 'krasnodar@example.test');
|
|
|
|
INSERT INTO specialist (name, active, display_schedule, dcodes, region_id, alias, post, experience, s_type, anons, content, kodoper, filials, accepts_dms, specialities)
|
|
VALUES ('Иванов Иван Иванович', true, true, '101', 91, 'ivanov-ivan', 'Врач-терапевт', '2014', 1, 'Тестовый врач', 'Тестовое описание врача', '[1001]', '[1]', true, '["Терапия"]');
|
|
|
|
INSERT INTO location (dcode, department, filial, online_mode, active, nearest_date, specialist_id)
|
|
VALUES (101, 10, 1, true, true, CURRENT_DATE + interval '1 day', 1);
|
|
|
|
INSERT INTO review (specialist_id, message, author, rating, source, external_id)
|
|
VALUES (1, 'Тестовый отзыв для локальной базы', 'Пациент Local', 5, 'local', 1);
|
|
|
|
INSERT INTO specialist_docs (specialist_id, name, active, type)
|
|
VALUES (1, 'Тестовый сертификат', true, 'certificate');
|
|
|
|
INSERT INTO specialist_dcode_description (dcode, department, specialist_id, content)
|
|
VALUES (101, 10, 1, 'Локальное описание врача по dcode.');
|
|
|
|
INSERT INTO stock (name, content, anons)
|
|
VALUES ('Local акция', 'Тестовая акция только для локальной разработки', 'Local');
|
|
|
|
INSERT INTO stock_specialist (stock_id, specialist_id) VALUES (1, 1);
|
|
|
|
INSERT INTO price_department (name, group_id, doct_count, view_in_web)
|
|
VALUES ('Консультации', 100, 1, true);
|
|
|
|
INSERT INTO price_list (kodoper, schname, specname, speccode, price_info, discprice, structname, fname, filial, group_id)
|
|
VALUES (1001, 'Прием терапевта', 'Иванов Иван Иванович', 101, '{"base":1500,"discount":1200}', 1200, 'Терапия', 'Сова Local', 1, 100);
|
|
|
|
INSERT INTO schedule (dcode, department, filial, schedident, workdate, time, is_free, online_mode, price_info)
|
|
VALUES (101, 10, 1, 555001, CURRENT_DATE + interval '1 day', '[{"st":"09:00","en":"09:30"}]', true, true, 1500);
|
|
|
|
INSERT INTO record (specialist_id, phone, hash, reserve)
|
|
VALUES (1, '+70000000000', md5('+70000000000'), '{"local":true,"date":"tomorrow"}');
|
|
|
|
INSERT INTO alert_sms (record_id, response)
|
|
VALUES (1, '{"status":"local-ok"}');
|
|
|
|
INSERT INTO widget_form (name) VALUES ('Local форма');
|
|
INSERT INTO widget_form_input (text, type, bitrix24_id, widget_form_id, sort)
|
|
VALUES ('Телефон', 'phone', 'PHONE', 1, 10);
|
|
|
|
INSERT INTO article (name, active, region_id, alias, anons, content)
|
|
VALUES ('Local статья', true, 91, 'local-article', 'Анонс', 'Контент локальной статьи');
|
|
|
|
INSERT INTO disease (name, active, region_id, alias, anons, content)
|
|
VALUES ('Local заболевание', true, 91, 'local-disease', 'Анонс', 'Описание');
|
|
|
|
INSERT INTO medical_center (name, active, region_id, alias, anons, content)
|
|
VALUES ('Local медцентр', true, 91, 'local-center', 'Анонс', 'Описание');
|
|
|
|
INSERT INTO news (name, active, region_id, alias, anons, content)
|
|
VALUES ('Local новость', true, 91, 'local-news', 'Анонс', 'Контент');
|
|
|
|
INSERT INTO promo (name, active, region_id, alias, anons, content, period)
|
|
VALUES ('Local промо', true, 91, 'local-promo', 'Анонс', 'Контент', 'Всегда');
|
|
|
|
INSERT INTO site_services (name, active, region_id, alias, anons, content, tags)
|
|
VALUES ('Local услуга', true, 91, 'local-service', 'Анонс', 'Контент', '["local"]');
|
|
|
|
INSERT INTO web_get_docinfo (source_table, doc_name, doc_post, filial, viewinweb, depnum, accepts_dms, anons, content)
|
|
VALUES ('local', 'Иванов Иван Иванович', 'Врач-терапевт', 1, true, 10, true, 'Анонс', 'Описание');
|
|
|
|
INSERT INTO idoctor (dcode, name, department, filial, nearest_date, online_mode)
|
|
VALUES (101, 'Иванов Иван Иванович', 10, 1, CURRENT_DATE + interval '1 day', true);
|
|
|
|
-- После seed INSERT sequence identity должен указывать на MAX(id), иначе CREATE вернёт duplicate key id=1.
|
|
DO $body$
|
|
DECLARE
|
|
tbl text;
|
|
BEGIN
|
|
FOREACH tbl IN ARRAY ARRAY[
|
|
'users', 'departments', 'filial', 'specialist', 'location', 'review',
|
|
'specialist_docs', 'specialist_dcode_description', 'stock',
|
|
'price_department', 'price_list', 'schedule', 'record', 'alert_sms',
|
|
'widget_form', 'widget_form_input', 'article', 'disease', 'medical_center',
|
|
'news', 'promo', 'site_services', 'web_get_docinfo', 'idoctor'
|
|
]
|
|
LOOP
|
|
EXECUTE format(
|
|
'SELECT setval(pg_get_serial_sequence(%L, ''id''), COALESCE((SELECT MAX(id) FROM %I), 1), true)',
|
|
tbl,
|
|
tbl
|
|
);
|
|
END LOOP;
|
|
END
|
|
$body$;
|