Added TransactionPartner object

This commit is contained in:
netkas 2024-10-04 19:48:00 -04:00
parent 07140aa08f
commit eef9ab5624
6 changed files with 285 additions and 0 deletions

View file

@ -0,0 +1,11 @@
<?php
namespace TgBotLib\Enums\Types;
enum TransactionPartnerType : string
{
case USER = 'user';
case FRAGMENT = 'fragment';
case TELEGRAM_ADS = 'telegram_ads';
case OTHER = 'other';
}

View file

@ -0,0 +1,56 @@
<?php
namespace TgBotLib\Objects\Payments;
use InvalidArgumentException;
use TgBotLib\Enums\Types\TransactionPartnerType;
use TgBotLib\Interfaces\ObjectTypeInterface;
use TgBotLib\Objects\Payments\TransactionPartner\TransactionPartnerFragment;
use TgBotLib\Objects\Payments\TransactionPartner\TransactionPartnerOther;
use TgBotLib\Objects\Payments\TransactionPartner\TransactionPartnerTelegramAds;
use TgBotLib\Objects\Payments\TransactionPartner\TransactionPartnerUser;
abstract class TransactionPartner implements ObjectTypeInterface
{
protected TransactionPartnerType $type;
/**
* Returns the TransactionPartnerType
*
* @return TransactionPartnerType
*/
public function getType(): TransactionPartnerType
{
return $this->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')
};
}
}

View file

@ -0,0 +1,52 @@
<?php
namespace TgBotLib\Objects\Payments\TransactionPartner;
use TgBotLib\Enums\Types\TransactionPartnerType;
use TgBotLib\Interfaces\ObjectTypeInterface;
use TgBotLib\Objects\Payments\RevenueWithdrawalState;
use TgBotLib\Objects\Payments\TransactionPartner;
class TransactionPartnerFragment extends TransactionPartner implements ObjectTypeInterface
{
private ?RevenueWithdrawalState $withdrawal_state;
/**
* Optional. State of the transaction if the transaction is outgoing
*
* @return RevenueWithdrawalState|null
*/
public function getWithdrawalState(): ?RevenueWithdrawalState
{
return $this->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;
}
}

View file

@ -0,0 +1,36 @@
<?php
namespace TgBotLib\Objects\Payments\TransactionPartner;
use TgBotLib\Enums\Types\TransactionPartnerType;
use TgBotLib\Interfaces\ObjectTypeInterface;
use TgBotLib\Objects\Payments\TransactionPartner;
class TransactionPartnerOther extends TransactionPartner implements ObjectTypeInterface
{
/**
* @inheritDoc
*/
public function toArray(): ?array
{
return [
'type' => $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;
}
}

View file

@ -0,0 +1,36 @@
<?php
namespace TgBotLib\Objects\Payments\TransactionPartner;
use TgBotLib\Enums\Types\TransactionPartnerType;
use TgBotLib\Interfaces\ObjectTypeInterface;
use TgBotLib\Objects\Payments\TransactionPartner;
class TransactionPartnerTelegramAds extends TransactionPartner implements ObjectTypeInterface
{
/**
* @inheritDoc
*/
public function toArray(): ?array
{
return [
'type' => $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;
}
}

View file

@ -0,0 +1,94 @@
<?php
namespace TgBotLib\Objects\Payments\TransactionPartner;
use TgBotLib\Enums\Types\TransactionPartnerType;
use TgBotLib\Interfaces\ObjectTypeInterface;
use TgBotLib\Objects\PaidMedia;
use TgBotLib\Objects\Payments\TransactionPartner;
use TgBotLib\Objects\User;
class TransactionPartnerUser extends TransactionPartner implements ObjectTypeInterface
{
private User $user;
private ?string $invoice_payload;
/**
* @var PaidMedia[]|null
*/
private ?array $paid_media;
private ?string $paid_media_payload;
/**
* Information about the user
*
* @return User
*/
public function getUser(): User
{
return $this->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;
}
}