yourtar-cli 1.1.1 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/botTemplate/.env.dev-example +23 -0
- package/bin/botTemplate/.env.prod-example +23 -0
- package/bin/botTemplate/.env.stage-example +23 -0
- package/bin/botTemplate/Makefile +38 -0
- package/bin/botTemplate/Readme.md +32 -0
- package/bin/botTemplate/config/packages/nelmio_cors.yaml +24 -0
- package/bin/botTemplate/docker/config/nginx/default.conf +22 -0
- package/bin/botTemplate/docker/config/php/php-ini-overrides.ini +0 -0
- package/bin/botTemplate/docker/docker-compose.dev.yml +73 -0
- package/bin/botTemplate/docker/docker-compose.prod.yml +91 -0
- package/bin/botTemplate/docker/docker-compose.stage.yml +82 -0
- package/bin/botTemplate/docker/dockerfile/cron/Dockerfile +36 -0
- package/bin/botTemplate/docker/dockerfile/cron/entrypoint.sh +12 -0
- package/bin/botTemplate/docker/dockerfile/cron/scheduler +1 -0
- package/bin/botTemplate/docker/dockerfile/php/Dockerfile +27 -0
- package/bin/botTemplate/src/Controller/MessageController.php +39 -0
- package/bin/botTemplate/src/Entity/Chat.php +112 -0
- package/bin/botTemplate/src/Entity/DialogContext.php +83 -0
- package/bin/botTemplate/src/Entity/Order.php +51 -0
- package/bin/botTemplate/src/Kernel.php +11 -0
- package/bin/botTemplate/src/Repository/ChatRepository.php +99 -0
- package/bin/botTemplate/src/Repository/DialogContextRepository.php +68 -0
- package/bin/botTemplate/src/Repository/OrderRepository.php +43 -0
- package/bin/botTemplate/src/Service/MessageProcessService.php +201 -0
- package/bin/botTemplate/src/Service/TelegramService.php +227 -0
- package/bin/frontTemplate/Makefile +3 -0
- package/bin/frontTemplate/README.md +5 -0
- package/bin/index.js +24 -0
- package/package.json +1 -1
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
###> symfony/framework-bundle ###
|
|
2
|
+
APP_ENV=dev
|
|
3
|
+
APP_MODE=dev
|
|
4
|
+
APP_SECRET=004d1ffe63ec5a21138b820b78e4ffe5
|
|
5
|
+
###< symfony/framework-bundle ###
|
|
6
|
+
|
|
7
|
+
###> doctrine/doctrine-bundle ###
|
|
8
|
+
DATABASE_URL=mysql://root:password@mysql_{{name}}_back/test
|
|
9
|
+
DATABASE_USER=root
|
|
10
|
+
DATABASE_PASSWORD=password
|
|
11
|
+
DATABASE_NAME=test
|
|
12
|
+
DATABASE_HOST=mysql_{{name}}_back
|
|
13
|
+
###< doctrine/doctrine-bundle ###
|
|
14
|
+
|
|
15
|
+
###> nelmio/cors-bundle ###
|
|
16
|
+
CORS_ALLOW_ORIGIN=^https?://(localhost|127\.0\.0\.1)(:[0-9]+)?$
|
|
17
|
+
###< nelmio/cors-bundle ###
|
|
18
|
+
|
|
19
|
+
DEFAULT_URI="http://localhost:8000"
|
|
20
|
+
|
|
21
|
+
###> Bot ###
|
|
22
|
+
BOT_TOKEN=475749278:AAGxVLFFGiuymbuQYz-oHF_OoOIZhyxClA4
|
|
23
|
+
###< Bot ###
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
###> symfony/framework-bundle ###
|
|
2
|
+
APP_ENV=prod
|
|
3
|
+
APP_MODE=prod
|
|
4
|
+
APP_SECRET=004d1ffe63ec5a21138b820b78e4ffe5
|
|
5
|
+
###< symfony/framework-bundle ###
|
|
6
|
+
|
|
7
|
+
###> doctrine/doctrine-bundle ###
|
|
8
|
+
DATABASE_URL=mysql://root:QPrU5XuTdUUCMf6j4LvK@mysql_{{name}}_back/tusur
|
|
9
|
+
DATABASE_USER=root
|
|
10
|
+
DATABASE_PASSWORD=QPrU5XuTdUUCMf6j4LvK
|
|
11
|
+
DATABASE_NAME=tusur
|
|
12
|
+
DATABASE_HOST=mysql_{{name}}_back
|
|
13
|
+
###< doctrine/doctrine-bundle ###
|
|
14
|
+
|
|
15
|
+
###> nelmio/cors-bundle ###
|
|
16
|
+
CORS_ALLOW_ORIGIN=^https?://(localhost|127\.0\.0\.1)(:[0-9]+)?$
|
|
17
|
+
###< nelmio/cors-bundle ###
|
|
18
|
+
|
|
19
|
+
DEFAULT_URI="http://localhost:8000"
|
|
20
|
+
|
|
21
|
+
###> Bot ###
|
|
22
|
+
BOT_TOKEN=475749278:AAGxVLFFGiuymbuQYz-oHF_OoOIZhyxClA4
|
|
23
|
+
###< Bot ###
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
###> symfony/framework-bundle ###
|
|
2
|
+
APP_ENV=prod
|
|
3
|
+
APP_MODE=stage
|
|
4
|
+
APP_SECRET=004d1ffe63ec5a21138b820b78e4ffe5
|
|
5
|
+
###< symfony/framework-bundle ###
|
|
6
|
+
|
|
7
|
+
###> doctrine/doctrine-bundle ###
|
|
8
|
+
DATABASE_URL=mysql://root:password@mysql_{{name}}_back/test
|
|
9
|
+
DATABASE_USER=user
|
|
10
|
+
DATABASE_PASSWORD=password
|
|
11
|
+
DATABASE_NAME=test
|
|
12
|
+
DATABASE_HOST=mysql_{{name}}_back
|
|
13
|
+
###< doctrine/doctrine-bundle ###
|
|
14
|
+
|
|
15
|
+
###> nelmio/cors-bundle ###
|
|
16
|
+
CORS_ALLOW_ORIGIN=^https?://(localhost|127\.0\.0\.1)(:[0-9]+)?$
|
|
17
|
+
###< nelmio/cors-bundle ###
|
|
18
|
+
|
|
19
|
+
DEFAULT_URI="http://localhost:8000"
|
|
20
|
+
|
|
21
|
+
###> Bot ###
|
|
22
|
+
BOT_TOKEN=475749278:AAGxVLFFGiuymbuQYz-oHF_OoOIZhyxClA4
|
|
23
|
+
###< Bot ###
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
ENV ?= dev
|
|
2
|
+
include .env.${ENV}-example
|
|
3
|
+
-include .env
|
|
4
|
+
|
|
5
|
+
up:
|
|
6
|
+
ifeq (,$(wildcard ./.env))
|
|
7
|
+
cp .env.${ENV}-example .env
|
|
8
|
+
endif
|
|
9
|
+
ifeq (,$(wildcard .//docker/.env))
|
|
10
|
+
cp .env.${ENV}-example ./docker/.env
|
|
11
|
+
endif
|
|
12
|
+
cd docker && docker-compose --env-file ../.env -f docker-compose.${APP_MODE}.yml up -d --build
|
|
13
|
+
ifeq ("dev", "$(APP_ENV)")
|
|
14
|
+
cd docker && docker-compose -f docker-compose.${APP_MODE}.yml exec php_{{name}}_back composer install
|
|
15
|
+
else
|
|
16
|
+
cd docker && docker-compose -f docker-compose.${APP_MODE}.yml exec php_{{name}}_back composer install --no-dev
|
|
17
|
+
cd docker && docker-compose -f docker-compose.${APP_MODE}.yml exec php_{{name}}_back composer dump-autoload --no-dev --classmap-authoritative
|
|
18
|
+
endif
|
|
19
|
+
cd docker && docker-compose -f docker-compose.${APP_MODE}.yml exec php_{{name}}_back bin/console doctrine:database:create --if-not-exists
|
|
20
|
+
cd docker && docker-compose -f docker-compose.${APP_MODE}.yml exec php_{{name}}_back bin/console doctrine:migrations:migrate --no-interaction --allow-no-migration
|
|
21
|
+
|
|
22
|
+
down:
|
|
23
|
+
cd docker && docker-compose -f docker-compose.${APP_MODE}.yml down
|
|
24
|
+
|
|
25
|
+
shell:
|
|
26
|
+
cd docker && docker-compose -f docker-compose.${APP_MODE}.yml run php_{{name}}_back bash
|
|
27
|
+
|
|
28
|
+
database:
|
|
29
|
+
cd docker && docker-compose -f docker-compose.${APP_MODE}.yml exec mysql_{{name}}_back mysql -uroot -p$(DATABASE_PASSWORD)
|
|
30
|
+
|
|
31
|
+
commands:
|
|
32
|
+
curl -X POST -H "Content-Type: application/json" -d "{\"commands\":[{\"command\":\"help\",\"description\":\"Помощь\"}]}" https://api.telegram.org/bot$(BOT_TOKEN)/setMyCommands
|
|
33
|
+
|
|
34
|
+
webhook:
|
|
35
|
+
curl https://api.telegram.org:443/bot$(BOT_TOKEN)/setWebhook?url=$(domain)/api/message/
|
|
36
|
+
|
|
37
|
+
webhook-delete:
|
|
38
|
+
curl https://api.telegram.org:443/bot$(BOT_TOKEN)/deleteWebhook
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# {{name}} - серверная часть проекта
|
|
2
|
+
|
|
3
|
+
Данное ПО предназначено для ...
|
|
4
|
+
Запускается данный продукт с помощью Makefile на операционных системах MacOS и Linux. В проекте активно используется Docker и Docker Compose. Прочие технологии запускаются за счет них.
|
|
5
|
+
В качестве прочих технологий используются фреймворк Symfony на основе PHP, база данных на основе MySQL.
|
|
6
|
+
|
|
7
|
+
Для запуска проекта в режиме разработки необходимо использовать следующую команду:
|
|
8
|
+
```
|
|
9
|
+
make up
|
|
10
|
+
```
|
|
11
|
+
Для запуска проекта в режиме тестового сервера или продакшн необходимо добавить переменную ENV со значениями stage и prod соответственно (только для первого запуска):
|
|
12
|
+
```
|
|
13
|
+
# test mode on server
|
|
14
|
+
make up ENV=stage
|
|
15
|
+
# production mode on server
|
|
16
|
+
make up ENV=prod
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
Чтобы остановить работу проекта, используйте команду:
|
|
20
|
+
```
|
|
21
|
+
make down
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
Чтобы устанавливать новые зависимости и производить прочие операции с проектом, используйте команду для входа в контейнер с кодом:
|
|
25
|
+
```
|
|
26
|
+
make shell
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
Чтобы посмотреть хранящиеся данные и сделать пару запросов, необходимо войти в базу данных, используя команду:
|
|
30
|
+
```
|
|
31
|
+
make database
|
|
32
|
+
```
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
nelmio_cors:
|
|
2
|
+
defaults:
|
|
3
|
+
allow_credentials: false
|
|
4
|
+
allow_origin: []
|
|
5
|
+
allow_headers: []
|
|
6
|
+
allow_methods: []
|
|
7
|
+
expose_headers: []
|
|
8
|
+
max_age: 0
|
|
9
|
+
hosts: []
|
|
10
|
+
origin_regex: false
|
|
11
|
+
forced_allow_origin_value: ~
|
|
12
|
+
paths:
|
|
13
|
+
'^/api/':
|
|
14
|
+
allow_origin: ['*']
|
|
15
|
+
allow_headers: ['YT-AUTH-TOKEN', "Content-type"]
|
|
16
|
+
allow_methods: ['POST', 'OPTION', 'PUT', 'PATCH', 'GET', 'DELETE']
|
|
17
|
+
max_age: 3600
|
|
18
|
+
'^/':
|
|
19
|
+
origin_regex: true
|
|
20
|
+
allow_origin: ['^http://localhost:[0-9]+']
|
|
21
|
+
allow_headers: ['YT-AUTH-TOKEN', "Content-type"]
|
|
22
|
+
allow_methods: ['POST', 'OPTION', 'PUT', 'PATCH', 'GET', 'DELETE']
|
|
23
|
+
max_age: 3600
|
|
24
|
+
hosts: ['^api\.']
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
server {
|
|
2
|
+
server_name ~.*;
|
|
3
|
+
|
|
4
|
+
location / {
|
|
5
|
+
root /var/www/html/public;
|
|
6
|
+
|
|
7
|
+
try_files $uri /index.php$is_args$args;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
location ~ ^/index\.php(/|$) {
|
|
11
|
+
client_max_body_size 50m;
|
|
12
|
+
|
|
13
|
+
fastcgi_pass php_{{name}}_back:9000;
|
|
14
|
+
fastcgi_buffers 16 16k;
|
|
15
|
+
fastcgi_buffer_size 32k;
|
|
16
|
+
include fastcgi_params;
|
|
17
|
+
fastcgi_param SCRIPT_FILENAME //var/www/html/public/index.php;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
error_log /dev/stderr debug;
|
|
21
|
+
access_log /dev/stdout;
|
|
22
|
+
}
|
|
File without changes
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
version: '3.7'
|
|
2
|
+
|
|
3
|
+
services:
|
|
4
|
+
php_{{name}}_back:
|
|
5
|
+
container_name: php_{{name}}_back
|
|
6
|
+
platform: linux/arm64
|
|
7
|
+
build: dockerfile/php
|
|
8
|
+
restart: on-failure
|
|
9
|
+
expose:
|
|
10
|
+
- "9000"
|
|
11
|
+
volumes:
|
|
12
|
+
- ../:/var/www/html/
|
|
13
|
+
- ../vendor:/var/www/html/vendor
|
|
14
|
+
depends_on:
|
|
15
|
+
mysql_{{name}}_back:
|
|
16
|
+
condition: service_healthy
|
|
17
|
+
|
|
18
|
+
nginx_{{name}}_back:
|
|
19
|
+
container_name: nginx_{{name}}_back
|
|
20
|
+
platform: linux/arm64
|
|
21
|
+
image: nginx:latest
|
|
22
|
+
restart: on-failure
|
|
23
|
+
ports:
|
|
24
|
+
- "8000:80"
|
|
25
|
+
volumes:
|
|
26
|
+
- ../:/var/www/html/
|
|
27
|
+
- ./logs/nginx:/var/log/nginx
|
|
28
|
+
- ./config/nginx:/etc/nginx/conf.d
|
|
29
|
+
links:
|
|
30
|
+
- php_{{name}}_back
|
|
31
|
+
|
|
32
|
+
mysql_{{name}}_back:
|
|
33
|
+
container_name: mysql_{{name}}_back
|
|
34
|
+
platform: linux/arm64
|
|
35
|
+
image: mysql:latest
|
|
36
|
+
restart: on-failure
|
|
37
|
+
expose:
|
|
38
|
+
- "3306"
|
|
39
|
+
environment:
|
|
40
|
+
MYSQL_ROOT_PASSWORD: ${DATABASE_PASSWORD}
|
|
41
|
+
healthcheck:
|
|
42
|
+
test: [ "CMD", "mysqladmin" ,"ping", "-h", "localhost" ]
|
|
43
|
+
timeout: 20s
|
|
44
|
+
retries: 10
|
|
45
|
+
volumes:
|
|
46
|
+
- ./db:/var/lib/mysql
|
|
47
|
+
|
|
48
|
+
# cron_{{name}}_back:
|
|
49
|
+
# container_name: cron_{{name}}_back
|
|
50
|
+
# platform: linux/arm64
|
|
51
|
+
# build: dockerfile/cron
|
|
52
|
+
# depends_on:
|
|
53
|
+
# - php_{{name}}_back
|
|
54
|
+
# volumes:
|
|
55
|
+
# - ../:/var/www/html/
|
|
56
|
+
# - ../vendor:/var/www/html/vendor
|
|
57
|
+
# - ../var:/var/www/html/var:rw
|
|
58
|
+
# restart: on-failure
|
|
59
|
+
# links:
|
|
60
|
+
# - mysql_{{name}}_back
|
|
61
|
+
|
|
62
|
+
# message_consumer_{{name}}_back:
|
|
63
|
+
# container_name: message_consumer_{{name}}_back
|
|
64
|
+
# platform: linux/arm64
|
|
65
|
+
# build: dockerfile/php
|
|
66
|
+
# depends_on:
|
|
67
|
+
# - php_{{name}}_back
|
|
68
|
+
# volumes:
|
|
69
|
+
# - ../:/var/www/html/
|
|
70
|
+
# - ../vendor:/var/www/html/vendor
|
|
71
|
+
# - ../var:/var/www/html/var:rw
|
|
72
|
+
# restart: unless-stopped
|
|
73
|
+
# command: [ "php", "bin/console", "messenger:consume", "async", "-vv", "--memory-limit=128M", "--limit=30", "--queues=messages_tusur"]
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
version: '3.7'
|
|
2
|
+
|
|
3
|
+
services:
|
|
4
|
+
php_{{name}}_back:
|
|
5
|
+
container_name: php_{{name}}_back
|
|
6
|
+
build: dockerfile/php
|
|
7
|
+
restart: on-failure
|
|
8
|
+
networks:
|
|
9
|
+
- yourtar
|
|
10
|
+
- {{name}}
|
|
11
|
+
expose:
|
|
12
|
+
- "9000"
|
|
13
|
+
volumes:
|
|
14
|
+
- ../:/var/www/html/
|
|
15
|
+
- ../vendor:/var/www/html/vendor
|
|
16
|
+
- ./config/php/php-ini-overrides.ini:/usr/local/etc/php/conf.d/php-ini-overrides.ini
|
|
17
|
+
depends_on:
|
|
18
|
+
mysql_{{name}}_back:
|
|
19
|
+
condition: service_healthy
|
|
20
|
+
|
|
21
|
+
nginx_{{name}}_back:
|
|
22
|
+
container_name: nginx_{{name}}_back
|
|
23
|
+
image: nginx:latest
|
|
24
|
+
restart: on-failure
|
|
25
|
+
networks:
|
|
26
|
+
- yourtar
|
|
27
|
+
- {{name}}
|
|
28
|
+
expose:
|
|
29
|
+
- "80"
|
|
30
|
+
volumes:
|
|
31
|
+
- ../:/var/www/html/
|
|
32
|
+
- /var/www/html/var
|
|
33
|
+
- ./logs/nginx:/var/log/nginx
|
|
34
|
+
- ./config/nginx:/etc/nginx/conf.d
|
|
35
|
+
links:
|
|
36
|
+
- php_{{name}}_back
|
|
37
|
+
|
|
38
|
+
mysql_{{name}}_back:
|
|
39
|
+
container_name: mysql_{{name}}_back
|
|
40
|
+
image: mysql:latest
|
|
41
|
+
restart: on-failure
|
|
42
|
+
networks:
|
|
43
|
+
- yourtar
|
|
44
|
+
- {{name}}
|
|
45
|
+
expose:
|
|
46
|
+
- "3306"
|
|
47
|
+
environment:
|
|
48
|
+
MYSQL_ROOT_PASSWORD: ${DATABASE_PASSWORD}
|
|
49
|
+
healthcheck:
|
|
50
|
+
test: [ "CMD", "mysqladmin" ,"ping", "-h", "localhost" ]
|
|
51
|
+
timeout: 20s
|
|
52
|
+
retries: 10
|
|
53
|
+
volumes:
|
|
54
|
+
- ./db:/var/lib/mysql
|
|
55
|
+
|
|
56
|
+
# message_consumer_{{name}}_back:
|
|
57
|
+
# container_name: message_consumer_{{name}}_back
|
|
58
|
+
# build: dockerfile/php
|
|
59
|
+
# depends_on:
|
|
60
|
+
# - php_{{name}}_back
|
|
61
|
+
# volumes:
|
|
62
|
+
# - ../:/var/www/html/
|
|
63
|
+
# - /var/www/html/var
|
|
64
|
+
# - ../vendor:/var/www/html/vendor
|
|
65
|
+
# restart: unless-stopped
|
|
66
|
+
# command: [ "php", "bin/console", "messenger:consume", "async", "-vv", "--memory-limit=128M", "--limit=30", "--queues=messages_tusur"]
|
|
67
|
+
# networks:
|
|
68
|
+
# - yourtar
|
|
69
|
+
# - {{name}}
|
|
70
|
+
|
|
71
|
+
# cron_{{name}}_back:
|
|
72
|
+
# container_name: cron_{{name}}_back
|
|
73
|
+
# build: dockerfile/cron
|
|
74
|
+
# depends_on:
|
|
75
|
+
# - php_{{name}}_back
|
|
76
|
+
# volumes:
|
|
77
|
+
# - ../:/var/www/html/:cached
|
|
78
|
+
# - /var/www/html/var
|
|
79
|
+
# - ../vendor:/var/www/html/vendor
|
|
80
|
+
# networks:
|
|
81
|
+
# - yourtar
|
|
82
|
+
# - {{name}}
|
|
83
|
+
# restart: on-failure
|
|
84
|
+
|
|
85
|
+
networks:
|
|
86
|
+
yourtar:
|
|
87
|
+
external:
|
|
88
|
+
name: yourtar
|
|
89
|
+
{{name}}:
|
|
90
|
+
external:
|
|
91
|
+
name: {{name}}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
version: '3.7'
|
|
2
|
+
|
|
3
|
+
services:
|
|
4
|
+
php_{{name}}_back:
|
|
5
|
+
container_name: php_{{name}}_back
|
|
6
|
+
build: dockerfile/php
|
|
7
|
+
restart: on-failure
|
|
8
|
+
networks:
|
|
9
|
+
- demo
|
|
10
|
+
expose:
|
|
11
|
+
- "9000"
|
|
12
|
+
volumes:
|
|
13
|
+
- ../:/var/www/html/
|
|
14
|
+
- ../vendor:/var/www/html/vendor
|
|
15
|
+
- ./config/php/php-ini-overrides.ini:/usr/local/etc/php/php.ini
|
|
16
|
+
depends_on:
|
|
17
|
+
mysql_{{name}}_back:
|
|
18
|
+
condition: service_healthy
|
|
19
|
+
|
|
20
|
+
nginx_{{name}}_back:
|
|
21
|
+
container_name: nginx_{{name}}_back
|
|
22
|
+
image: nginx:latest
|
|
23
|
+
restart: on-failure
|
|
24
|
+
networks:
|
|
25
|
+
- demo
|
|
26
|
+
expose:
|
|
27
|
+
- "80"
|
|
28
|
+
volumes:
|
|
29
|
+
- ../:/var/www/html/
|
|
30
|
+
- /var/www/html/var
|
|
31
|
+
- ./logs/nginx:/var/log/nginx
|
|
32
|
+
- ./config/nginx:/etc/nginx/conf.d
|
|
33
|
+
links:
|
|
34
|
+
- php_{{name}}_back
|
|
35
|
+
|
|
36
|
+
mysql_{{name}}_back:
|
|
37
|
+
container_name: mysql_{{name}}_back
|
|
38
|
+
image: mysql:5.7
|
|
39
|
+
restart: on-failure
|
|
40
|
+
networks:
|
|
41
|
+
- demo
|
|
42
|
+
expose:
|
|
43
|
+
- "3306"
|
|
44
|
+
environment:
|
|
45
|
+
- MYSQL_ROOT_PASSWORD=${DATABASE_PASSWORD}
|
|
46
|
+
healthcheck:
|
|
47
|
+
test: [ "CMD", "mysqladmin" ,"ping", "-h", "localhost" ]
|
|
48
|
+
timeout: 20s
|
|
49
|
+
retries: 10
|
|
50
|
+
volumes:
|
|
51
|
+
- ./db:/var/lib/mysql
|
|
52
|
+
|
|
53
|
+
# cron_{{name}}_back:
|
|
54
|
+
# container_name: cron_{{name}}_back
|
|
55
|
+
# build: dockerfile/cron
|
|
56
|
+
# depends_on:
|
|
57
|
+
# - php_{{name}}_back
|
|
58
|
+
# volumes:
|
|
59
|
+
# - ../:/var/www/html/:cached
|
|
60
|
+
# - /var/www/html/var
|
|
61
|
+
# - ../vendor:/var/www/html/vendor
|
|
62
|
+
# networks:
|
|
63
|
+
# - demo
|
|
64
|
+
# restart: on-failure
|
|
65
|
+
|
|
66
|
+
# message_consumer_{{name}}_back:
|
|
67
|
+
# container_name: message_consumer_{{name}}_back
|
|
68
|
+
# build: dockerfile/php
|
|
69
|
+
# depends_on:
|
|
70
|
+
# - php_{{name}}_back
|
|
71
|
+
# volumes:
|
|
72
|
+
# - ../:/var/www/html/
|
|
73
|
+
# - ../vendor:/var/www/html/vendor
|
|
74
|
+
# - /var/www/html/var
|
|
75
|
+
# restart: unless-stopped
|
|
76
|
+
# command: [ "php", "bin/console", "messenger:consume", "async", "-vv", "--memory-limit=128M", "--limit=30", "--queues=messages_tusur"]
|
|
77
|
+
# networks:
|
|
78
|
+
# - demo
|
|
79
|
+
|
|
80
|
+
networks:
|
|
81
|
+
demo:
|
|
82
|
+
external: true
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
FROM php:8.2-fpm
|
|
2
|
+
|
|
3
|
+
RUN apt-get update && apt-get install -y \
|
|
4
|
+
zlib1g-dev libicu-dev librabbitmq-dev libzip-dev libonig-dev librabbitmq-dev g++ \
|
|
5
|
+
git \
|
|
6
|
+
mariadb-client \
|
|
7
|
+
vim \
|
|
8
|
+
curl \
|
|
9
|
+
zip \
|
|
10
|
+
cron \
|
|
11
|
+
&& docker-php-ext-configure zip \
|
|
12
|
+
&& docker-php-ext-install zip \
|
|
13
|
+
&& docker-php-ext-install sysvsem \
|
|
14
|
+
&& docker-php-ext-install -j$(nproc) mbstring \
|
|
15
|
+
&& docker-php-ext-install -j$(nproc) pdo \
|
|
16
|
+
&& docker-php-ext-configure intl \
|
|
17
|
+
&& docker-php-ext-install -j$(nproc) intl \
|
|
18
|
+
&& docker-php-ext-install -j$(nproc) pdo_mysql \
|
|
19
|
+
&& docker-php-ext-install -j$(nproc) mysqli \
|
|
20
|
+
&& docker-php-ext-configure opcache --enable-opcache \
|
|
21
|
+
&& docker-php-ext-install opcache \
|
|
22
|
+
&& pecl install amqp \
|
|
23
|
+
&& docker-php-ext-enable amqp
|
|
24
|
+
|
|
25
|
+
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
|
|
26
|
+
|
|
27
|
+
COPY ./entrypoint.sh /usr/sbin/start-cron
|
|
28
|
+
COPY ./scheduler /etc/cron.d/scheduler
|
|
29
|
+
|
|
30
|
+
RUN chmod 0644 /etc/cron.d/scheduler \
|
|
31
|
+
&& crontab /etc/cron.d/scheduler
|
|
32
|
+
|
|
33
|
+
RUN chmod 0755 /usr/sbin/start-cron \
|
|
34
|
+
&& mkfifo --mode 0666 /var/log/cron.log
|
|
35
|
+
|
|
36
|
+
ENTRYPOINT ["sh", "/usr/sbin/start-cron"]
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
service cron start
|
|
2
|
+
|
|
3
|
+
# trap SIGINT and SIGTERM signals and gracefully exit
|
|
4
|
+
trap "service cron stop; kill \$!; exit" INT TERM
|
|
5
|
+
|
|
6
|
+
# start "daemon"
|
|
7
|
+
while true
|
|
8
|
+
do
|
|
9
|
+
# watch /var/log/cron.log restarting if necessary
|
|
10
|
+
cat /var/log/cron.log & wait $!
|
|
11
|
+
done
|
|
12
|
+
#while true; do sleep 1000; done
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
* * * * * /usr/local/bin/php /var/www/html/bin/console app:test >> /var/log/cron.log 2>&1
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
FROM php:8.2-fpm
|
|
2
|
+
|
|
3
|
+
RUN apt-get update && apt-get install -y \
|
|
4
|
+
zlib1g-dev libicu-dev libzip-dev libonig-dev librabbitmq-dev g++ \
|
|
5
|
+
git \
|
|
6
|
+
mariadb-client \
|
|
7
|
+
vim \
|
|
8
|
+
curl \
|
|
9
|
+
openssl \
|
|
10
|
+
zip \
|
|
11
|
+
&& docker-php-ext-configure zip \
|
|
12
|
+
&& docker-php-ext-install zip \
|
|
13
|
+
&& docker-php-ext-install sysvsem \
|
|
14
|
+
&& docker-php-ext-install -j$(nproc) mbstring \
|
|
15
|
+
&& docker-php-ext-install -j$(nproc) pdo \
|
|
16
|
+
&& docker-php-ext-configure intl \
|
|
17
|
+
&& docker-php-ext-install -j$(nproc) intl \
|
|
18
|
+
&& docker-php-ext-install -j$(nproc) pdo pdo_mysql \
|
|
19
|
+
&& docker-php-ext-install -j$(nproc) mysqli \
|
|
20
|
+
&& docker-php-ext-configure opcache --enable-opcache \
|
|
21
|
+
&& docker-php-ext-install opcache \
|
|
22
|
+
&& pecl install amqp \
|
|
23
|
+
&& docker-php-ext-enable amqp
|
|
24
|
+
|
|
25
|
+
RUN usermod -u 1000 www-data
|
|
26
|
+
|
|
27
|
+
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
<?php
|
|
2
|
+
|
|
3
|
+
namespace App\Controller;
|
|
4
|
+
|
|
5
|
+
use App\Entity\Chat;
|
|
6
|
+
use App\Entity\Lead;
|
|
7
|
+
use App\Entity\Token;
|
|
8
|
+
use App\Repository\ChatRepository;
|
|
9
|
+
use App\Repository\PaymentRepository;
|
|
10
|
+
use App\Repository\TokenRepository;
|
|
11
|
+
use App\Service\MessageProcessService;
|
|
12
|
+
use App\Service\TelegramService;
|
|
13
|
+
use Psr\Log\LoggerInterface;
|
|
14
|
+
use Doctrine\ORM\EntityManagerInterface;
|
|
15
|
+
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
|
|
16
|
+
use Symfony\Component\HttpFoundation\JsonResponse;
|
|
17
|
+
use Symfony\Component\HttpFoundation\Request;
|
|
18
|
+
use Symfony\Component\Routing\Attribute\Route;
|
|
19
|
+
|
|
20
|
+
#[Route('/api/message')]
|
|
21
|
+
final class MessageController extends AbstractController
|
|
22
|
+
{
|
|
23
|
+
private ?MessageProcessService $messageService = null;
|
|
24
|
+
|
|
25
|
+
public function __construct(MessageProcessService $messageService)
|
|
26
|
+
{
|
|
27
|
+
$this->messageService = $messageService;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
#[Route('/', name: 'app_message_webhook')]
|
|
31
|
+
public function index(Request $request): JsonResponse
|
|
32
|
+
{
|
|
33
|
+
$value = json_decode($request->getContent(), true);
|
|
34
|
+
|
|
35
|
+
$this->messageService->processMessage($value);
|
|
36
|
+
|
|
37
|
+
return $this->json(['message' => 'OK',]);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
<?php
|
|
2
|
+
|
|
3
|
+
namespace App\Entity;
|
|
4
|
+
|
|
5
|
+
use App\Repository\ChatRepository;
|
|
6
|
+
use Doctrine\DBAL\Types\Types;
|
|
7
|
+
use Doctrine\ORM\Mapping as ORM;
|
|
8
|
+
|
|
9
|
+
#[ORM\Entity(repositoryClass: ChatRepository::class)]
|
|
10
|
+
class Chat
|
|
11
|
+
{
|
|
12
|
+
|
|
13
|
+
public const ROLE_ADMIN = 'admin';
|
|
14
|
+
|
|
15
|
+
#[ORM\Id]
|
|
16
|
+
#[ORM\GeneratedValue]
|
|
17
|
+
#[ORM\Column]
|
|
18
|
+
private ?int $id = null;
|
|
19
|
+
|
|
20
|
+
#[ORM\Column(length: 255)]
|
|
21
|
+
private ?string $chatId = null;
|
|
22
|
+
|
|
23
|
+
#[ORM\Column(length: 255)]
|
|
24
|
+
private ?string $userId = null;
|
|
25
|
+
|
|
26
|
+
#[ORM\Column(length: 255, nullable: true)]
|
|
27
|
+
private ?string $role = null;
|
|
28
|
+
|
|
29
|
+
#[ORM\Column(length: 255, nullable: true)]
|
|
30
|
+
private ?string $username = null;
|
|
31
|
+
|
|
32
|
+
#[ORM\Column(length: 255, nullable: true)]
|
|
33
|
+
private ?string $phone = null;
|
|
34
|
+
|
|
35
|
+
public function getId(): ?int
|
|
36
|
+
{
|
|
37
|
+
return $this->id;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
public function getChatId(): ?string
|
|
41
|
+
{
|
|
42
|
+
return $this->chatId;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
public function setChatId(string $chatId): static
|
|
46
|
+
{
|
|
47
|
+
$this->chatId = $chatId;
|
|
48
|
+
|
|
49
|
+
return $this;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
public function getUserId(): ?string
|
|
53
|
+
{
|
|
54
|
+
return $this->userId;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
public function setUserId(string $chatId): static
|
|
58
|
+
{
|
|
59
|
+
$this->userId = $chatId;
|
|
60
|
+
|
|
61
|
+
return $this;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
public function getRole(): ?string
|
|
65
|
+
{
|
|
66
|
+
return $this->role;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
public function getRoleName(): ?string
|
|
70
|
+
{
|
|
71
|
+
$role = 'Роль отсутствует!';
|
|
72
|
+
|
|
73
|
+
switch ($this->role) {
|
|
74
|
+
case self::ROLE_ADMIN:
|
|
75
|
+
$role = 'Администратор (может все)';
|
|
76
|
+
break;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
return $role;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
public function setRole(?string $role): static
|
|
83
|
+
{
|
|
84
|
+
$this->role = $role;
|
|
85
|
+
|
|
86
|
+
return $this;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
public function getUsername(): ?string
|
|
90
|
+
{
|
|
91
|
+
return $this->username;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
public function setUsername(?string $username): static
|
|
95
|
+
{
|
|
96
|
+
$this->username = $username;
|
|
97
|
+
|
|
98
|
+
return $this;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
public function getPhone(): ?string
|
|
102
|
+
{
|
|
103
|
+
return $this->phone;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
public function setPhone(?string $phone): static
|
|
107
|
+
{
|
|
108
|
+
$this->phone = $phone;
|
|
109
|
+
|
|
110
|
+
return $this;
|
|
111
|
+
}
|
|
112
|
+
}
|