chore: initial import for test contour

This commit is contained in:
sova-bootstrap
2026-05-27 19:36:33 +03:00
commit 11596ee01b
36 changed files with 2816 additions and 0 deletions
+5
View File
@@ -0,0 +1,5 @@
apiVersion: v2
name: db-init
description: Schema then seed for test databases
type: application
version: 0.1.0
+1
View File
@@ -0,0 +1 @@
../test/sql
+133
View File
@@ -0,0 +1,133 @@
apiVersion: v1
kind: ConfigMap
metadata:
name: postgres-schema-sql
namespace: {{ .Values.namespace }}
data:
{{- range $path, $_ := .Files.Glob "sql/postgres/schema/*.sql" }}
{{ base $path }}: |
{{ $.Files.Get $path | indent 4 }}
{{- end }}
---
apiVersion: v1
kind: ConfigMap
metadata:
name: postgres-seed-sql
namespace: {{ .Values.namespace }}
data:
{{- range $path, $_ := .Files.Glob "sql/postgres/seed/*.sql" }}
{{ base $path }}: |
{{ $.Files.Get $path | indent 4 }}
{{- end }}
---
apiVersion: v1
kind: ConfigMap
metadata:
name: mysql-schema-sql
namespace: {{ .Values.namespace }}
data:
{{- range $path, $_ := .Files.Glob "sql/mysql-bitrix/schema/*.sql" }}
{{ base $path }}: |
{{ $.Files.Get $path | indent 4 }}
{{- end }}
---
apiVersion: v1
kind: ConfigMap
metadata:
name: mysql-seed-sql
namespace: {{ .Values.namespace }}
data:
{{- range $path, $_ := .Files.Glob "sql/mysql-bitrix/seed/*.sql" }}
{{ base $path }}: |
{{ $.Files.Get $path | indent 4 }}
{{- end }}
---
apiVersion: batch/v1
kind: Job
metadata:
name: db-init
namespace: {{ .Values.namespace }}
spec:
backoffLimit: 2
ttlSecondsAfterFinished: 3600
template:
spec:
restartPolicy: OnFailure
initContainers:
- name: wait-pg
image: postgres:16-alpine
command:
- sh
- -c
- |
until pg_isready -h {{ .Values.postgres.host }} -p 5432 -U {{ .Values.postgres.user }}; do sleep 3; done
- name: wait-mysql
image: mysql:8.0
env:
- name: MYSQL_PWD
value: {{ .Values.mysql.password | quote }}
command:
- sh
- -c
- |
until mysqladmin ping -h {{ .Values.mysql.host }} -u{{ .Values.mysql.user }} --silent; do sleep 3; done
containers:
- name: init
image: postgres:16-alpine
env:
- name: PGPASSWORD
value: {{ .Values.postgres.password | quote }}
- name: MYSQL_PWD
value: {{ .Values.mysql.password | quote }}
command:
- sh
- -c
- |
set -e
echo "=== Phase 1: schema ==="
for f in $(ls /schema/postgres/*.sql 2>/dev/null | sort); do
[ -s "$f" ] || continue
echo "PG schema: $(basename $f)"
psql -h {{ .Values.postgres.host }} -U {{ .Values.postgres.user }} -d postgres -v ON_ERROR_STOP=1 -f "$f"
done
apk add --no-cache mariadb-client >/dev/null
for f in $(ls /schema/mysql/*.sql 2>/dev/null | sort); do
[ -s "$f" ] || continue
echo "MySQL schema: $(basename $f)"
mariadb --skip-ssl -h {{ .Values.mysql.host }} -u{{ .Values.mysql.user }} {{ .Values.mysql.database }} < "$f"
done
echo "=== Phase 2: seed ==="
for f in $(ls /seed/postgres/*.sql 2>/dev/null | sort); do
[ -s "$f" ] || continue
echo "PG seed: $(basename $f)"
psql -h {{ .Values.postgres.host }} -U {{ .Values.postgres.user }} -d postgres -v ON_ERROR_STOP=1 -f "$f"
done
for f in $(ls /seed/mysql/*.sql 2>/dev/null | sort); do
[ -s "$f" ] || continue
echo "MySQL seed: $(basename $f)"
mariadb --skip-ssl -h {{ .Values.mysql.host }} -u{{ .Values.mysql.user }} {{ .Values.mysql.database }} < "$f"
done
echo "DB init complete"
volumeMounts:
- name: pg-schema
mountPath: /schema/postgres
- name: mysql-schema
mountPath: /schema/mysql
- name: pg-seed
mountPath: /seed/postgres
- name: mysql-seed
mountPath: /seed/mysql
volumes:
- name: pg-schema
configMap:
name: postgres-schema-sql
- name: mysql-schema
configMap:
name: mysql-schema-sql
- name: pg-seed
configMap:
name: postgres-seed-sql
- name: mysql-seed
configMap:
name: mysql-seed-sql
+12
View File
@@ -0,0 +1,12 @@
namespace: sova-data-test
postgres:
host: postgresql-test.sova-data-test.svc.cluster.local
user: sova_test
password: sova_test_pass
mysql:
host: mysql-bitrix-test.sova-data-test.svc.cluster.local
user: bitrix_test
password: bitrix_test_pass
database: sova_bitrix_test
@@ -0,0 +1,67 @@
DROP TABLE IF EXISTS b_iblock_element_property;
DROP TABLE IF EXISTS b_iblock_property;
DROP TABLE IF EXISTS b_iblock_element;
DROP TABLE IF EXISTS b_file;
CREATE TABLE b_file (
ID INT PRIMARY KEY,
SUBDIR VARCHAR(255),
FILE_NAME VARCHAR(255)
) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE TABLE b_iblock_element (
ID INT PRIMARY KEY,
IBLOCK_ID INT,
IBLOCK_SECTION_ID INT NULL,
WF_PARENT_ELEMENT_ID INT NULL,
XML_ID VARCHAR(255) NULL,
NAME VARCHAR(255),
ACTIVE CHAR(1) DEFAULT 'Y',
CODE VARCHAR(255),
PREVIEW_PICTURE INT NULL,
PREVIEW_TEXT TEXT,
DETAIL_TEXT TEXT,
DATE_CREATE DATETIME DEFAULT CURRENT_TIMESTAMP,
TIMESTAMP_X DATETIME DEFAULT CURRENT_TIMESTAMP
) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE TABLE b_iblock_property (
ID INT PRIMARY KEY,
IBLOCK_ID INT,
NAME VARCHAR(255),
CODE VARCHAR(255),
ACTIVE CHAR(1) DEFAULT 'Y'
) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE TABLE b_iblock_element_property (
ID INT PRIMARY KEY AUTO_INCREMENT,
IBLOCK_PROPERTY_ID INT,
IBLOCK_ELEMENT_ID INT,
VALUE TEXT,
INDEX idx_element (IBLOCK_ELEMENT_ID),
INDEX idx_property (IBLOCK_PROPERTY_ID)
) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
INSERT INTO b_file (ID, SUBDIR, FILE_NAME)
VALUES (1, 'local', 'doctor.png');
INSERT INTO b_iblock_element (ID, IBLOCK_ID, XML_ID, NAME, ACTIVE, CODE, PREVIEW_PICTURE, PREVIEW_TEXT, DETAIL_TEXT)
VALUES
(1001, 91, '101', 'Иванов Иван Иванович', 'Y', 'ivanov-ivan', 1, 'Тестовый врач Bitrix', 'Локальное описание врача из Bitrix'),
(2001, 91, 'review-1', 'Local review', 'Y', 'local-review', NULL, 'Отзыв', 'Отзыв из локального Bitrix');
INSERT INTO b_iblock_property (ID, IBLOCK_ID, NAME, CODE, ACTIVE)
VALUES
(1, 91, 'Связанный врач', 'MEDIC', 'Y'),
(2, 91, 'Текст отзыва', 'MESSAGE', 'Y'),
(3, 91, 'Код услуги', 'KOD', 'Y'),
(4, 91, 'Отзывы', 'LINK_REVIEWS', 'Y'),
(5, 91, 'Прайс', 'LINK_PRICE_1', 'Y');
INSERT INTO b_iblock_element_property (IBLOCK_PROPERTY_ID, IBLOCK_ELEMENT_ID, VALUE)
VALUES
(1, 2001, '1001'),
(2, 2001, 'Локальный отзыв из Bitrix'),
(3, 1001, '1001'),
(4, 1001, '2001'),
(5, 1001, '1001');
+48
View File
@@ -0,0 +1,48 @@
apiVersion: v1
kind: Service
metadata:
name: mysql-bitrix-test
namespace: sova-data-test
spec:
ports:
- port: 3306
targetPort: 3306
selector:
app: mysql-bitrix-test
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: mysql-bitrix-test
namespace: sova-data-test
spec:
replicas: 1
selector:
matchLabels:
app: mysql-bitrix-test
template:
metadata:
labels:
app: mysql-bitrix-test
spec:
containers:
- name: mysql
image: mysql:8.0
args:
- --default-authentication-plugin=mysql_native_password
env:
- name: MYSQL_ROOT_PASSWORD
value: bitrix_root_test
- name: MYSQL_DATABASE
value: sova_bitrix_test
- name: MYSQL_USER
value: bitrix_test
- name: MYSQL_PASSWORD
value: bitrix_test_pass
ports:
- containerPort: 3306
resources:
requests:
memory: 256Mi
limits:
memory: 512Mi
@@ -0,0 +1 @@
CREATE DATABASE sova_cabinet_local OWNER sova_local;
@@ -0,0 +1,509 @@
\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$;
@@ -0,0 +1,296 @@
\connect sova_cabinet_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,
email VARCHAR(180),
roles JSONB NOT NULL DEFAULT '[]',
password VARCHAR(255),
uid INTEGER NOT NULL UNIQUE,
token VARCHAR(255),
full_name VARCHAR(255) NOT NULL,
phone VARCHAR(255),
confirm BOOLEAN NOT NULL DEFAULT true,
created_at TIMESTAMP DEFAULT now(),
last_activity_at TIMESTAMP DEFAULT now()
);
CREATE TABLE city (
id INTEGER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
name VARCHAR(255) NOT NULL,
region_id INTEGER NOT NULL,
time_zone INTEGER NOT NULL DEFAULT 4
);
CREATE TABLE filial (
id INTEGER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
fid INTEGER NOT NULL,
name VARCHAR(255) NOT NULL,
address VARCHAR(255) NOT NULL,
address_name VARCHAR(255),
site_id INTEGER,
city_id INTEGER REFERENCES city(id) ON DELETE SET NULL,
active BOOLEAN NOT NULL DEFAULT true,
company VARCHAR(255)
);
CREATE TABLE banner (
id INTEGER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
href VARCHAR(255) NOT NULL,
src VARCHAR(255) NOT NULL,
active BOOLEAN NOT NULL DEFAULT true,
city_id INTEGER UNIQUE REFERENCES city(id) ON DELETE CASCADE
);
CREATE TABLE review_source (
id INTEGER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
city_id INTEGER NOT NULL REFERENCES city(id) ON DELETE CASCADE,
name VARCHAR(255) NOT NULL,
count_row INTEGER NOT NULL DEFAULT 0,
active BOOLEAN NOT NULL DEFAULT true,
rating DOUBLE PRECISION NOT NULL DEFAULT 5,
filial_id INTEGER REFERENCES filial(id) ON DELETE SET NULL,
date_create DATE NOT NULL DEFAULT CURRENT_DATE
);
CREATE TABLE category_page (
id INTEGER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
name VARCHAR(255) NOT NULL,
active BOOLEAN NOT NULL DEFAULT true
);
CREATE TABLE page (
id INTEGER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
name VARCHAR(255) NOT NULL,
description TEXT NOT NULL,
active BOOLEAN NOT NULL DEFAULT true,
alias VARCHAR(255) NOT NULL,
category_id INTEGER NOT NULL REFERENCES category_page(id) ON DELETE CASCADE
);
CREATE TABLE department (
id INTEGER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
did INTEGER NOT NULL,
name VARCHAR(255) NOT NULL,
group_name VARCHAR(255) NOT NULL,
online_mode BOOLEAN NOT NULL DEFAULT true,
alias VARCHAR(255) NOT NULL,
active BOOLEAN NOT NULL DEFAULT true,
middle_name VARCHAR(255)
);
CREATE TABLE price_department (
id INTEGER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
name VARCHAR(255) NOT NULL,
group_id INTEGER NOT NULL,
group_name VARCHAR(255),
doct_count INTEGER DEFAULT 0,
view_in_web BOOLEAN DEFAULT true
);
CREATE TABLE price_list_view (
id INTEGER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
kodoper INTEGER,
schname VARCHAR(255),
specname VARCHAR(255),
speccode INTEGER,
price_info JSONB,
discpercent INTEGER,
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
);
CREATE TABLE price (
id INTEGER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
name VARCHAR(255),
value NUMERIC(10,2),
property_value_id INTEGER,
date_update TIMESTAMP DEFAULT now()
);
CREATE TABLE specialist_view (
id INTEGER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
name VARCHAR(255) NOT NULL,
kinder INTEGER,
speciality VARCHAR(255),
category VARCHAR(255),
experience VARCHAR(255),
description TEXT,
infoclinica BOOLEAN DEFAULT true,
alias VARCHAR(255) NOT NULL,
dcode INTEGER NOT NULL,
s_type INTEGER,
active BOOLEAN DEFAULT true,
region_id INTEGER,
kodoper JSONB,
updated TIMESTAMP DEFAULT now(),
accepts_dms BOOLEAN DEFAULT true,
degree VARCHAR(255)
);
CREATE TABLE location_view (
id INTEGER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
dcode INTEGER NOT NULL,
department INTEGER NOT NULL,
filial INTEGER NOT NULL,
specialist_id INTEGER NOT NULL,
online_mode BOOLEAN NOT NULL DEFAULT true,
active BOOLEAN NOT NULL DEFAULT true,
nearest_date DATE
);
CREATE TABLE remote_review (
id INTEGER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
external_id INTEGER,
specialist_id INTEGER,
active BOOLEAN DEFAULT true,
date_create DATE DEFAULT CURRENT_DATE,
message TEXT,
author VARCHAR(255),
rating DOUBLE PRECISION DEFAULT 5,
source VARCHAR(255)
);
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 REFERENCES widget_form(id) ON DELETE CASCADE,
sort INTEGER NOT NULL DEFAULT 100
);
CREATE TABLE usrlog (
id INTEGER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
pcode INTEGER,
agent TEXT,
client_ip VARCHAR(255),
method VARCHAR(255),
created_at TIMESTAMP DEFAULT now()
);
CREATE TABLE direct_company (
id INTEGER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
name VARCHAR(255),
company_id BIGINT,
city VARCHAR(255)
);
CREATE TABLE direct_report (
id INTEGER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
date DATE,
ad_group_id BIGINT,
campaign_id BIGINT,
ad_id BIGINT,
impressions INTEGER,
clicks INTEGER,
cost DOUBLE PRECISION,
conversions INTEGER
);
INSERT INTO users (email, roles, password, uid, token, full_name, phone, confirm)
VALUES (
'6c6f63616c2e636162696e6574406578616d706c652e74657374',
'["ROLE_USER","ROLE_ADMIN"]',
'$2y$12$hqHoZsKN01W.IBcfZYRf.OygGbGIMM7RW0M8fZxo.DNjswjj07S2u',
200001,
'Yjd4N6Xlvfay4sNPfPf6PBeosTdmpfCl6+xg9a9V7BnHmfocaw6YSD4NF6Vrvqrm9+nwzNsm5KzpoFV23nG8Lw==',
'qpHB5XVk6VcuthTcmGV7zqBFN805ejONu+ciwz5nwC4AyEjJ0oH7Ci5ISfgpvwbn2NhLHyTA5tCnN2jd4qQogQ==',
'2I/vmVgNZC98ben0LPkqxmZX1oiAP/k+aXCn3+/dxTBCPBlN7VLR9uiSoWcOuxeBi2rAzfl9t1N1b/PJkJO6MQ==',
true
);
INSERT INTO city (name, region_id, time_zone)
VALUES
('Саратов Local', 91, 4),
('Волгоград Local', 92, 3),
('Воронеж Local', 93, 3),
('Краснодар Local', 94, 3);
INSERT INTO filial (fid, name, address, address_name, site_id, city_id, company)
VALUES
(1, 'Сова Саратов', 'Localhost, 1', 'Саратов', 1, 1, 'ООО Local Clinic'),
(2, 'Сова Волгоград', 'Localhost, 2', 'Волгоград', 2, 2, 'ООО Local Clinic'),
(3, 'Сова Воронеж', 'Localhost, 3', 'Воронеж', 3, 3, 'ООО Local Clinic'),
(4, 'Сова Краснодар', 'Localhost, 4', 'Краснодар', 4, 4, 'ООО Local Clinic');
INSERT INTO banner (href, src, city_id)
VALUES ('http://localhost:8082', '/banners/local.png', 1);
INSERT INTO review_source (city_id, name, count_row, rating, filial_id)
VALUES (1, 'Local Reviews', 1, 5, 1);
INSERT INTO category_page (name, active) VALUES ('Local категория', true);
INSERT INTO page (name, description, active, alias, category_id)
VALUES ('Local страница', 'Контент локальной страницы', true, 'local-page', 1);
INSERT INTO department (did, name, group_name, online_mode, alias, middle_name)
VALUES (10, 'Терапия', 'Взрослые специалисты', true, 'terapiya', 'терапевта');
INSERT INTO price_department (name, group_id, group_name, doct_count, view_in_web)
VALUES ('Консультации', 100, 'Врачи', 1, true);
INSERT INTO specialist_view (name, kinder, speciality, category, experience, description, alias, dcode, s_type, active, region_id, kodoper, accepts_dms, degree)
VALUES ('Иванов Иван Иванович', 0, 'Терапевт', 'Первая категория', '12', 'Локальный врач', 'ivanov-ivan', 101, 1, true, 91, '[1001]', true, 'к.м.н.');
INSERT INTO location_view (dcode, department, filial, specialist_id, online_mode, active, nearest_date)
VALUES (101, 10, 1, 1, true, true, CURRENT_DATE + interval '1 day');
INSERT INTO price_list_view (kodoper, schname, specname, speccode, price_info, discpercent, discprice, structname, fname, filial, group_id)
VALUES (1001, 'Прием терапевта', 'Иванов Иван Иванович', 101, '{"base":1500,"discount":1200}', 10, 1200, 'Терапия', 'Сова Local', 1, 100);
INSERT INTO remote_review (external_id, specialist_id, message, author, rating, source)
VALUES (1, 1, 'Тестовый отзыв для локальной базы', 'Пациент Local', 5, 'local');
INSERT INTO record (specialist_id, phone, hash, reserve)
VALUES (1, '+70000000000', md5('+70000000000'), '{"local":true}');
INSERT INTO alert_sms (record_id, response)
VALUES (1, '{"status":"local-ok"}');
INSERT INTO widget_form (id, name) OVERRIDING SYSTEM VALUE VALUES
(1, 'Local форма'),
(2, 'Вызов врача на дом');
INSERT INTO widget_form_input (text, type, bitrix24_id, widget_form_id, sort) VALUES
('Телефон', 'phone', 'PHONE', 1, 10),
('ФИО пациента', 'text', 'NAME', 2, 10),
('Телефон', 'phone', 'PHONE', 2, 20),
('Адрес выезда', 'text', 'ADDRESS', 2, 30),
('Комментарий / симптомы', 'textarea', 'COMMENTS', 2, 40);
SELECT setval(pg_get_serial_sequence('widget_form', 'id'), (SELECT MAX(id) FROM widget_form));
SELECT setval(pg_get_serial_sequence('widget_form_input', 'id'), (SELECT MAX(id) FROM widget_form_input));
INSERT INTO usrlog (pcode, agent, client_ip, method)
VALUES (200001, 'local-agent', '127.0.0.1', 'seed');
+19
View File
@@ -0,0 +1,19 @@
apiVersion: v2
name: sova-data-test
description: PostgreSQL, MySQL Bitrix, Redis for test
type: application
version: 0.1.0
dependencies:
- name: postgresql
version: 15.5.38
repository: https://charts.bitnami.com/bitnami
condition: postgresql.enabled
- name: mysql
version: 11.4.4
repository: https://charts.bitnami.com/bitnami
condition: mysql.enabled
- name: redis
version: 20.6.3
repository: https://charts.bitnami.com/bitnami
condition: redis.enabled
@@ -0,0 +1,44 @@
DROP TABLE IF EXISTS b_iblock_element_property;
DROP TABLE IF EXISTS b_iblock_property;
DROP TABLE IF EXISTS b_iblock_element;
DROP TABLE IF EXISTS b_file;
CREATE TABLE b_file (
ID INT PRIMARY KEY,
SUBDIR VARCHAR(255),
FILE_NAME VARCHAR(255)
) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE TABLE b_iblock_element (
ID INT PRIMARY KEY,
IBLOCK_ID INT,
IBLOCK_SECTION_ID INT NULL,
WF_PARENT_ELEMENT_ID INT NULL,
XML_ID VARCHAR(255) NULL,
NAME VARCHAR(255),
ACTIVE CHAR(1) DEFAULT 'Y',
CODE VARCHAR(255),
PREVIEW_PICTURE INT NULL,
PREVIEW_TEXT TEXT,
DETAIL_TEXT TEXT,
DATE_CREATE DATETIME DEFAULT CURRENT_TIMESTAMP,
TIMESTAMP_X DATETIME DEFAULT CURRENT_TIMESTAMP
) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE TABLE b_iblock_property (
ID INT PRIMARY KEY,
IBLOCK_ID INT,
NAME VARCHAR(255),
CODE VARCHAR(255),
ACTIVE CHAR(1) DEFAULT 'Y'
) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE TABLE b_iblock_element_property (
ID INT PRIMARY KEY AUTO_INCREMENT,
IBLOCK_PROPERTY_ID INT,
IBLOCK_ELEMENT_ID INT,
VALUE TEXT,
INDEX idx_element (IBLOCK_ELEMENT_ID),
INDEX idx_property (IBLOCK_PROPERTY_ID)
) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
@@ -0,0 +1,23 @@
INSERT INTO b_file (ID, SUBDIR, FILE_NAME)
VALUES (1, 'local', 'doctor.png');
INSERT INTO b_iblock_element (ID, IBLOCK_ID, XML_ID, NAME, ACTIVE, CODE, PREVIEW_PICTURE, PREVIEW_TEXT, DETAIL_TEXT)
VALUES
(1001, 91, '101', 'Иванов Иван Иванович', 'Y', 'ivanov-ivan', 1, 'Тестовый врач Bitrix', 'Локальное описание врача из Bitrix'),
(2001, 91, 'review-1', 'Local review', 'Y', 'local-review', NULL, 'Отзыв', 'Отзыв из локального Bitrix');
INSERT INTO b_iblock_property (ID, IBLOCK_ID, NAME, CODE, ACTIVE)
VALUES
(1, 91, 'Связанный врач', 'MEDIC', 'Y'),
(2, 91, 'Текст отзыва', 'MESSAGE', 'Y'),
(3, 91, 'Код услуги', 'KOD', 'Y'),
(4, 91, 'Отзывы', 'LINK_REVIEWS', 'Y'),
(5, 91, 'Прайс', 'LINK_PRICE_1', 'Y');
INSERT INTO b_iblock_element_property (IBLOCK_PROPERTY_ID, IBLOCK_ELEMENT_ID, VALUE)
VALUES
(1, 2001, '1001'),
(2, 2001, 'Локальный отзыв из Bitrix'),
(3, 1001, '1001'),
(4, 1001, '2001'),
(5, 1001, '1001');
@@ -0,0 +1,2 @@
SELECT 'CREATE DATABASE sova_cabinet_test OWNER sova_test'
WHERE NOT EXISTS (SELECT FROM pg_database WHERE datname = 'sova_cabinet_test')\gexec
@@ -0,0 +1,412 @@
\connect sova_backend_test
DROP SCHEMA public CASCADE;
CREATE SCHEMA public;
GRANT ALL ON SCHEMA public TO sova_test;
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()
);
@@ -0,0 +1,220 @@
\connect sova_cabinet_test
DROP SCHEMA public CASCADE;
CREATE SCHEMA public;
GRANT ALL ON SCHEMA public TO sova_test;
CREATE TABLE users (
id INTEGER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
email VARCHAR(180),
roles JSONB NOT NULL DEFAULT '[]',
password VARCHAR(255),
uid INTEGER NOT NULL UNIQUE,
token VARCHAR(255),
full_name VARCHAR(255) NOT NULL,
phone VARCHAR(255),
confirm BOOLEAN NOT NULL DEFAULT true,
created_at TIMESTAMP DEFAULT now(),
last_activity_at TIMESTAMP DEFAULT now()
);
CREATE TABLE city (
id INTEGER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
name VARCHAR(255) NOT NULL,
region_id INTEGER NOT NULL,
time_zone INTEGER NOT NULL DEFAULT 4
);
CREATE TABLE filial (
id INTEGER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
fid INTEGER NOT NULL,
name VARCHAR(255) NOT NULL,
address VARCHAR(255) NOT NULL,
address_name VARCHAR(255),
site_id INTEGER,
city_id INTEGER REFERENCES city(id) ON DELETE SET NULL,
active BOOLEAN NOT NULL DEFAULT true,
company VARCHAR(255)
);
CREATE TABLE banner (
id INTEGER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
href VARCHAR(255) NOT NULL,
src VARCHAR(255) NOT NULL,
active BOOLEAN NOT NULL DEFAULT true,
city_id INTEGER UNIQUE REFERENCES city(id) ON DELETE CASCADE
);
CREATE TABLE review_source (
id INTEGER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
city_id INTEGER NOT NULL REFERENCES city(id) ON DELETE CASCADE,
name VARCHAR(255) NOT NULL,
count_row INTEGER NOT NULL DEFAULT 0,
active BOOLEAN NOT NULL DEFAULT true,
rating DOUBLE PRECISION NOT NULL DEFAULT 5,
filial_id INTEGER REFERENCES filial(id) ON DELETE SET NULL,
date_create DATE NOT NULL DEFAULT CURRENT_DATE
);
CREATE TABLE category_page (
id INTEGER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
name VARCHAR(255) NOT NULL,
active BOOLEAN NOT NULL DEFAULT true
);
CREATE TABLE page (
id INTEGER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
name VARCHAR(255) NOT NULL,
description TEXT NOT NULL,
active BOOLEAN NOT NULL DEFAULT true,
alias VARCHAR(255) NOT NULL,
category_id INTEGER NOT NULL REFERENCES category_page(id) ON DELETE CASCADE
);
CREATE TABLE department (
id INTEGER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
did INTEGER NOT NULL,
name VARCHAR(255) NOT NULL,
group_name VARCHAR(255) NOT NULL,
online_mode BOOLEAN NOT NULL DEFAULT true,
alias VARCHAR(255) NOT NULL,
active BOOLEAN NOT NULL DEFAULT true,
middle_name VARCHAR(255)
);
CREATE TABLE price_department (
id INTEGER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
name VARCHAR(255) NOT NULL,
group_id INTEGER NOT NULL,
group_name VARCHAR(255),
doct_count INTEGER DEFAULT 0,
view_in_web BOOLEAN DEFAULT true
);
CREATE TABLE price_list_view (
id INTEGER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
kodoper INTEGER,
schname VARCHAR(255),
specname VARCHAR(255),
speccode INTEGER,
price_info JSONB,
discpercent INTEGER,
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
);
CREATE TABLE price (
id INTEGER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
name VARCHAR(255),
value NUMERIC(10,2),
property_value_id INTEGER,
date_update TIMESTAMP DEFAULT now()
);
CREATE TABLE specialist_view (
id INTEGER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
name VARCHAR(255) NOT NULL,
kinder INTEGER,
speciality VARCHAR(255),
category VARCHAR(255),
experience VARCHAR(255),
description TEXT,
infoclinica BOOLEAN DEFAULT true,
alias VARCHAR(255) NOT NULL,
dcode INTEGER NOT NULL,
s_type INTEGER,
active BOOLEAN DEFAULT true,
region_id INTEGER,
kodoper JSONB,
updated TIMESTAMP DEFAULT now(),
accepts_dms BOOLEAN DEFAULT true,
degree VARCHAR(255)
);
CREATE TABLE location_view (
id INTEGER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
dcode INTEGER NOT NULL,
department INTEGER NOT NULL,
filial INTEGER NOT NULL,
specialist_id INTEGER NOT NULL,
online_mode BOOLEAN NOT NULL DEFAULT true,
active BOOLEAN NOT NULL DEFAULT true,
nearest_date DATE
);
CREATE TABLE remote_review (
id INTEGER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
external_id INTEGER,
specialist_id INTEGER,
active BOOLEAN DEFAULT true,
date_create DATE DEFAULT CURRENT_DATE,
message TEXT,
author VARCHAR(255),
rating DOUBLE PRECISION DEFAULT 5,
source VARCHAR(255)
);
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 REFERENCES widget_form(id) ON DELETE CASCADE,
sort INTEGER NOT NULL DEFAULT 100
);
CREATE TABLE usrlog (
id INTEGER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
pcode INTEGER,
agent TEXT,
client_ip VARCHAR(255),
method VARCHAR(255),
created_at TIMESTAMP DEFAULT now()
);
CREATE TABLE direct_company (
id INTEGER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
name VARCHAR(255),
company_id BIGINT,
city VARCHAR(255)
);
CREATE TABLE direct_report (
id INTEGER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
date DATE,
ad_group_id BIGINT,
campaign_id BIGINT,
ad_id BIGINT,
impressions INTEGER,
clicks INTEGER,
cost DOUBLE PRECISION,
conversions INTEGER
);
@@ -0,0 +1,99 @@
\connect sova_backend_test
INSERT INTO users (uid, email, roles, region_id, password, birth_date)
VALUES (100001, '8e6ec50bec697ce8e2663b4790264408', '["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', 'c2018e2ee0f7d39af2c8f696e7003424', '{"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$;
@@ -0,0 +1,78 @@
\connect sova_cabinet_test
INSERT INTO users (email, roles, password, uid, token, full_name, phone, confirm)
VALUES (
'6c6f63616c2e636162696e6574406578616d706c652e74657374',
'["ROLE_USER","ROLE_ADMIN"]',
'$2y$12$hqHoZsKN01W.IBcfZYRf.OygGbGIMM7RW0M8fZxo.DNjswjj07S2u',
200001,
'Yjd4N6Xlvfay4sNPfPf6PBeosTdmpfCl6+xg9a9V7BnHmfocaw6YSD4NF6Vrvqrm9+nwzNsm5KzpoFV23nG8Lw==',
'qpHB5XVk6VcuthTcmGV7zqBFN805ejONu+ciwz5nwC4AyEjJ0oH7Ci5ISfgpvwbn2NhLHyTA5tCnN2jd4qQogQ==',
'2I/vmVgNZC98ben0LPkqxmZX1oiAP/k+aXCn3+/dxTBCPBlN7VLR9uiSoWcOuxeBi2rAzfl9t1N1b/PJkJO6MQ==',
true
);
INSERT INTO city (name, region_id, time_zone)
VALUES
('Саратов Local', 91, 4),
('Волгоград Local', 92, 3),
('Воронеж Local', 93, 3),
('Краснодар Local', 94, 3);
INSERT INTO filial (fid, name, address, address_name, site_id, city_id, company)
VALUES
(1, 'Сова Саратов', 'Localhost, 1', 'Саратов', 1, 1, 'ООО Local Clinic'),
(2, 'Сова Волгоград', 'Localhost, 2', 'Волгоград', 2, 2, 'ООО Local Clinic'),
(3, 'Сова Воронеж', 'Localhost, 3', 'Воронеж', 3, 3, 'ООО Local Clinic'),
(4, 'Сова Краснодар', 'Localhost, 4', 'Краснодар', 4, 4, 'ООО Local Clinic');
INSERT INTO banner (href, src, city_id)
VALUES ('http://localhost:8082', '/banners/local.png', 1);
INSERT INTO review_source (city_id, name, count_row, rating, filial_id)
VALUES (1, 'Local Reviews', 1, 5, 1);
INSERT INTO category_page (name, active) VALUES ('Local категория', true);
INSERT INTO page (name, description, active, alias, category_id)
VALUES ('Local страница', 'Контент локальной страницы', true, 'local-page', 1);
INSERT INTO department (did, name, group_name, online_mode, alias, middle_name)
VALUES (10, 'Терапия', 'Взрослые специалисты', true, 'terapiya', 'терапевта');
INSERT INTO price_department (name, group_id, group_name, doct_count, view_in_web)
VALUES ('Консультации', 100, 'Врачи', 1, true);
INSERT INTO specialist_view (name, kinder, speciality, category, experience, description, alias, dcode, s_type, active, region_id, kodoper, accepts_dms, degree)
VALUES ('Иванов Иван Иванович', 0, 'Терапевт', 'Первая категория', '12', 'Локальный врач', 'ivanov-ivan', 101, 1, true, 91, '[1001]', true, 'к.м.н.');
INSERT INTO location_view (dcode, department, filial, specialist_id, online_mode, active, nearest_date)
VALUES (101, 10, 1, 1, true, true, CURRENT_DATE + interval '1 day');
INSERT INTO price_list_view (kodoper, schname, specname, speccode, price_info, discpercent, discprice, structname, fname, filial, group_id)
VALUES (1001, 'Прием терапевта', 'Иванов Иван Иванович', 101, '{"base":1500,"discount":1200}', 10, 1200, 'Терапия', 'Сова Local', 1, 100);
INSERT INTO remote_review (external_id, specialist_id, message, author, rating, source)
VALUES (1, 1, 'Тестовый отзыв для локальной базы', 'Пациент Local', 5, 'local');
INSERT INTO record (specialist_id, phone, hash, reserve)
VALUES (1, '+70000000000', 'c2018e2ee0f7d39af2c8f696e7003424', '{"local":true}');
INSERT INTO alert_sms (record_id, response)
VALUES (1, '{"status":"local-ok"}');
INSERT INTO widget_form (id, name) OVERRIDING SYSTEM VALUE VALUES
(1, 'Local форма'),
(2, 'Вызов врача на дом');
INSERT INTO widget_form_input (text, type, bitrix24_id, widget_form_id, sort) VALUES
('Телефон', 'phone', 'PHONE', 1, 10),
('ФИО пациента', 'text', 'NAME', 2, 10),
('Телефон', 'phone', 'PHONE', 2, 20),
('Адрес выезда', 'text', 'ADDRESS', 2, 30),
('Комментарий / симптомы', 'textarea', 'COMMENTS', 2, 40);
SELECT setval(pg_get_serial_sequence('widget_form', 'id'), (SELECT MAX(id) FROM widget_form));
SELECT setval(pg_get_serial_sequence('widget_form_input', 'id'), (SELECT MAX(id) FROM widget_form_input));
INSERT INTO usrlog (pcode, agent, client_ip, method)
VALUES (200001, 'local-agent', '127.0.0.1', 'seed');
+132
View File
@@ -0,0 +1,132 @@
apiVersion: v1
kind: ConfigMap
metadata:
name: postgres-schema-sql
namespace: {{ .Values.namespace }}
data:
{{- range $path, $_ := .Files.Glob "sql/postgres/schema/*.sql" }}
{{ base $path }}: |
{{ $.Files.Get $path | indent 4 }}
{{- end }}
---
apiVersion: v1
kind: ConfigMap
metadata:
name: postgres-seed-sql
namespace: {{ .Values.namespace }}
data:
{{- range $path, $_ := .Files.Glob "sql/postgres/seed/*.sql" }}
{{ base $path }}: |
{{ $.Files.Get $path | indent 4 }}
{{- end }}
---
apiVersion: v1
kind: ConfigMap
metadata:
name: mysql-schema-sql
namespace: {{ .Values.namespace }}
data:
{{- range $path, $_ := .Files.Glob "sql/mysql-bitrix/schema/*.sql" }}
{{ base $path }}: |
{{ $.Files.Get $path | indent 4 }}
{{- end }}
---
apiVersion: v1
kind: ConfigMap
metadata:
name: mysql-seed-sql
namespace: {{ .Values.namespace }}
data:
{{- range $path, $_ := .Files.Glob "sql/mysql-bitrix/seed/*.sql" }}
{{ base $path }}: |
{{ $.Files.Get $path | indent 4 }}
{{- end }}
---
apiVersion: batch/v1
kind: Job
metadata:
name: db-init
namespace: {{ .Values.namespace }}
spec:
backoffLimit: 2
template:
spec:
restartPolicy: OnFailure
initContainers:
- name: wait-pg
image: postgres:16-alpine
command:
- sh
- -c
- |
until pg_isready -h {{ .Values.postgres.host }} -p 5432 -U {{ .Values.postgres.user }}; do sleep 3; done
- name: wait-mysql
image: mysql:8.0
env:
- name: MYSQL_PWD
value: {{ .Values.mysql.password | quote }}
command:
- sh
- -c
- |
until mysqladmin ping -h {{ .Values.mysql.host }} -u{{ .Values.mysql.user }} --silent; do sleep 3; done
containers:
- name: init
image: postgres:16-alpine
env:
- name: PGPASSWORD
value: {{ .Values.postgres.password | quote }}
- name: MYSQL_PWD
value: {{ .Values.mysql.password | quote }}
command:
- sh
- -c
- |
set -e
echo "=== Phase 1: schema ==="
for f in $(ls /schema/postgres/*.sql 2>/dev/null | sort); do
[ -s "$f" ] || continue
echo "PG schema: $(basename $f)"
psql -h {{ .Values.postgres.host }} -U {{ .Values.postgres.user }} -d postgres -v ON_ERROR_STOP=1 -f "$f"
done
apk add --no-cache mysql-client >/dev/null
for f in $(ls /schema/mysql/*.sql 2>/dev/null | sort); do
[ -s "$f" ] || continue
echo "MySQL schema: $(basename $f)"
mysql -h {{ .Values.mysql.host }} -u{{ .Values.mysql.user }} {{ .Values.mysql.database }} < "$f"
done
echo "=== Phase 2: seed ==="
for f in $(ls /seed/postgres/*.sql 2>/dev/null | sort); do
[ -s "$f" ] || continue
echo "PG seed: $(basename $f)"
psql -h {{ .Values.postgres.host }} -U {{ .Values.postgres.user }} -d postgres -v ON_ERROR_STOP=1 -f "$f"
done
for f in $(ls /seed/mysql/*.sql 2>/dev/null | sort); do
[ -s "$f" ] || continue
echo "MySQL seed: $(basename $f)"
mysql -h {{ .Values.mysql.host }} -u{{ .Values.mysql.user }} {{ .Values.mysql.database }} < "$f"
done
echo "DB init complete"
volumeMounts:
- name: pg-schema
mountPath: /schema/postgres
- name: mysql-schema
mountPath: /schema/mysql
- name: pg-seed
mountPath: /seed/postgres
- name: mysql-seed
mountPath: /seed/mysql
volumes:
- name: pg-schema
configMap:
name: postgres-schema-sql
- name: mysql-schema
configMap:
name: mysql-schema-sql
- name: pg-seed
configMap:
name: postgres-seed-sql
- name: mysql-seed
configMap:
name: mysql-seed-sql
+4
View File
@@ -0,0 +1,4 @@
apiVersion: v1
kind: Namespace
metadata:
name: {{ .Values.namespace }}
+55
View File
@@ -0,0 +1,55 @@
namespace: sova-data-test
postgresql:
enabled: true
fullnameOverride: postgresql-test
auth:
username: sova_test
password: sova_test_pass
database: sova_backend_test
primary:
persistence:
enabled: true
size: 2Gi
resources:
requests:
memory: 256Mi
limits:
memory: 512Mi
initdb:
scripts:
01-create-databases.sql: |
CREATE DATABASE sova_cabinet_test;
GRANT ALL PRIVILEGES ON DATABASE sova_cabinet_test TO sova_test;
mysql:
enabled: true
fullnameOverride: mysql-bitrix-test
auth:
rootPassword: bitrix_root_test
username: bitrix_test
password: bitrix_test_pass
database: sova_bitrix_test
primary:
persistence:
enabled: true
size: 2Gi
resources:
requests:
memory: 256Mi
limits:
memory: 512Mi
redis:
enabled: true
fullnameOverride: redis-test
auth:
password: redis_test_pass
master:
persistence:
enabled: false
resources:
requests:
memory: 64Mi
limits:
memory: 128Mi