From 8231b15b56f11cdb99d0e175ed3b5f04a8deedfc Mon Sep 17 00:00:00 2001 From: arsaizdihar <arsadihar@gmail.com> Date: Tue, 7 Nov 2023 18:51:55 +0700 Subject: [PATCH] feat: connect to SOAP --- .env.example | 5 +++ .gitignore | 3 +- Dockerfile | 3 +- docker-compose.yml | 13 +++----- src/Controllers/DormController.php | 2 ++ src/Soap/SubscriptionService.php | 49 ++++++++++++++++++++++++++++++ 6 files changed, 64 insertions(+), 11 deletions(-) create mode 100644 .env.example create mode 100644 src/Soap/SubscriptionService.php diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..e922c88 --- /dev/null +++ b/.env.example @@ -0,0 +1,5 @@ +POSTGRES_USER=postgres +POSTGRES_PASSWORD=postgres +POSTGRES_DB=mykos +POSTGRES_HOST=db +SOAP_URL=http://host.docker.internal:7000/ws/ \ No newline at end of file diff --git a/.gitignore b/.gitignore index a293e6d..3b52e16 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ -src/public/media/ \ No newline at end of file +src/public/media/ +.env \ No newline at end of file diff --git a/Dockerfile b/Dockerfile index 8fde4f3..685cd7b 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,3 +1,4 @@ FROM php:8.2-apache -RUN apt-get update && apt-get install -y libpq-dev && docker-php-ext-install pdo pdo_pgsql +RUN apt-get update && apt-get install -y libpq-dev -y libxml2-dev +RUN docker-php-ext-install pdo pdo_pgsql soap RUN a2enmod rewrite \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml index e4b068f..1b63473 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -11,19 +11,14 @@ services: - ./src/php.ini:/usr/local/etc/php/php.ini networks: - php-network + env_file: + - .env depends_on: - db - environment: - - POSTGRES_USER=postgres - - POSTGRES_PASSWORD=postgres - - POSTGRES_DB=mykos - - POSTGRES_HOST=db db: image: postgres:14.1-alpine - environment: - - POSTGRES_USER=postgres - - POSTGRES_PASSWORD=postgres - - POSTGRES_DB=mykos + env_file: + - .env volumes: - db:/var/lib/postgresql/data - ./src/Models/schema.sql:/docker-entrypoint-initdb.d/schema.sql diff --git a/src/Controllers/DormController.php b/src/Controllers/DormController.php index 83cb827..654eac7 100644 --- a/src/Controllers/DormController.php +++ b/src/Controllers/DormController.php @@ -12,6 +12,7 @@ use app\Models\Dorm; use app\Models\Media; use app\Models\Owners; use app\Models\Reviews; +use app\Soap\SubscriptionService; use app\Utils\FileManager; use app\Utils\Toast; @@ -110,6 +111,7 @@ class DormController extends Controller unset($form->data["dorm_name"]); $dorm = Dorm::toModel($form->data); $dorm->save(); + SubscriptionService::getInstance()->notifyNewDorm($dorm); Response::redirect("/dorms/{$dorm->dorm_id}/media"); return; } diff --git a/src/Soap/SubscriptionService.php b/src/Soap/SubscriptionService.php new file mode 100644 index 0000000..a7196c9 --- /dev/null +++ b/src/Soap/SubscriptionService.php @@ -0,0 +1,49 @@ +<?php + +namespace app\Soap; + +use app\Models\Dorm; +use SoapClient; + +class SubscriptionService +{ + private $client; + private static SubscriptionService $instance; + + public function __construct() + { + $opts = array( + 'http' => array( + 'user_agent' => 'PHPSoapClient' + ), + ); + $context = stream_context_create($opts); + $url = getenv("SOAP_URL"); + if ($url === false) { + $url = "http://host.docker.internal:7000/ws/"; + } + $this->client = new SoapClient($url . "Subscription?wsdl", array([ + 'stream_context' => $context, + ])); + } + + public function notifyNewDorm(Dorm $dorm) + { + $this->client->notifyNewDorm(["dorm" => array( + "dorm_id" => $dorm->dorm_id, + "name" => $dorm->name, + "description" => $dorm->description, + "address" => $dorm->address, + "city" => $dorm->city, + "price" => $dorm->price, + )]); + } + + public static function getInstance() + { + if (!isset(self::$instance)) { + self::$instance = new SubscriptionService(); + } + return self::$instance; + } +} -- GitLab