$summaryCounts * @param array $context */ private function __construct( public bool $successful, public mixed $collection, public ?string $reasonCode = null, public ?string $failureCode = null, public ?string $message = null, public bool $blocked = false, public array $summaryCounts = [], public array $context = [], ) {} /** * @param list> $items * @param array $summaryCounts * @param array $context */ public static function succeeded(array $items, array $summaryCounts = [], array $context = []): self { return new self( successful: true, collection: $items, summaryCounts: $summaryCounts, context: $context, ); } /** * @param array $context */ public static function succeededPayload(mixed $collection, array $context = []): self { return new self( successful: true, collection: $collection, context: $context, ); } /** * @param array $summaryCounts * @param array $context */ public static function failed( string $reasonCode, string $failureCode, ?string $message = null, array $summaryCounts = [], array $context = [], ): self { return new self( successful: false, collection: [], reasonCode: $reasonCode, failureCode: $failureCode, message: $message, summaryCounts: $summaryCounts, context: $context, ); } /** * @param array $context */ public static function blocked(string $reasonCode, string $failureCode, ?string $message = null, array $context = []): self { return new self( successful: false, collection: [], reasonCode: $reasonCode, failureCode: $failureCode, message: $message, blocked: true, context: $context, ); } }