diff --git a/changes.md b/changes.md index 8c05702955e..7b024e8d98a 100644 --- a/changes.md +++ b/changes.md @@ -407,6 +407,9 @@
Added Property(s) +- added property `retentionPolicy` to type `ImportContainer` +- added property `expiresAt` to type `ImportContainer` +- added property `retentionPolicy` to type `ImportContainerDraft` - added property `/^[a-zA-Z]{2,3}(?:-[a-zA-Z]{4})?(?:-(?:[a-zA-Z]{2}|\d{3}))?$/` to type `SearchKeywords` - added property `attributes` to type `ProductImport` - added property `attributes` to type `ProductDraftImport` @@ -426,6 +429,10 @@
Added Type(s) +- added type `StrategyEnum` +- added type `RetentionPolicy` +- added type `TimeToLiveConfig` +- added type `TimeToLiveRetentionPolicy` - added type `AttributeLevel`
diff --git a/lib/commercetools-import/src/Models/Importcontainers/ImportContainer.php b/lib/commercetools-import/src/Models/Importcontainers/ImportContainer.php index d6c9020e36f..397a5fee3a1 100644 --- a/lib/commercetools-import/src/Models/Importcontainers/ImportContainer.php +++ b/lib/commercetools-import/src/Models/Importcontainers/ImportContainer.php @@ -17,12 +17,13 @@ interface ImportContainer extends JsonObject public const FIELD_KEY = 'key'; public const FIELD_RESOURCE_TYPE = 'resourceType'; public const FIELD_VERSION = 'version'; + public const FIELD_RETENTION_POLICY = 'retentionPolicy'; public const FIELD_CREATED_AT = 'createdAt'; public const FIELD_LAST_MODIFIED_AT = 'lastModifiedAt'; + public const FIELD_EXPIRES_AT = 'expiresAt'; /** - *

User-defined unique identifier for the ImportContainer. - * Keys can only contain alphanumeric characters (a-Z, 0-9), underscores and hyphens (_, -).

+ *

User-defined unique identifier for the ImportContainer.

* * @return null|string @@ -47,7 +48,15 @@ public function getResourceType(); public function getVersion(); /** - *

The time when the ImportContainer was created.

+ *

The retention policy of the ImportContainer.

+ * + + * @return null|RetentionPolicy + */ + public function getRetentionPolicy(); + + /** + *

Date and time (UTC) the ImportContainer was initially created.

* * @return null|DateTimeImmutable @@ -55,13 +64,21 @@ public function getVersion(); public function getCreatedAt(); /** - *

The last time when the ImportContainer was modified.

+ *

Date and time (UTC) the ImportContainer was last updated.

* * @return null|DateTimeImmutable */ public function getLastModifiedAt(); + /** + *

Date and time (UTC) the ImportContainer is automatically deleted. Only present if a retentionPolicy is set. ImportContainers without expiresAt are permanent until manually deleted.

+ * + + * @return null|DateTimeImmutable + */ + public function getExpiresAt(); + /** * @param ?string $key */ @@ -77,6 +94,11 @@ public function setResourceType(?string $resourceType): void; */ public function setVersion(?int $version): void; + /** + * @param ?RetentionPolicy $retentionPolicy + */ + public function setRetentionPolicy(?RetentionPolicy $retentionPolicy): void; + /** * @param ?DateTimeImmutable $createdAt */ @@ -86,4 +108,9 @@ public function setCreatedAt(?DateTimeImmutable $createdAt): void; * @param ?DateTimeImmutable $lastModifiedAt */ public function setLastModifiedAt(?DateTimeImmutable $lastModifiedAt): void; + + /** + * @param ?DateTimeImmutable $expiresAt + */ + public function setExpiresAt(?DateTimeImmutable $expiresAt): void; } diff --git a/lib/commercetools-import/src/Models/Importcontainers/ImportContainerBuilder.php b/lib/commercetools-import/src/Models/Importcontainers/ImportContainerBuilder.php index 227e174e70b..9e904914c32 100644 --- a/lib/commercetools-import/src/Models/Importcontainers/ImportContainerBuilder.php +++ b/lib/commercetools-import/src/Models/Importcontainers/ImportContainerBuilder.php @@ -39,6 +39,12 @@ final class ImportContainerBuilder implements Builder */ private $version; + /** + + * @var null|RetentionPolicy|RetentionPolicyBuilder + */ + private $retentionPolicy; + /** * @var ?DateTimeImmutable @@ -52,8 +58,13 @@ final class ImportContainerBuilder implements Builder private $lastModifiedAt; /** - *

User-defined unique identifier for the ImportContainer. - * Keys can only contain alphanumeric characters (a-Z, 0-9), underscores and hyphens (_, -).

+ + * @var ?DateTimeImmutable + */ + private $expiresAt; + + /** + *

User-defined unique identifier for the ImportContainer.

* * @return null|string @@ -87,7 +98,18 @@ public function getVersion() } /** - *

The time when the ImportContainer was created.

+ *

The retention policy of the ImportContainer.

+ * + + * @return null|RetentionPolicy + */ + public function getRetentionPolicy() + { + return $this->retentionPolicy instanceof RetentionPolicyBuilder ? $this->retentionPolicy->build() : $this->retentionPolicy; + } + + /** + *

Date and time (UTC) the ImportContainer was initially created.

* * @return null|DateTimeImmutable @@ -98,7 +120,7 @@ public function getCreatedAt() } /** - *

The last time when the ImportContainer was modified.

+ *

Date and time (UTC) the ImportContainer was last updated.

* * @return null|DateTimeImmutable @@ -108,6 +130,17 @@ public function getLastModifiedAt() return $this->lastModifiedAt; } + /** + *

Date and time (UTC) the ImportContainer is automatically deleted. Only present if a retentionPolicy is set. ImportContainers without expiresAt are permanent until manually deleted.

+ * + + * @return null|DateTimeImmutable + */ + public function getExpiresAt() + { + return $this->expiresAt; + } + /** * @param ?string $key * @return $this @@ -141,6 +174,17 @@ public function withVersion(?int $version) return $this; } + /** + * @param ?RetentionPolicy $retentionPolicy + * @return $this + */ + public function withRetentionPolicy(?RetentionPolicy $retentionPolicy) + { + $this->retentionPolicy = $retentionPolicy; + + return $this; + } + /** * @param ?DateTimeImmutable $createdAt * @return $this @@ -163,6 +207,27 @@ public function withLastModifiedAt(?DateTimeImmutable $lastModifiedAt) return $this; } + /** + * @param ?DateTimeImmutable $expiresAt + * @return $this + */ + public function withExpiresAt(?DateTimeImmutable $expiresAt) + { + $this->expiresAt = $expiresAt; + + return $this; + } + + /** + * @deprecated use withRetentionPolicy() instead + * @return $this + */ + public function withRetentionPolicyBuilder(?RetentionPolicyBuilder $retentionPolicy) + { + $this->retentionPolicy = $retentionPolicy; + + return $this; + } public function build(): ImportContainer { @@ -170,8 +235,10 @@ public function build(): ImportContainer $this->key, $this->resourceType, $this->version, + $this->retentionPolicy instanceof RetentionPolicyBuilder ? $this->retentionPolicy->build() : $this->retentionPolicy, $this->createdAt, - $this->lastModifiedAt + $this->lastModifiedAt, + $this->expiresAt ); } diff --git a/lib/commercetools-import/src/Models/Importcontainers/ImportContainerDraft.php b/lib/commercetools-import/src/Models/Importcontainers/ImportContainerDraft.php index 51ee0f0883e..1eb82928547 100644 --- a/lib/commercetools-import/src/Models/Importcontainers/ImportContainerDraft.php +++ b/lib/commercetools-import/src/Models/Importcontainers/ImportContainerDraft.php @@ -15,10 +15,10 @@ interface ImportContainerDraft extends JsonObject { public const FIELD_KEY = 'key'; public const FIELD_RESOURCE_TYPE = 'resourceType'; + public const FIELD_RETENTION_POLICY = 'retentionPolicy'; /** - *

User-defined unique identifier of the ImportContainer. - * Keys can only contain alphanumeric characters (a-Z, 0-9), underscores and hyphens (_, -).

+ *

User-defined unique identifier of the ImportContainer.

* * @return null|string @@ -34,6 +34,14 @@ public function getKey(); */ public function getResourceType(); + /** + *

Set a retention policy to automatically delete the ImportContainer after a defined period.

+ * + + * @return null|RetentionPolicy + */ + public function getRetentionPolicy(); + /** * @param ?string $key */ @@ -43,4 +51,9 @@ public function setKey(?string $key): void; * @param ?string $resourceType */ public function setResourceType(?string $resourceType): void; + + /** + * @param ?RetentionPolicy $retentionPolicy + */ + public function setRetentionPolicy(?RetentionPolicy $retentionPolicy): void; } diff --git a/lib/commercetools-import/src/Models/Importcontainers/ImportContainerDraftBuilder.php b/lib/commercetools-import/src/Models/Importcontainers/ImportContainerDraftBuilder.php index cad651540df..de5f060a7ce 100644 --- a/lib/commercetools-import/src/Models/Importcontainers/ImportContainerDraftBuilder.php +++ b/lib/commercetools-import/src/Models/Importcontainers/ImportContainerDraftBuilder.php @@ -33,8 +33,13 @@ final class ImportContainerDraftBuilder implements Builder private $resourceType; /** - *

User-defined unique identifier of the ImportContainer. - * Keys can only contain alphanumeric characters (a-Z, 0-9), underscores and hyphens (_, -).

+ + * @var null|RetentionPolicy|RetentionPolicyBuilder + */ + private $retentionPolicy; + + /** + *

User-defined unique identifier of the ImportContainer.

* * @return null|string @@ -56,6 +61,17 @@ public function getResourceType() return $this->resourceType; } + /** + *

Set a retention policy to automatically delete the ImportContainer after a defined period.

+ * + + * @return null|RetentionPolicy + */ + public function getRetentionPolicy() + { + return $this->retentionPolicy instanceof RetentionPolicyBuilder ? $this->retentionPolicy->build() : $this->retentionPolicy; + } + /** * @param ?string $key * @return $this @@ -78,12 +94,34 @@ public function withResourceType(?string $resourceType) return $this; } + /** + * @param ?RetentionPolicy $retentionPolicy + * @return $this + */ + public function withRetentionPolicy(?RetentionPolicy $retentionPolicy) + { + $this->retentionPolicy = $retentionPolicy; + + return $this; + } + + /** + * @deprecated use withRetentionPolicy() instead + * @return $this + */ + public function withRetentionPolicyBuilder(?RetentionPolicyBuilder $retentionPolicy) + { + $this->retentionPolicy = $retentionPolicy; + + return $this; + } public function build(): ImportContainerDraft { return new ImportContainerDraftModel( $this->key, - $this->resourceType + $this->resourceType, + $this->retentionPolicy instanceof RetentionPolicyBuilder ? $this->retentionPolicy->build() : $this->retentionPolicy ); } diff --git a/lib/commercetools-import/src/Models/Importcontainers/ImportContainerDraftModel.php b/lib/commercetools-import/src/Models/Importcontainers/ImportContainerDraftModel.php index 9c740642769..0264c9ff4c4 100644 --- a/lib/commercetools-import/src/Models/Importcontainers/ImportContainerDraftModel.php +++ b/lib/commercetools-import/src/Models/Importcontainers/ImportContainerDraftModel.php @@ -31,21 +31,28 @@ final class ImportContainerDraftModel extends JsonObjectModel implements ImportC */ protected $resourceType; + /** + * + * @var ?RetentionPolicy + */ + protected $retentionPolicy; + /** * @psalm-suppress MissingParamType */ public function __construct( ?string $key = null, - ?string $resourceType = null + ?string $resourceType = null, + ?RetentionPolicy $retentionPolicy = null ) { $this->key = $key; $this->resourceType = $resourceType; + $this->retentionPolicy = $retentionPolicy; } /** - *

User-defined unique identifier of the ImportContainer. - * Keys can only contain alphanumeric characters (a-Z, 0-9), underscores and hyphens (_, -).

+ *

User-defined unique identifier of the ImportContainer.

* * * @return null|string @@ -85,6 +92,27 @@ public function getResourceType() return $this->resourceType; } + /** + *

Set a retention policy to automatically delete the ImportContainer after a defined period.

+ * + * + * @return null|RetentionPolicy + */ + public function getRetentionPolicy() + { + if (is_null($this->retentionPolicy)) { + /** @psalm-var stdClass|array|null $data */ + $data = $this->raw(self::FIELD_RETENTION_POLICY); + if (is_null($data)) { + return null; + } + $className = RetentionPolicyModel::resolveDiscriminatorClass($data); + $this->retentionPolicy = $className::of($data); + } + + return $this->retentionPolicy; + } + /** * @param ?string $key @@ -101,4 +129,12 @@ public function setResourceType(?string $resourceType): void { $this->resourceType = $resourceType; } + + /** + * @param ?RetentionPolicy $retentionPolicy + */ + public function setRetentionPolicy(?RetentionPolicy $retentionPolicy): void + { + $this->retentionPolicy = $retentionPolicy; + } } diff --git a/lib/commercetools-import/src/Models/Importcontainers/ImportContainerModel.php b/lib/commercetools-import/src/Models/Importcontainers/ImportContainerModel.php index f3a00412215..2a50083d1cc 100644 --- a/lib/commercetools-import/src/Models/Importcontainers/ImportContainerModel.php +++ b/lib/commercetools-import/src/Models/Importcontainers/ImportContainerModel.php @@ -38,6 +38,12 @@ final class ImportContainerModel extends JsonObjectModel implements ImportContai */ protected $version; + /** + * + * @var ?RetentionPolicy + */ + protected $retentionPolicy; + /** * * @var ?DateTimeImmutable @@ -50,6 +56,12 @@ final class ImportContainerModel extends JsonObjectModel implements ImportContai */ protected $lastModifiedAt; + /** + * + * @var ?DateTimeImmutable + */ + protected $expiresAt; + /** * @psalm-suppress MissingParamType @@ -58,19 +70,22 @@ public function __construct( ?string $key = null, ?string $resourceType = null, ?int $version = null, + ?RetentionPolicy $retentionPolicy = null, ?DateTimeImmutable $createdAt = null, - ?DateTimeImmutable $lastModifiedAt = null + ?DateTimeImmutable $lastModifiedAt = null, + ?DateTimeImmutable $expiresAt = null ) { $this->key = $key; $this->resourceType = $resourceType; $this->version = $version; + $this->retentionPolicy = $retentionPolicy; $this->createdAt = $createdAt; $this->lastModifiedAt = $lastModifiedAt; + $this->expiresAt = $expiresAt; } /** - *

User-defined unique identifier for the ImportContainer. - * Keys can only contain alphanumeric characters (a-Z, 0-9), underscores and hyphens (_, -).

+ *

User-defined unique identifier for the ImportContainer.

* * * @return null|string @@ -131,7 +146,28 @@ public function getVersion() } /** - *

The time when the ImportContainer was created.

+ *

The retention policy of the ImportContainer.

+ * + * + * @return null|RetentionPolicy + */ + public function getRetentionPolicy() + { + if (is_null($this->retentionPolicy)) { + /** @psalm-var stdClass|array|null $data */ + $data = $this->raw(self::FIELD_RETENTION_POLICY); + if (is_null($data)) { + return null; + } + $className = RetentionPolicyModel::resolveDiscriminatorClass($data); + $this->retentionPolicy = $className::of($data); + } + + return $this->retentionPolicy; + } + + /** + *

Date and time (UTC) the ImportContainer was initially created.

* * * @return null|DateTimeImmutable @@ -155,7 +191,7 @@ public function getCreatedAt() } /** - *

The last time when the ImportContainer was modified.

+ *

Date and time (UTC) the ImportContainer was last updated.

* * * @return null|DateTimeImmutable @@ -178,6 +214,30 @@ public function getLastModifiedAt() return $this->lastModifiedAt; } + /** + *

Date and time (UTC) the ImportContainer is automatically deleted. Only present if a retentionPolicy is set. ImportContainers without expiresAt are permanent until manually deleted.

+ * + * + * @return null|DateTimeImmutable + */ + public function getExpiresAt() + { + if (is_null($this->expiresAt)) { + /** @psalm-var ?string $data */ + $data = $this->raw(self::FIELD_EXPIRES_AT); + if (is_null($data)) { + return null; + } + $data = DateTimeImmutable::createFromFormat(MapperFactory::DATETIME_FORMAT, $data); + if (false === $data) { + return null; + } + $this->expiresAt = $data; + } + + return $this->expiresAt; + } + /** * @param ?string $key @@ -203,6 +263,14 @@ public function setVersion(?int $version): void $this->version = $version; } + /** + * @param ?RetentionPolicy $retentionPolicy + */ + public function setRetentionPolicy(?RetentionPolicy $retentionPolicy): void + { + $this->retentionPolicy = $retentionPolicy; + } + /** * @param ?DateTimeImmutable $createdAt */ @@ -219,6 +287,14 @@ public function setLastModifiedAt(?DateTimeImmutable $lastModifiedAt): void $this->lastModifiedAt = $lastModifiedAt; } + /** + * @param ?DateTimeImmutable $expiresAt + */ + public function setExpiresAt(?DateTimeImmutable $expiresAt): void + { + $this->expiresAt = $expiresAt; + } + #[\ReturnTypeWillChange] public function jsonSerialize() @@ -231,6 +307,10 @@ public function jsonSerialize() if (isset($data[ImportContainer::FIELD_LAST_MODIFIED_AT]) && $data[ImportContainer::FIELD_LAST_MODIFIED_AT] instanceof \DateTimeImmutable) { $data[ImportContainer::FIELD_LAST_MODIFIED_AT] = $data[ImportContainer::FIELD_LAST_MODIFIED_AT]->setTimeZone(new \DateTimeZone('UTC'))->format('c'); } + + if (isset($data[ImportContainer::FIELD_EXPIRES_AT]) && $data[ImportContainer::FIELD_EXPIRES_AT] instanceof \DateTimeImmutable) { + $data[ImportContainer::FIELD_EXPIRES_AT] = $data[ImportContainer::FIELD_EXPIRES_AT]->setTimeZone(new \DateTimeZone('UTC'))->format('c'); + } return (object) $data; } } diff --git a/lib/commercetools-import/src/Models/Importcontainers/RetentionPolicy.php b/lib/commercetools-import/src/Models/Importcontainers/RetentionPolicy.php new file mode 100644 index 00000000000..1cb2745a179 --- /dev/null +++ b/lib/commercetools-import/src/Models/Importcontainers/RetentionPolicy.php @@ -0,0 +1,26 @@ +The strategy of the retention policy. Used to determine how the ImportContainer should be retained.

+ * + + * @return null|string + */ + public function getStrategy(); +} diff --git a/lib/commercetools-import/src/Models/Importcontainers/RetentionPolicyBuilder.php b/lib/commercetools-import/src/Models/Importcontainers/RetentionPolicyBuilder.php new file mode 100644 index 00000000000..a487457b1e6 --- /dev/null +++ b/lib/commercetools-import/src/Models/Importcontainers/RetentionPolicyBuilder.php @@ -0,0 +1,33 @@ + + */ +final class RetentionPolicyBuilder implements Builder +{ + public function build(): RetentionPolicy + { + return new RetentionPolicyModel( + ); + } + + public static function of(): RetentionPolicyBuilder + { + return new self(); + } +} diff --git a/lib/commercetools-import/src/Models/Importcontainers/RetentionPolicyCollection.php b/lib/commercetools-import/src/Models/Importcontainers/RetentionPolicyCollection.php new file mode 100644 index 00000000000..5db529a3488 --- /dev/null +++ b/lib/commercetools-import/src/Models/Importcontainers/RetentionPolicyCollection.php @@ -0,0 +1,60 @@ + + * @psalm-method T current() + * @psalm-method T end() + * @psalm-method T at($offset) + * @method RetentionPolicy current() + * @method RetentionPolicy end() + * @method RetentionPolicy at($offset) + */ +class RetentionPolicyCollection extends MapperSequence +{ + /** + * @psalm-assert T $value + * @psalm-param T|stdClass $value + * @throws InvalidArgumentException + * + * @return RetentionPolicyCollection + */ + public function add($value) + { + if (!$value instanceof RetentionPolicy) { + throw new InvalidArgumentException(); + } + $this->store($value); + + return $this; + } + + /** + * @psalm-return callable(int):?T + */ + protected function mapper() + { + return function (?int $index): ?RetentionPolicy { + $data = $this->get($index); + if ($data instanceof stdClass) { + /** @var T $data */ + $data = RetentionPolicyModel::of($data); + $this->set($data, $index); + } + + return $data; + }; + } +} diff --git a/lib/commercetools-import/src/Models/Importcontainers/RetentionPolicyModel.php b/lib/commercetools-import/src/Models/Importcontainers/RetentionPolicyModel.php new file mode 100644 index 00000000000..ffe8e6a1b5f --- /dev/null +++ b/lib/commercetools-import/src/Models/Importcontainers/RetentionPolicyModel.php @@ -0,0 +1,96 @@ + > + * + */ + private static $discriminatorClasses = [ + 'ttl' => TimeToLiveRetentionPolicyModel::class, + ]; + + /** + * @psalm-suppress MissingParamType + */ + public function __construct( + ?string $strategy = null + ) { + $this->strategy = $strategy; + } + + /** + *

The strategy of the retention policy. Used to determine how the ImportContainer should be retained.

+ * + * + * @return null|string + */ + public function getStrategy() + { + if (is_null($this->strategy)) { + /** @psalm-var ?string $data */ + $data = $this->raw(self::FIELD_STRATEGY); + if (is_null($data)) { + return null; + } + $this->strategy = (string) $data; + } + + return $this->strategy; + } + + + + + + /** + * @psalm-param stdClass|array $value + * @psalm-return class-string + */ + public static function resolveDiscriminatorClass($value): string + { + $fieldName = RetentionPolicy::DISCRIMINATOR_FIELD; + if (is_object($value) && isset($value->$fieldName)) { + /** @psalm-var string $discriminatorValue */ + $discriminatorValue = $value->$fieldName; + if (isset(self::$discriminatorClasses[$discriminatorValue])) { + return self::$discriminatorClasses[$discriminatorValue]; + } + } + if (is_array($value) && isset($value[$fieldName])) { + /** @psalm-var string $discriminatorValue */ + $discriminatorValue = $value[$fieldName]; + if (isset(self::$discriminatorClasses[$discriminatorValue])) { + return self::$discriminatorClasses[$discriminatorValue]; + } + } + + /** @psalm-var class-string */ + $type = RetentionPolicyModel::class; + return $type; + } +} diff --git a/lib/commercetools-import/src/Models/Importcontainers/TimeToLiveConfig.php b/lib/commercetools-import/src/Models/Importcontainers/TimeToLiveConfig.php new file mode 100644 index 00000000000..d64162f6800 --- /dev/null +++ b/lib/commercetools-import/src/Models/Importcontainers/TimeToLiveConfig.php @@ -0,0 +1,30 @@ +The time to live of the ImportContainer. Used to generate the expiresAt value of the ImportContainer. The lowest accepted value is 1h and the highest accepted value is 30d.

+ * + + * @return null|string + */ + public function getTimeToLive(); + + /** + * @param ?string $timeToLive + */ + public function setTimeToLive(?string $timeToLive): void; +} diff --git a/lib/commercetools-import/src/Models/Importcontainers/TimeToLiveConfigBuilder.php b/lib/commercetools-import/src/Models/Importcontainers/TimeToLiveConfigBuilder.php new file mode 100644 index 00000000000..f9596fbf896 --- /dev/null +++ b/lib/commercetools-import/src/Models/Importcontainers/TimeToLiveConfigBuilder.php @@ -0,0 +1,63 @@ + + */ +final class TimeToLiveConfigBuilder implements Builder +{ + /** + + * @var ?string + */ + private $timeToLive; + + /** + *

The time to live of the ImportContainer. Used to generate the expiresAt value of the ImportContainer. The lowest accepted value is 1h and the highest accepted value is 30d.

+ * + + * @return null|string + */ + public function getTimeToLive() + { + return $this->timeToLive; + } + + /** + * @param ?string $timeToLive + * @return $this + */ + public function withTimeToLive(?string $timeToLive) + { + $this->timeToLive = $timeToLive; + + return $this; + } + + + public function build(): TimeToLiveConfig + { + return new TimeToLiveConfigModel( + $this->timeToLive + ); + } + + public static function of(): TimeToLiveConfigBuilder + { + return new self(); + } +} diff --git a/lib/commercetools-import/src/Models/Importcontainers/TimeToLiveConfigCollection.php b/lib/commercetools-import/src/Models/Importcontainers/TimeToLiveConfigCollection.php new file mode 100644 index 00000000000..9efb4a75042 --- /dev/null +++ b/lib/commercetools-import/src/Models/Importcontainers/TimeToLiveConfigCollection.php @@ -0,0 +1,56 @@ + + * @method TimeToLiveConfig current() + * @method TimeToLiveConfig end() + * @method TimeToLiveConfig at($offset) + */ +class TimeToLiveConfigCollection extends MapperSequence +{ + /** + * @psalm-assert TimeToLiveConfig $value + * @psalm-param TimeToLiveConfig|stdClass $value + * @throws InvalidArgumentException + * + * @return TimeToLiveConfigCollection + */ + public function add($value) + { + if (!$value instanceof TimeToLiveConfig) { + throw new InvalidArgumentException(); + } + $this->store($value); + + return $this; + } + + /** + * @psalm-return callable(int):?TimeToLiveConfig + */ + protected function mapper() + { + return function (?int $index): ?TimeToLiveConfig { + $data = $this->get($index); + if ($data instanceof stdClass) { + /** @var TimeToLiveConfig $data */ + $data = TimeToLiveConfigModel::of($data); + $this->set($data, $index); + } + + return $data; + }; + } +} diff --git a/lib/commercetools-import/src/Models/Importcontainers/TimeToLiveConfigModel.php b/lib/commercetools-import/src/Models/Importcontainers/TimeToLiveConfigModel.php new file mode 100644 index 00000000000..708f8f8d5f4 --- /dev/null +++ b/lib/commercetools-import/src/Models/Importcontainers/TimeToLiveConfigModel.php @@ -0,0 +1,66 @@ +timeToLive = $timeToLive; + } + + /** + *

The time to live of the ImportContainer. Used to generate the expiresAt value of the ImportContainer. The lowest accepted value is 1h and the highest accepted value is 30d.

+ * + * + * @return null|string + */ + public function getTimeToLive() + { + if (is_null($this->timeToLive)) { + /** @psalm-var ?string $data */ + $data = $this->raw(self::FIELD_TIME_TO_LIVE); + if (is_null($data)) { + return null; + } + $this->timeToLive = (string) $data; + } + + return $this->timeToLive; + } + + + /** + * @param ?string $timeToLive + */ + public function setTimeToLive(?string $timeToLive): void + { + $this->timeToLive = $timeToLive; + } +} diff --git a/lib/commercetools-import/src/Models/Importcontainers/TimeToLiveRetentionPolicy.php b/lib/commercetools-import/src/Models/Importcontainers/TimeToLiveRetentionPolicy.php new file mode 100644 index 00000000000..72b763b59f2 --- /dev/null +++ b/lib/commercetools-import/src/Models/Importcontainers/TimeToLiveRetentionPolicy.php @@ -0,0 +1,30 @@ +The configuration of the time to live retention policy.

+ * + + * @return null|TimeToLiveConfig + */ + public function getConfig(); + + /** + * @param ?TimeToLiveConfig $config + */ + public function setConfig(?TimeToLiveConfig $config): void; +} diff --git a/lib/commercetools-import/src/Models/Importcontainers/TimeToLiveRetentionPolicyBuilder.php b/lib/commercetools-import/src/Models/Importcontainers/TimeToLiveRetentionPolicyBuilder.php new file mode 100644 index 00000000000..3d69f195e41 --- /dev/null +++ b/lib/commercetools-import/src/Models/Importcontainers/TimeToLiveRetentionPolicyBuilder.php @@ -0,0 +1,73 @@ + + */ +final class TimeToLiveRetentionPolicyBuilder implements Builder +{ + /** + + * @var null|TimeToLiveConfig|TimeToLiveConfigBuilder + */ + private $config; + + /** + *

The configuration of the time to live retention policy.

+ * + + * @return null|TimeToLiveConfig + */ + public function getConfig() + { + return $this->config instanceof TimeToLiveConfigBuilder ? $this->config->build() : $this->config; + } + + /** + * @param ?TimeToLiveConfig $config + * @return $this + */ + public function withConfig(?TimeToLiveConfig $config) + { + $this->config = $config; + + return $this; + } + + /** + * @deprecated use withConfig() instead + * @return $this + */ + public function withConfigBuilder(?TimeToLiveConfigBuilder $config) + { + $this->config = $config; + + return $this; + } + + public function build(): TimeToLiveRetentionPolicy + { + return new TimeToLiveRetentionPolicyModel( + $this->config instanceof TimeToLiveConfigBuilder ? $this->config->build() : $this->config + ); + } + + public static function of(): TimeToLiveRetentionPolicyBuilder + { + return new self(); + } +} diff --git a/lib/commercetools-import/src/Models/Importcontainers/TimeToLiveRetentionPolicyCollection.php b/lib/commercetools-import/src/Models/Importcontainers/TimeToLiveRetentionPolicyCollection.php new file mode 100644 index 00000000000..b57810fbe4a --- /dev/null +++ b/lib/commercetools-import/src/Models/Importcontainers/TimeToLiveRetentionPolicyCollection.php @@ -0,0 +1,56 @@ + + * @method TimeToLiveRetentionPolicy current() + * @method TimeToLiveRetentionPolicy end() + * @method TimeToLiveRetentionPolicy at($offset) + */ +class TimeToLiveRetentionPolicyCollection extends RetentionPolicyCollection +{ + /** + * @psalm-assert TimeToLiveRetentionPolicy $value + * @psalm-param TimeToLiveRetentionPolicy|stdClass $value + * @throws InvalidArgumentException + * + * @return TimeToLiveRetentionPolicyCollection + */ + public function add($value) + { + if (!$value instanceof TimeToLiveRetentionPolicy) { + throw new InvalidArgumentException(); + } + $this->store($value); + + return $this; + } + + /** + * @psalm-return callable(int):?TimeToLiveRetentionPolicy + */ + protected function mapper() + { + return function (?int $index): ?TimeToLiveRetentionPolicy { + $data = $this->get($index); + if ($data instanceof stdClass) { + /** @var TimeToLiveRetentionPolicy $data */ + $data = TimeToLiveRetentionPolicyModel::of($data); + $this->set($data, $index); + } + + return $data; + }; + } +} diff --git a/lib/commercetools-import/src/Models/Importcontainers/TimeToLiveRetentionPolicyModel.php b/lib/commercetools-import/src/Models/Importcontainers/TimeToLiveRetentionPolicyModel.php new file mode 100644 index 00000000000..8de77d39a09 --- /dev/null +++ b/lib/commercetools-import/src/Models/Importcontainers/TimeToLiveRetentionPolicyModel.php @@ -0,0 +1,96 @@ +config = $config; + $this->strategy = $strategy ?? self::DISCRIMINATOR_VALUE; + } + + /** + *

The strategy of the retention policy. Used to determine how the ImportContainer should be retained.

+ * + * + * @return null|string + */ + public function getStrategy() + { + if (is_null($this->strategy)) { + /** @psalm-var ?string $data */ + $data = $this->raw(self::FIELD_STRATEGY); + if (is_null($data)) { + return null; + } + $this->strategy = (string) $data; + } + + return $this->strategy; + } + + /** + *

The configuration of the time to live retention policy.

+ * + * + * @return null|TimeToLiveConfig + */ + public function getConfig() + { + if (is_null($this->config)) { + /** @psalm-var stdClass|array|null $data */ + $data = $this->raw(self::FIELD_CONFIG); + if (is_null($data)) { + return null; + } + + $this->config = TimeToLiveConfigModel::of($data); + } + + return $this->config; + } + + + /** + * @param ?TimeToLiveConfig $config + */ + public function setConfig(?TimeToLiveConfig $config): void + { + $this->config = $config; + } +} diff --git a/references.txt b/references.txt index 9acb5bcca10..686eb898cd6 100644 --- a/references.txt +++ b/references.txt @@ -448,3 +448,4 @@ bb49fa04d50e4e0267846c7d805ae8ebc254bdea 619fb89cb6ac5d2a1d5f1b7d2f51a51e13e7ace9 1a7da72f28929e745fe954c69569acda29a50ed5 1968e11a226558d6610715b7ad2845eb682ddbf1 +6d4cd1e87a3eacff648e213aa9aff88292e9b75d