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.
Files changed (29) hide show
  1. package/bin/botTemplate/.env.dev-example +23 -0
  2. package/bin/botTemplate/.env.prod-example +23 -0
  3. package/bin/botTemplate/.env.stage-example +23 -0
  4. package/bin/botTemplate/Makefile +38 -0
  5. package/bin/botTemplate/Readme.md +32 -0
  6. package/bin/botTemplate/config/packages/nelmio_cors.yaml +24 -0
  7. package/bin/botTemplate/docker/config/nginx/default.conf +22 -0
  8. package/bin/botTemplate/docker/config/php/php-ini-overrides.ini +0 -0
  9. package/bin/botTemplate/docker/docker-compose.dev.yml +73 -0
  10. package/bin/botTemplate/docker/docker-compose.prod.yml +91 -0
  11. package/bin/botTemplate/docker/docker-compose.stage.yml +82 -0
  12. package/bin/botTemplate/docker/dockerfile/cron/Dockerfile +36 -0
  13. package/bin/botTemplate/docker/dockerfile/cron/entrypoint.sh +12 -0
  14. package/bin/botTemplate/docker/dockerfile/cron/scheduler +1 -0
  15. package/bin/botTemplate/docker/dockerfile/php/Dockerfile +27 -0
  16. package/bin/botTemplate/src/Controller/MessageController.php +39 -0
  17. package/bin/botTemplate/src/Entity/Chat.php +112 -0
  18. package/bin/botTemplate/src/Entity/DialogContext.php +83 -0
  19. package/bin/botTemplate/src/Entity/Order.php +51 -0
  20. package/bin/botTemplate/src/Kernel.php +11 -0
  21. package/bin/botTemplate/src/Repository/ChatRepository.php +99 -0
  22. package/bin/botTemplate/src/Repository/DialogContextRepository.php +68 -0
  23. package/bin/botTemplate/src/Repository/OrderRepository.php +43 -0
  24. package/bin/botTemplate/src/Service/MessageProcessService.php +201 -0
  25. package/bin/botTemplate/src/Service/TelegramService.php +227 -0
  26. package/bin/frontTemplate/Makefile +3 -0
  27. package/bin/frontTemplate/README.md +5 -0
  28. package/bin/index.js +24 -0
  29. 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
+ }
@@ -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
+ }