chore: initial import for test contour
This commit is contained in:
@@ -0,0 +1,6 @@
|
||||
apiVersion: v2
|
||||
name: adminpanel
|
||||
description: Sova admin panel SPA
|
||||
type: application
|
||||
version: 0.1.0
|
||||
appVersion: "1.0.0"
|
||||
@@ -0,0 +1,77 @@
|
||||
apiVersion: v1
|
||||
kind: ConfigMap
|
||||
metadata:
|
||||
name: adminpanel-env-js
|
||||
namespace: {{ .Values.namespace }}
|
||||
data:
|
||||
env.js: |
|
||||
window.__ENV__ = {
|
||||
API_BASE_URL: {{ .Values.runtimeEnv.API_BASE_URL | quote }}
|
||||
};
|
||||
---
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: adminpanel
|
||||
namespace: {{ .Values.namespace }}
|
||||
labels:
|
||||
app: adminpanel
|
||||
spec:
|
||||
replicas: {{ .Values.replicaCount }}
|
||||
selector:
|
||||
matchLabels:
|
||||
app: adminpanel
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: adminpanel
|
||||
spec:
|
||||
containers:
|
||||
- name: adminpanel
|
||||
image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
|
||||
imagePullPolicy: {{ .Values.image.pullPolicy }}
|
||||
ports:
|
||||
- containerPort: 80
|
||||
volumeMounts:
|
||||
- name: env-js
|
||||
mountPath: /config/env.js
|
||||
subPath: env.js
|
||||
resources:
|
||||
{{- toYaml .Values.resources | nindent 12 }}
|
||||
volumes:
|
||||
- name: env-js
|
||||
configMap:
|
||||
name: adminpanel-env-js
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: adminpanel
|
||||
namespace: {{ .Values.namespace }}
|
||||
spec:
|
||||
selector:
|
||||
app: adminpanel
|
||||
ports:
|
||||
- port: 80
|
||||
targetPort: 80
|
||||
---
|
||||
{{- if .Values.ingress.enabled }}
|
||||
apiVersion: networking.k8s.io/v1
|
||||
kind: Ingress
|
||||
metadata:
|
||||
name: adminpanel
|
||||
namespace: {{ .Values.namespace }}
|
||||
spec:
|
||||
ingressClassName: {{ .Values.ingress.className }}
|
||||
rules:
|
||||
- host: {{ .Values.ingress.host }}
|
||||
http:
|
||||
paths:
|
||||
- path: /
|
||||
pathType: Prefix
|
||||
backend:
|
||||
service:
|
||||
name: adminpanel
|
||||
port:
|
||||
number: 80
|
||||
{{- end }}
|
||||
@@ -0,0 +1,8 @@
|
||||
ingress:
|
||||
host: admin.stage.sova.local
|
||||
|
||||
runtimeEnv:
|
||||
API_BASE_URL: https://api.stage.sova.local
|
||||
|
||||
image:
|
||||
tag: adminpanel-v0.0.0-stage
|
||||
@@ -0,0 +1,8 @@
|
||||
ingress:
|
||||
host: admin.test.sova.local
|
||||
|
||||
runtimeEnv:
|
||||
API_BASE_URL: http://api.test.sova.local
|
||||
|
||||
image:
|
||||
tag: local-test
|
||||
@@ -0,0 +1,24 @@
|
||||
namespace: sova-test
|
||||
|
||||
image:
|
||||
repository: sova-adminpanel
|
||||
tag: local-test
|
||||
pullPolicy: IfNotPresent
|
||||
|
||||
replicaCount: 1
|
||||
|
||||
ingress:
|
||||
enabled: true
|
||||
className: nginx
|
||||
host: admin.test.sova.local
|
||||
|
||||
runtimeEnv:
|
||||
API_BASE_URL: http://api.test.sova.local
|
||||
|
||||
resources:
|
||||
requests:
|
||||
cpu: 50m
|
||||
memory: 64Mi
|
||||
limits:
|
||||
cpu: 200m
|
||||
memory: 128Mi
|
||||
@@ -0,0 +1,6 @@
|
||||
apiVersion: v2
|
||||
name: backend
|
||||
description: Sova Symfony backend
|
||||
type: application
|
||||
version: 0.1.0
|
||||
appVersion: "1.0.0"
|
||||
@@ -0,0 +1,52 @@
|
||||
-----BEGIN PRIVATE KEY-----
|
||||
MIIJQQIBADANBgkqhkiG9w0BAQEFAASCCSswggknAgEAAoICAQCkU4Upp//lZHH6
|
||||
P6AYzl5lT4p/R3lBVPKnCHyvPH/fq34740YUc8eoOLCT9Sr7+DNuIRJa5YLQUqo1
|
||||
BsmOYUI6I97mzAuIQQczuMbC+srXq9ivRbGvvteUuP4ZS/Tu3rd2hUFk4D0ytUdG
|
||||
emgwOs+CrzOcVtCfgwBohYYHwMmODjdP/VkrGHP2cJtjKcT4HzW/iSfR/YVMa4fD
|
||||
ujNPB2kOplAYbJZUkQ0wZfHbFYJ7bnn7eln/XEsxKDsWtvtOKbjKITW/FRjIl+W8
|
||||
rY9rfb2jtrZoKS7WlDhdz4MvzDz0CEaHQi5SugNH1yoJ27PP27IO1XorCr/Mp05c
|
||||
kK5d8QJaeGz+0OlLw5MHG6ep5YqbYdY8oTkSNJpfH/5ndp6B+pL2z0640sURKPLv
|
||||
Rslfs7HcizcRhuCvtirrzoitfLfyC3QciW7yglS21F9bMtoy/M/9ea7HrhjRFI2O
|
||||
hYX7CU6xAywEVqNtlWQ48gWR8AxgtV60e91FEgNC/YZWJvx2jd3+PEkX7+rqg21N
|
||||
Z/8B95Y2woOhedcB9jzx+Tcd/O8jKzk3rH6/vbVS8rrQxDRCXFwS5FB5Mz/FfWm6
|
||||
Vhife1FC/Umag+5YpM6lkR5i16AlStqfOdGIr2JXox9gYNk2kJmyJWCG/Rwdd8rZ
|
||||
06Z2XRTEH77j7yeMbmUadu3o5J3zbwIDAQABAoICAAlr5ncgdDoFO8myyy2Q63WY
|
||||
jWLFyMx3n9/2yxtK9zPuQ7MQUUzL5JcfBPS+ukOvE9fNGp3OieUC0FJw/K5moiLu
|
||||
OpH2AfVCcTTEc9TrByU9a5OFBe6DHR4gSyVNJxJo/5DSjBDKEIgvP5JpYz7cqFgg
|
||||
Tm+4xIZYvvW/LhOUuJml9ALojiu7364x/568XtgxBeZg6UEPbYyXn7WXn+h4jsvx
|
||||
uibkVuwrUtvDBI5gmdYU2/aQqcdL1d3QJi8jt53gI4GnTMsTXRPnLZtXQiFSGMTh
|
||||
rWyka9SOs/qg8q8TYS1GqjCIGVrR4m1Eh1sAVztkJ73U/IeqOpvzvbjt7KljL5TD
|
||||
tZFcgV4pVYUDMuz2/4wFY8//9ubx7lweizwmdF+XZ/favmUSwVwLYPA8ouY6Z9SA
|
||||
ZM9kCupe/evsJzd9xQ0Hkh47HAZJzhMPUscq3knMw524BAFMy4a+mcXIspiVsXmP
|
||||
Ngmf6yVPk6oinU3nF5Hab1sFqMAvcJVroE/wd/af7bTbA+jSMs8k2pLF89aERy8O
|
||||
iCvERF6KEEcbzKnTiTKpXTBqHgVVRqHAyu92rMtNh1wUWBOgmTs/YdNbvTCAOQRc
|
||||
PXekp86EEAF48oACllxIRteAM3RwGYT1uESlD7o31wLuGoXb04pLcoEIawq5554J
|
||||
QaZWMUyhTKvy9N2P6StdAoIBAQDf+MVPo02src4+GpPOB1Soc6PiHFbytn9Xr4+Y
|
||||
QaMM0EkSD5r0WGxQlF2GO2spP3olDzuRMyl8lKiY32dy9oAx5qRThFkTt63lHEjP
|
||||
aqNlqH6TAnFCPydjeeo/mfP+xNkw3eTFuiDalnZAqttYYcLV4vQ73jRqNzfV1Iqu
|
||||
FU1dii6yHbKwUo/v8ONUGjIkwJcRcGt3+gZ9eFfc8cd8Llsljho3CHAxEXmfP3dJ
|
||||
EgVXqal4DOdZLTd1BRZ5R0/8O7zjzgdh4GT/7+eMYGsJ8kFzp+RrVHwUgLuFOvJ8
|
||||
fy8OhST4ClEl7sNhhwAdlxpStuBsThwKdpSIT2hMEYRLmeQ1AoIBAQC70zpIksOe
|
||||
qr4dFkF2SAkawTzAadPC+fqh5HHDJKBDiFdemK/Ch5GvL40urZO07BJUn/bgbzDd
|
||||
JevcgMtWDw8WJQFOu4c4BCjTnLKwddFDu/yx5BSwZrljGa3Y9KBzfUF6phdB09tp
|
||||
5ouokdRfW8slM12HLI19z3Wpoy0m8t96opWLrzR1rop+qEgc6dsF6yoMw1d/Ylxb
|
||||
lijN5wC2kw1oo1RIbq761+YJnZoG63aIUFSpzyMGmvZd5EzSUoDlnn6NuZTT8kd0
|
||||
DZ0UpwLM8Eq+A/ktVDrLMEvgfcQWrLh45q5qubejpLVHxoahplxZyI03ziWvgZiC
|
||||
bGi20Dr8O2WTAoIBACQH0j4oiENiRo6JGgQH+9+JkvC6HGa5Yy0JCjG1RXS3QToN
|
||||
lqD+ZJZl99GzV17wXkb991g5gdAP3juRnQPKkf71GrRw0x+v6eK0tSXhAt5Ex/AA
|
||||
cZX1sPF42G1Y5/6xTjtlRvtkIQrpL6bhlZ3XRE/CTgYfjhEURwA4TAMLXEHTDAYN
|
||||
bwSck5lHCFssR6rP7L2adz960nZ22LOrlartji4xeRgnXF0YcZdjz13K718V5TRx
|
||||
5vnao1RI+D+UcFKkjZOcPmXJgpYF0xsrG60i8tKXTNDTa46k0wXw4LeUgk50rujU
|
||||
SA+xJG9ZF3SrLUnnL51cx3gLcYOoOqAaJU1AOY0CggEAKwyd5jZlSb+etXH9bQvT
|
||||
smMp9nwLAjxjeqmufWiupuvgApmCZ1bFSF7gwBseqLAW/3hukEBL9dQUPET01fO7
|
||||
pHq00wPeWTNy3BWlSxal8R1sLKW3LDtPMGyZUQm4oN/Lmz3oRLk3KA2kYu2RvI2A
|
||||
gTVFsY6/m19qe4gf+DZgjG4pUovEvVhU+/S8GoxrG+8rgyNesZ6sxn0jOxZALpiD
|
||||
0UDmN3fO+UV0vy11OTLMxy+KSCVmxMPNxfVmuioYywhJv1gSyYVVZT8dirdAyBIn
|
||||
P2gPu5j7pMicC4cn436RBXzx6xpIAeTle97/ypsjvZxe6bSBJLnSZ8pLMeOGMXu3
|
||||
qwKCAQBciBLuwfG7zLjMZ+yP02c9tIkBbKlAmDbxZa254Fc0g20z1VCEvoXbZzZN
|
||||
zobFHqh+/3MV6srOZ9b2mZ1Bsa27JFe1IomjWbaIYxDhowwkSL4sjyz6zeXJ25pc
|
||||
f3eInXcOO9x/CIt3jEKUk/D9pBt7xCzomL5QxSVZLcotx29mPxk/SOq/a2iSp26o
|
||||
+Wd3KHlxMA99QFQqIWwbLi/wAmi/z/mEBW5ga/dYhylIZuSAjVOiAjgJKyciIWN2
|
||||
bVJ3DHJncIjvfmcG7pgb74dF/qDfyTaoVjGgKARFQQ35RnFbtsmbKrXJodXu0P7D
|
||||
Qj4/0IvpjRaHVLVf2Nscjx/7Km6N
|
||||
-----END PRIVATE KEY-----
|
||||
@@ -0,0 +1,14 @@
|
||||
-----BEGIN PUBLIC KEY-----
|
||||
MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEApFOFKaf/5WRx+j+gGM5e
|
||||
ZU+Kf0d5QVTypwh8rzx/36t+O+NGFHPHqDiwk/Uq+/gzbiESWuWC0FKqNQbJjmFC
|
||||
OiPe5swLiEEHM7jGwvrK16vYr0Wxr77XlLj+GUv07t63doVBZOA9MrVHRnpoMDrP
|
||||
gq8znFbQn4MAaIWGB8DJjg43T/1ZKxhz9nCbYynE+B81v4kn0f2FTGuHw7ozTwdp
|
||||
DqZQGGyWVJENMGXx2xWCe255+3pZ/1xLMSg7Frb7Tim4yiE1vxUYyJflvK2Pa329
|
||||
o7a2aCku1pQ4Xc+DL8w89AhGh0IuUroDR9cqCduzz9uyDtV6Kwq/zKdOXJCuXfEC
|
||||
Wnhs/tDpS8OTBxunqeWKm2HWPKE5EjSaXx/+Z3aegfqS9s9OuNLFESjy70bJX7Ox
|
||||
3Is3EYbgr7Yq686IrXy38gt0HIlu8oJUttRfWzLaMvzP/Xmux64Y0RSNjoWF+wlO
|
||||
sQMsBFajbZVkOPIFkfAMYLVetHvdRRIDQv2GVib8do3d/jxJF+/q6oNtTWf/AfeW
|
||||
NsKDoXnXAfY88fk3HfzvIys5N6x+v721UvK60MQ0QlxcEuRQeTM/xX1pulYYn3tR
|
||||
Qv1JmoPuWKTOpZEeYtegJUranznRiK9iV6MfYGDZNpCZsiVghv0cHXfK2dOmdl0U
|
||||
xB++4+8njG5lGnbt6OSd828CAwEAAQ==
|
||||
-----END PUBLIC KEY-----
|
||||
@@ -0,0 +1,232 @@
|
||||
{{- if .Values.jwt.enabled }}
|
||||
apiVersion: v1
|
||||
kind: Secret
|
||||
metadata:
|
||||
name: backend-jwt
|
||||
namespace: {{ .Values.namespace }}
|
||||
type: Opaque
|
||||
data:
|
||||
private.pem: {{ .Files.Get "jwt/private.pem" | b64enc }}
|
||||
public.pem: {{ .Files.Get "jwt/public.pem" | b64enc }}
|
||||
---
|
||||
{{- end }}
|
||||
apiVersion: v1
|
||||
kind: Secret
|
||||
metadata:
|
||||
name: backend-env
|
||||
namespace: {{ .Values.namespace }}
|
||||
annotations:
|
||||
helm.sh/hook: pre-install,pre-upgrade
|
||||
helm.sh/hook-weight: "-10"
|
||||
helm.sh/hook-delete-policy: before-hook-creation
|
||||
type: Opaque
|
||||
stringData:
|
||||
{{- range $key, $val := .Values.secrets }}
|
||||
{{ $key }}: {{ $val | quote }}
|
||||
{{- end }}
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: ConfigMap
|
||||
metadata:
|
||||
name: backend-nginx-config
|
||||
namespace: {{ .Values.namespace }}
|
||||
data:
|
||||
default.conf: |
|
||||
server {
|
||||
listen 8080;
|
||||
server_name _;
|
||||
root /app/public;
|
||||
index index.php;
|
||||
client_max_body_size 108M;
|
||||
location / {
|
||||
try_files $uri /index.php$is_args$args;
|
||||
}
|
||||
location ~* \.(?:jpg|jpeg|gif|png|ico|css|js|svg|woff2)$ {
|
||||
expires 1y;
|
||||
add_header Cache-Control "public, immutable";
|
||||
access_log off;
|
||||
try_files $uri =404;
|
||||
}
|
||||
location ~ ^/index\.php(/|$) {
|
||||
fastcgi_pass 127.0.0.1:9000;
|
||||
fastcgi_split_path_info ^(.+\.php)(/.*)$;
|
||||
include fastcgi_params;
|
||||
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
|
||||
fastcgi_param DOCUMENT_ROOT $realpath_root;
|
||||
fastcgi_param HTTP_PROXY "";
|
||||
internal;
|
||||
}
|
||||
location ~ \.php$ {
|
||||
return 404;
|
||||
}
|
||||
}
|
||||
---
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: backend
|
||||
namespace: {{ .Values.namespace }}
|
||||
labels:
|
||||
app: backend
|
||||
env: test
|
||||
spec:
|
||||
replicas: {{ .Values.replicaCount }}
|
||||
selector:
|
||||
matchLabels:
|
||||
app: backend
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: backend
|
||||
env: test
|
||||
spec:
|
||||
containers:
|
||||
- name: php-fpm
|
||||
image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
|
||||
imagePullPolicy: {{ .Values.image.pullPolicy }}
|
||||
ports:
|
||||
- containerPort: 9000
|
||||
name: fpm
|
||||
envFrom:
|
||||
- secretRef:
|
||||
name: backend-env
|
||||
env:
|
||||
- name: JWT_SECRET_KEY
|
||||
value: /app/config/jwt/private.pem
|
||||
- name: JWT_PUBLIC_KEY
|
||||
value: /app/config/jwt/public.pem
|
||||
{{- range $key, $val := .Values.env }}
|
||||
- name: {{ $key }}
|
||||
value: {{ $val | quote }}
|
||||
{{- end }}
|
||||
volumeMounts:
|
||||
- name: app-public
|
||||
mountPath: /app/public
|
||||
- name: jwt-keys
|
||||
mountPath: /app/config/jwt
|
||||
readOnly: true
|
||||
resources:
|
||||
{{- toYaml .Values.resources.php | nindent 12 }}
|
||||
- name: nginx
|
||||
image: {{ .Values.nginx.image }}
|
||||
ports:
|
||||
- containerPort: 8080
|
||||
name: http
|
||||
volumeMounts:
|
||||
- name: app-public
|
||||
mountPath: /app/public
|
||||
readOnly: true
|
||||
- name: nginx-config
|
||||
mountPath: /etc/nginx/conf.d/default.conf
|
||||
subPath: default.conf
|
||||
resources:
|
||||
{{- toYaml .Values.resources.nginx | nindent 12 }}
|
||||
initContainers:
|
||||
- name: copy-public
|
||||
image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
|
||||
command: ["sh", "-c", "cp -a /app/public/. /public/"]
|
||||
volumeMounts:
|
||||
- name: app-public
|
||||
mountPath: /public
|
||||
volumes:
|
||||
- name: app-public
|
||||
emptyDir: {}
|
||||
- name: nginx-config
|
||||
configMap:
|
||||
name: backend-nginx-config
|
||||
- name: jwt-keys
|
||||
secret:
|
||||
secretName: backend-jwt
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: backend
|
||||
namespace: {{ .Values.namespace }}
|
||||
spec:
|
||||
selector:
|
||||
app: backend
|
||||
ports:
|
||||
- name: http
|
||||
port: 80
|
||||
targetPort: 8080
|
||||
---
|
||||
{{- if .Values.ingress.enabled }}
|
||||
apiVersion: networking.k8s.io/v1
|
||||
kind: Ingress
|
||||
metadata:
|
||||
name: backend
|
||||
namespace: {{ .Values.namespace }}
|
||||
spec:
|
||||
ingressClassName: {{ .Values.ingress.className }}
|
||||
rules:
|
||||
- host: {{ .Values.ingress.host }}
|
||||
http:
|
||||
paths:
|
||||
- path: /
|
||||
pathType: Prefix
|
||||
backend:
|
||||
service:
|
||||
name: backend
|
||||
port:
|
||||
number: 80
|
||||
{{- end }}
|
||||
---
|
||||
{{- if .Values.migrate.enabled }}
|
||||
apiVersion: batch/v1
|
||||
kind: Job
|
||||
metadata:
|
||||
name: backend-migrate
|
||||
namespace: {{ .Values.namespace }}
|
||||
annotations:
|
||||
helm.sh/hook: pre-install,pre-upgrade
|
||||
helm.sh/hook-weight: "0"
|
||||
helm.sh/hook-delete-policy: before-hook-creation
|
||||
spec:
|
||||
template:
|
||||
spec:
|
||||
restartPolicy: Never
|
||||
containers:
|
||||
- name: migrate
|
||||
image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
|
||||
command: ["php", "bin/console", "doctrine:migrations:migrate", "--no-interaction"]
|
||||
envFrom:
|
||||
- secretRef:
|
||||
name: backend-env
|
||||
env:
|
||||
{{- range $key, $val := .Values.env }}
|
||||
- name: {{ $key }}
|
||||
value: {{ $val | quote }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
---
|
||||
{{- if .Values.cronjobs.clearScheduleCache.enabled }}
|
||||
apiVersion: batch/v1
|
||||
kind: CronJob
|
||||
metadata:
|
||||
name: backend-clear-schedule-cache
|
||||
namespace: {{ .Values.namespace }}
|
||||
spec:
|
||||
schedule: {{ .Values.cronjobs.clearScheduleCache.schedule | quote }}
|
||||
concurrencyPolicy: Forbid
|
||||
successfulJobsHistoryLimit: 3
|
||||
failedJobsHistoryLimit: 3
|
||||
jobTemplate:
|
||||
spec:
|
||||
activeDeadlineSeconds: 3600
|
||||
template:
|
||||
spec:
|
||||
restartPolicy: OnFailure
|
||||
containers:
|
||||
- name: console
|
||||
image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
|
||||
command: {{ .Values.cronjobs.clearScheduleCache.command | toJson }}
|
||||
envFrom:
|
||||
- secretRef:
|
||||
name: backend-env
|
||||
env:
|
||||
{{- range $key, $val := .Values.env }}
|
||||
- name: {{ $key }}
|
||||
value: {{ $val | quote }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
@@ -0,0 +1,10 @@
|
||||
ingress:
|
||||
host: api.stage.sova.local
|
||||
|
||||
image:
|
||||
tag: backend-v0.0.0-stage
|
||||
|
||||
env:
|
||||
API_PUBLIC_URL: https://api.stage.sova.local
|
||||
API_BASE_URL: https://api.stage.sova.local
|
||||
INTEGRATIONS_STUB_MODE: "true"
|
||||
@@ -0,0 +1,9 @@
|
||||
ingress:
|
||||
host: api.test.sova.local
|
||||
|
||||
image:
|
||||
tag: local-test
|
||||
|
||||
env:
|
||||
API_PUBLIC_URL: http://api.test.sova.local
|
||||
API_BASE_URL: http://api.test.sova.local
|
||||
@@ -0,0 +1,79 @@
|
||||
namespace: sova-test
|
||||
|
||||
image:
|
||||
repository: sova-backend
|
||||
tag: local-test
|
||||
pullPolicy: IfNotPresent
|
||||
|
||||
nginx:
|
||||
image: nginx:1.27-alpine
|
||||
|
||||
replicaCount: 1
|
||||
|
||||
ingress:
|
||||
enabled: true
|
||||
className: nginx
|
||||
host: api.test.sova.local
|
||||
tls: false
|
||||
|
||||
resources:
|
||||
php:
|
||||
requests:
|
||||
cpu: 100m
|
||||
memory: 256Mi
|
||||
limits:
|
||||
cpu: 500m
|
||||
memory: 512Mi
|
||||
nginx:
|
||||
requests:
|
||||
cpu: 50m
|
||||
memory: 64Mi
|
||||
limits:
|
||||
cpu: 200m
|
||||
memory: 128Mi
|
||||
|
||||
env:
|
||||
APP_ENV: prod
|
||||
APP_DEBUG: "0"
|
||||
MIS_URL: http://mis-mock.sova-mocks.svc.cluster.local:8080
|
||||
WIDGET_API_URL: http://mis-mock.sova-mocks.svc.cluster.local:8080
|
||||
BITRIX_URL: http://mis-mock.sova-mocks.svc.cluster.local:8080
|
||||
SMARTCAPTCHA_URL: http://mis-mock.sova-mocks.svc.cluster.local:8080
|
||||
CT_URL: http://mis-mock.sova-mocks.svc.cluster.local:8080
|
||||
API_PUBLIC_URL: http://api.test.sova.local
|
||||
API_BASE_URL: http://api.test.sova.local
|
||||
INTEGRATIONS_STUB_MODE: "true"
|
||||
MAILER_DSN: smtp://mailpit.sova-mocks.svc.cluster.local:1025
|
||||
MESSENGER_TRANSPORT_DSN: doctrine://default?auto_setup=0
|
||||
CORS_ALLOW_ORIGIN: "['http://admin.test.sova.local','https://admin.test.sova.local']"
|
||||
|
||||
secrets:
|
||||
APP_SECRET: change-me-test-secret
|
||||
DATABASE_URL: postgresql://sova_test:sova_test_pass@postgresql-test.sova-data-test.svc.cluster.local:5432/sova_backend_test?serverVersion=16&charset=utf8
|
||||
DATABASE_CABINET_URL: postgresql://sova_test:sova_test_pass@postgresql-test.sova-data-test.svc.cluster.local:5432/sova_cabinet_test?serverVersion=16&charset=utf8
|
||||
DATABASE_BITRIX_URL: mysql://bitrix_test:bitrix_test_pass@mysql-bitrix-test.sova-data-test.svc.cluster.local:3306/sova_bitrix_test?serverVersion=8.0
|
||||
REDIS_URL: redis://:redis_test_pass@redis-test-master.sova-data-test.svc.cluster.local:6379/0
|
||||
JWT_PASSPHRASE: ""
|
||||
AES_SECRET_KEY: test-aes-secret-key-32bytes-min!!
|
||||
MAILER_ACCESS_TOKEN: test-mailer-token
|
||||
SMSRU_URL: http://noop.invalid
|
||||
SMSRU_TOKEN: noop
|
||||
SMSRU_SENDER: noop
|
||||
SMS4B_URL: http://noop.invalid
|
||||
SMS4B_TOKEN: noop
|
||||
SMS4B_SENDER: noop
|
||||
CT_PARAMS: "91:1:token"
|
||||
SMARTCAPTCHA_KEY: test-key
|
||||
API_CLIENT: sova-test-bot
|
||||
|
||||
migrate:
|
||||
enabled: false
|
||||
|
||||
jwt:
|
||||
enabled: true
|
||||
|
||||
cronjobs:
|
||||
clearScheduleCache:
|
||||
enabled: true
|
||||
schedule: "0 */6 * * *"
|
||||
command: ["php", "bin/console", "app:schedule:clear-cache"]
|
||||
@@ -0,0 +1,18 @@
|
||||
apiVersion: argoproj.io/v1alpha1
|
||||
kind: Application
|
||||
metadata:
|
||||
name: sova-root
|
||||
namespace: argocd
|
||||
spec:
|
||||
project: default
|
||||
source:
|
||||
repoURL: http://git.sova.local/sova/sova-deploy.git
|
||||
targetRevision: main
|
||||
path: argocd/apps
|
||||
destination:
|
||||
server: https://kubernetes.default.svc
|
||||
namespace: argocd
|
||||
syncPolicy:
|
||||
automated:
|
||||
prune: true
|
||||
selfHeal: true
|
||||
@@ -0,0 +1,94 @@
|
||||
apiVersion: argoproj.io/v1alpha1
|
||||
kind: Application
|
||||
metadata:
|
||||
name: data-test
|
||||
namespace: argocd
|
||||
spec:
|
||||
project: sova
|
||||
source:
|
||||
repoURL: http://git.sova.local/sova/sova-deploy.git
|
||||
targetRevision: main
|
||||
path: data/test
|
||||
helm:
|
||||
valueFiles:
|
||||
- values.yaml
|
||||
destination:
|
||||
server: https://kubernetes.default.svc
|
||||
namespace: sova-data-test
|
||||
syncPolicy:
|
||||
automated:
|
||||
prune: true
|
||||
selfHeal: true
|
||||
syncOptions:
|
||||
- CreateNamespace=true
|
||||
---
|
||||
apiVersion: argoproj.io/v1alpha1
|
||||
kind: Application
|
||||
metadata:
|
||||
name: mocks-test
|
||||
namespace: argocd
|
||||
spec:
|
||||
project: sova
|
||||
source:
|
||||
repoURL: http://git.sova.local/sova/sova-mocks.git
|
||||
targetRevision: main
|
||||
path: charts/mocks
|
||||
destination:
|
||||
server: https://kubernetes.default.svc
|
||||
namespace: sova-mocks
|
||||
syncPolicy:
|
||||
automated:
|
||||
prune: true
|
||||
selfHeal: true
|
||||
syncOptions:
|
||||
- CreateNamespace=true
|
||||
---
|
||||
apiVersion: argoproj.io/v1alpha1
|
||||
kind: Application
|
||||
metadata:
|
||||
name: backend-test
|
||||
namespace: argocd
|
||||
spec:
|
||||
project: sova
|
||||
source:
|
||||
repoURL: http://git.sova.local/sova/sova-deploy.git
|
||||
targetRevision: main
|
||||
path: apps/backend
|
||||
helm:
|
||||
valueFiles:
|
||||
- values.yaml
|
||||
- values-test.yaml
|
||||
destination:
|
||||
server: https://kubernetes.default.svc
|
||||
namespace: sova-test
|
||||
syncPolicy:
|
||||
automated:
|
||||
prune: true
|
||||
selfHeal: true
|
||||
syncOptions:
|
||||
- CreateNamespace=true
|
||||
---
|
||||
apiVersion: argoproj.io/v1alpha1
|
||||
kind: Application
|
||||
metadata:
|
||||
name: adminpanel-test
|
||||
namespace: argocd
|
||||
spec:
|
||||
project: sova
|
||||
source:
|
||||
repoURL: http://git.sova.local/sova/sova-deploy.git
|
||||
targetRevision: main
|
||||
path: apps/adminpanel
|
||||
helm:
|
||||
valueFiles:
|
||||
- values.yaml
|
||||
- values-test.yaml
|
||||
destination:
|
||||
server: https://kubernetes.default.svc
|
||||
namespace: sova-test
|
||||
syncPolicy:
|
||||
automated:
|
||||
prune: true
|
||||
selfHeal: true
|
||||
syncOptions:
|
||||
- CreateNamespace=true
|
||||
@@ -0,0 +1,19 @@
|
||||
apiVersion: argoproj.io/v1alpha1
|
||||
kind: AppProject
|
||||
metadata:
|
||||
name: sova
|
||||
namespace: argocd
|
||||
spec:
|
||||
description: Sova applications
|
||||
sourceRepos:
|
||||
- '*'
|
||||
destinations:
|
||||
- namespace: sova-test
|
||||
server: https://kubernetes.default.svc
|
||||
- namespace: sova-data-test
|
||||
server: https://kubernetes.default.svc
|
||||
- namespace: sova-mocks
|
||||
server: https://kubernetes.default.svc
|
||||
clusterResourceWhitelist:
|
||||
- group: '*'
|
||||
kind: '*'
|
||||
@@ -0,0 +1,5 @@
|
||||
apiVersion: v2
|
||||
name: db-init
|
||||
description: Schema then seed for test databases
|
||||
type: application
|
||||
version: 0.1.0
|
||||
Symlink
+1
@@ -0,0 +1 @@
|
||||
../test/sql
|
||||
@@ -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
|
||||
|
||||
@@ -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');
|
||||
@@ -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');
|
||||
@@ -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');
|
||||
@@ -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
|
||||
|
||||
@@ -0,0 +1,4 @@
|
||||
apiVersion: v1
|
||||
kind: Namespace
|
||||
metadata:
|
||||
name: {{ .Values.namespace }}
|
||||
@@ -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
|
||||
Reference in New Issue
Block a user