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