From eef9ab5624a33422d14b8a8b82bdf6a9ab61922d Mon Sep 17 00:00:00 2001 From: netkas Date: Fri, 4 Oct 2024 19:48:00 -0400 Subject: [PATCH] Added TransactionPartner object --- .../Enums/Types/TransactionPartnerType.php | 11 +++ .../Objects/Payments/TransactionPartner.php | 56 +++++++++++ .../TransactionPartnerFragment.php | 52 ++++++++++ .../TransactionPartnerOther.php | 36 +++++++ .../TransactionPartnerTelegramAds.php | 36 +++++++ .../TransactionPartnerUser.php | 94 +++++++++++++++++++ 6 files changed, 285 insertions(+) create mode 100644 src/TgBotLib/Enums/Types/TransactionPartnerType.php create mode 100644 src/TgBotLib/Objects/Payments/TransactionPartner.php create mode 100644 src/TgBotLib/Objects/Payments/TransactionPartner/TransactionPartnerFragment.php create mode 100644 src/TgBotLib/Objects/Payments/TransactionPartner/TransactionPartnerOther.php create mode 100644 src/TgBotLib/Objects/Payments/TransactionPartner/TransactionPartnerTelegramAds.php create mode 100644 src/TgBotLib/Objects/Payments/TransactionPartner/TransactionPartnerUser.php diff --git a/src/TgBotLib/Enums/Types/TransactionPartnerType.php b/src/TgBotLib/Enums/Types/TransactionPartnerType.php new file mode 100644 index 0000000..bda295a --- /dev/null +++ b/src/TgBotLib/Enums/Types/TransactionPartnerType.php @@ -0,0 +1,11 @@ +type; + } + + /** + * @inheritDoc + */ + public abstract function toArray(): ?array; + + /** + * @inheritDoc + */ + public static function fromArray(?array $data): ?TransactionPartner + { + if($data === null) + { + return null; + } + + if(!isset($data['type'])) + { + throw new InvalidArgumentException('type is not provided'); + } + + return match(TransactionPartnerType::tryFrom($data['type'])) + { + TransactionPartnerType::USER => TransactionPartnerUser::fromArray($data), + TransactionPartnerType::FRAGMENT => TransactionPartnerFragment::fromArray($data), + TransactionPartnerType::TELEGRAM_ADS => TransactionPartnerTelegramAds::fromArray($data), + TransactionPartnerType::OTHER => TransactionPartnerOther::fromArray($data), + default => throw new InvalidArgumentException('Unknown TransactionPartnerType') + }; + } + } \ No newline at end of file diff --git a/src/TgBotLib/Objects/Payments/TransactionPartner/TransactionPartnerFragment.php b/src/TgBotLib/Objects/Payments/TransactionPartner/TransactionPartnerFragment.php new file mode 100644 index 0000000..4dbacad --- /dev/null +++ b/src/TgBotLib/Objects/Payments/TransactionPartner/TransactionPartnerFragment.php @@ -0,0 +1,52 @@ +withdrawal_state; + } + + /** + * @inheritDoc + */ + public function toArray(): ?array + { + return [ + 'type' => $this->type->value, + 'withdrawal_state' => $this->withdrawal_state?->toArray(), + ]; + } + + /** + * @inheritDoc + */ + public static function fromArray(?array $data): ?TransactionPartnerFragment + { + if ($data === null) + { + return null; + } + + $instance = new self(); + $instance->type = TransactionPartnerType::FRAGMENT; + $instance->withdrawal_state = isset($data['withdrawal_state']) ? RevenueWithdrawalState::fromArray($data['withdrawal_state']) : null; + + return $instance; + } + + } \ No newline at end of file diff --git a/src/TgBotLib/Objects/Payments/TransactionPartner/TransactionPartnerOther.php b/src/TgBotLib/Objects/Payments/TransactionPartner/TransactionPartnerOther.php new file mode 100644 index 0000000..9b8c9f9 --- /dev/null +++ b/src/TgBotLib/Objects/Payments/TransactionPartner/TransactionPartnerOther.php @@ -0,0 +1,36 @@ + $this->type->value, + ]; + } + + /** + * @inheritDoc + */ + public static function fromArray(?array $data): ?TransactionPartnerOther + { + if ($data === null) + { + return null; + } + + $instance = new self(); + $instance->type = TransactionPartnerType::OTHER; + + return $instance; + } + } \ No newline at end of file diff --git a/src/TgBotLib/Objects/Payments/TransactionPartner/TransactionPartnerTelegramAds.php b/src/TgBotLib/Objects/Payments/TransactionPartner/TransactionPartnerTelegramAds.php new file mode 100644 index 0000000..ff8215a --- /dev/null +++ b/src/TgBotLib/Objects/Payments/TransactionPartner/TransactionPartnerTelegramAds.php @@ -0,0 +1,36 @@ + $this->type->value, + ]; + } + + /** + * @inheritDoc + */ + public static function fromArray(?array $data): ?TransactionPartnerTelegramAds + { + if ($data === null) + { + return null; + } + + $instance = new self(); + $instance->type = TransactionPartnerType::TELEGRAM_ADS; + + return $instance; + } + } \ No newline at end of file diff --git a/src/TgBotLib/Objects/Payments/TransactionPartner/TransactionPartnerUser.php b/src/TgBotLib/Objects/Payments/TransactionPartner/TransactionPartnerUser.php new file mode 100644 index 0000000..12ad27f --- /dev/null +++ b/src/TgBotLib/Objects/Payments/TransactionPartner/TransactionPartnerUser.php @@ -0,0 +1,94 @@ +user; + } + + /** + * Optional. Bot-specified invoice payload + * + * @return string|null + */ + public function getInvoicePayload(): ?string + { + return $this->invoice_payload; + } + + /** + * Optional. Information about the paid media bought by the user + * + * @return PaidMedia[]|null + */ + public function getPaidMedia(): ?array + { + return $this->paid_media; + } + + /** + * Optional. Bot-specified paid media payload + * + * @return string|null + */ + public function getPaidMediaPayload(): ?string + { + return $this->paid_media_payload; + } + + /** + * @inheritDoc + */ + public function toArray(): ?array + { + return [ + 'type' => $this->type->value, + 'user' => $this->user?->toArray(), + 'invoice_payload' => $this->invoice_payload, + 'paid_media' => is_null($this->paid_media) ? null : array_map(fn(PaidMedia $item) => $item->toArray(), $this->paid_media), + 'paid_media_payload' => $this->paid_media_payload, + ]; + } + + /** + * @inheritDoc + */ + public static function fromArray(?array $data): ?TransactionPartnerUser + { + if (is_null($data)) + { + return null; + } + + $object = new self(); + $object->type = TransactionPartnerType::USER; + $object->user = User::fromArray($data['user']); + $object->invoice_payload = $data['invoice_payload'] ?? null; + $object->paid_media = is_null($data['paid_media']) ? null : array_map(fn($item) => PaidMedia::fromArray($item), $data['paid_media']); + $object->paid_media_payload = $data['paid_media_payload'] ?? null; + + return $object; + } + } \ No newline at end of file