diff --git a/CHANGELOG.md b/CHANGELOG.md index 364fe77..360e96f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,11 +9,22 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. - Removed `deprecated: true` from LegacyTeams endpoints (`GET`/`POST /v1/legacyTeams`, `GET`/`PUT /v1/legacyTeams/{id}`, `GET`/`POST`/`DELETE /v1/legacyTeams/{id}/users`, `GET /v1/legacyTeams/user/{id}`) and updated the tag description to remove outdated deprecation notice ### Fixed +- Fixed `has_pic` field type in v1 deal creator schema (`DealNonStrictModeFields`, used by `GET`/`POST /v1/deals` and related endpoints) — changed from `boolean` to `integer` since the API returns `0`/`1`, not `true`/`false` +- Fixed `code` field type in v2 product search results (`GET /api/v2/products/search`) — changed from `integer` to `string` and made nullable to match actual API responses +- Fixed `value` field type in v2 deal search results (`DealSearchItem`, used by `GET /api/v2/deals/search`) — changed from `integer` to `number` and made nullable to match actual API responses +- Marked `data` nullable in `ListProductFilesResponse` (`GET /v1/products/{id}/files`) +- Marked `update_time` nullable in v2 deal, organization, person, and stage schemas (`DealItem`, `OrganizationItem`, `PersonItem`, `StageItem`) +- Marked `next_cursor` nullable in v2 cursor pagination schema, used across all v2 cursor-paginated list endpoints +- Marked several v2 activity fields nullable (`ActivityItem`): `deal_id`, `lead_id`, `person_id`, `org_id`, `project_id`, `due_time`, `duration`, `marked_as_done_time`, `location`, and all `location` address subfields (`country`, `admin_area_level_1`, `admin_area_level_2`, `locality`, `sublocality`, `route`, `street_number`, `subpremise`, `postal_code`) +- Marked v2 `OrganizationItemAddress` and `PersonItemAddress` objects and all their subfields nullable, and marked `PersonItem.picture_id` nullable +- Marked `person` nullable in v2 lead search results (`LeadSearchItem`) and `address` nullable in v2 organization search results (`OrganizationSearchItem`) - Removed `person_id` from the v2 activity request body (`POST /api/v2/activities`, `PATCH /api/v2/activities/{id}`) — the API has always rejected it as read-only, and the schema advertised it as writable; use `participants: [{ "person_id": 123, "primary": true }]` instead. `org_id` is unaffected. - Added `required: [name]` to the v2 person create request body (`POST /api/v2/persons`) — a bare call previously reached the API instead of failing client-side. - Reworded the `im`, `notes`, `birthday`, and `job_title` field descriptions and the `addPerson`/`updatePerson` operation descriptions (which also cover `postal_address`) to disclose that these fields 403 when contact sync isn't enabled, rather than only describing when they're present on read. - Fixed OAuth scopes on six v2 deal sub-resource write operations (`POST /api/v2/deals/{id}/discounts`, `PATCH`/`DELETE /api/v2/deals/{id}/discounts/{discount_id}`, `POST /api/v2/deals/{id}/installments`, `PATCH`/`DELETE /api/v2/deals/{id}/installments/{installment_id}`) that incorrectly listed `deals:read` alongside `deals:full`, copied from their sibling GET operations - these are now `deals:full` only, matching their read-write nature +## [17.8.0](https://github.com/pipedrive/client-php/compare/17.7.0...17.8.0) (2026-09-17) + ## [17.7.0](https://github.com/pipedrive/client-php/compare/17.6.3...17.7.0) (2026-09-17) ## [17.6.3](https://github.com/pipedrive/client-php/compare/17.6.2...17.6.3) (2026-09-17) diff --git a/docs/versions/v1/Model/DealNonStrictModeFieldsCreatorUserId.md b/docs/versions/v1/Model/DealNonStrictModeFieldsCreatorUserId.md index 8568268..68c2af4 100644 --- a/docs/versions/v1/Model/DealNonStrictModeFieldsCreatorUserId.md +++ b/docs/versions/v1/Model/DealNonStrictModeFieldsCreatorUserId.md @@ -7,7 +7,7 @@ Name | Type | Description | Notes **id** | **int** | The ID of the deal creator | [optional] **name** | **string** | The name of the deal creator | [optional] **email** | **string** | The email of the deal creator | [optional] -**has_pic** | **bool** | If the creator has a picture or not | [optional] +**has_pic** | **int** | If the creator has a picture or not | [optional] **pic_hash** | **string** | The creator picture hash | [optional] **active_flag** | **bool** | Whether the creator is active or not | [optional] **value** | **int** | The ID of the deal creator | [optional] diff --git a/docs/versions/v2/Model/ActivityRequestBody.md b/docs/versions/v2/Model/ActivityRequestBody.md index a3cdfaa..071aa31 100644 --- a/docs/versions/v2/Model/ActivityRequestBody.md +++ b/docs/versions/v2/Model/ActivityRequestBody.md @@ -16,7 +16,7 @@ Name | Type | Description | Notes **duration** | **string** | The duration of the activity | [optional] **busy** | **bool** | Whether the activity marks the assignee as busy or not in their calendar | [optional] **done** | **bool** | Whether the activity is marked as done or not | [optional] -**location** | [**\Pipedrive\versions\v2\Model\ActivityItemLocation**](ActivityItemLocation.md) | | [optional] +**location** | [**\Pipedrive\versions\v2\Model\ActivityRequestBodyLocation**](ActivityRequestBodyLocation.md) | | [optional] **participants** | [**\Pipedrive\versions\v2\Model\ActivityItemParticipants[]**](ActivityItemParticipants.md) | The participants of the activity. Use this to set the activity's person — a primary participant (`primary: true`) sets `person_id` on the activity. | [optional] **attendees** | [**\Pipedrive\versions\v2\Model\ActivityItemAttendees[]**](ActivityItemAttendees.md) | The attendees of the activity | [optional] **public_description** | **string** | The public description of the activity | [optional] diff --git a/docs/versions/v2/Model/ActivityRequestBodyLocation.md b/docs/versions/v2/Model/ActivityRequestBodyLocation.md new file mode 100644 index 0000000..34b898d --- /dev/null +++ b/docs/versions/v2/Model/ActivityRequestBodyLocation.md @@ -0,0 +1,18 @@ +# # ActivityRequestBodyLocation + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**value** | **string** | The full address of the activity | [optional] +**country** | **string** | Country of the activity | [optional] +**admin_area_level_1** | **string** | Admin area level 1 (e.g. state) of the activity | [optional] +**admin_area_level_2** | **string** | Admin area level 2 (e.g. county) of the activity | [optional] +**locality** | **string** | Locality (e.g. city) of the activity | [optional] +**sublocality** | **string** | Sublocality (e.g. neighborhood) of the activity | [optional] +**route** | **string** | Route (e.g. street) of the activity | [optional] +**street_number** | **string** | Street number of the activity | [optional] +**subpremise** | **string** | Subpremise (e.g. apartment/suite number) of the activity | [optional] +**postal_code** | **string** | Postal code of the activity | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/docs/versions/v2/Model/DealSearchItemItem.md b/docs/versions/v2/Model/DealSearchItemItem.md index 1e26713..0258d15 100644 --- a/docs/versions/v2/Model/DealSearchItemItem.md +++ b/docs/versions/v2/Model/DealSearchItemItem.md @@ -7,7 +7,7 @@ Name | Type | Description | Notes **id** | **int** | The ID of the deal | [optional] **type** | **string** | The type of the item | [optional] **title** | **string** | The title of the deal | [optional] -**value** | **int** | The value of the deal | [optional] +**value** | **float** | The value of the deal | [optional] **currency** | **string** | The currency of the deal | [optional] **status** | **string** | The status of the deal | [optional] **visible_to** | **int** | The visibility of the deal | [optional] diff --git a/docs/versions/v2/Model/ProductSearchItemItem.md b/docs/versions/v2/Model/ProductSearchItemItem.md index 791f20f..ca524a9 100644 --- a/docs/versions/v2/Model/ProductSearchItemItem.md +++ b/docs/versions/v2/Model/ProductSearchItemItem.md @@ -7,7 +7,7 @@ Name | Type | Description | Notes **id** | **int** | The ID of the product | [optional] **type** | **string** | The type of the item | [optional] **name** | **string** | The name of the product | [optional] -**code** | **int** | The code of the product | [optional] +**code** | **string** | The code of the product | [optional] **visible_to** | **int** | The visibility of the product | [optional] **owner** | [**\Pipedrive\versions\v2\Model\ProductSearchItemItemOwner**](ProductSearchItemItemOwner.md) | | [optional] **custom_fields** | **string[]** | The custom fields | [optional] diff --git a/docs/versions/v2/README.md b/docs/versions/v2/README.md index 6747607..b5d3da1 100644 --- a/docs/versions/v2/README.md +++ b/docs/versions/v2/README.md @@ -460,6 +460,7 @@ Class | Method | HTTP request | Description - [ActivityItemLocation](Model/ActivityItemLocation.md) - [ActivityItemParticipants](Model/ActivityItemParticipants.md) - [ActivityRequestBody](Model/ActivityRequestBody.md) + - [ActivityRequestBodyLocation](Model/ActivityRequestBodyLocation.md) - [AddAdditionalDiscountResponse](Model/AddAdditionalDiscountResponse.md) - [AddConvertDealToLeadResponse](Model/AddConvertDealToLeadResponse.md) - [AddConvertLeadToDealResponse](Model/AddConvertLeadToDealResponse.md) diff --git a/lib/versions/v1/Model/DealNonStrictModeFieldsCreatorUserId.php b/lib/versions/v1/Model/DealNonStrictModeFieldsCreatorUserId.php index 8b2e955..dfa5b5f 100644 --- a/lib/versions/v1/Model/DealNonStrictModeFieldsCreatorUserId.php +++ b/lib/versions/v1/Model/DealNonStrictModeFieldsCreatorUserId.php @@ -70,7 +70,7 @@ class DealNonStrictModeFieldsCreatorUserId implements ModelInterface, ArrayAcces 'id' => 'int', 'name' => 'string', 'email' => 'string', - 'has_pic' => 'bool', + 'has_pic' => 'int', 'pic_hash' => 'string', 'active_flag' => 'bool', 'value' => 'int' @@ -340,7 +340,7 @@ public function setEmail($email): self /** * Gets has_pic * - * @return bool|null + * @return int|null */ public function getHasPic() { @@ -350,7 +350,7 @@ public function getHasPic() /** * Sets has_pic * - * @param bool|null $has_pic If the creator has a picture or not + * @param int|null $has_pic If the creator has a picture or not * * @return self */ diff --git a/lib/versions/v2/Model/ActivityRequestBody.php b/lib/versions/v2/Model/ActivityRequestBody.php index 6d3833f..f35a477 100644 --- a/lib/versions/v2/Model/ActivityRequestBody.php +++ b/lib/versions/v2/Model/ActivityRequestBody.php @@ -78,7 +78,7 @@ class ActivityRequestBody implements ModelInterface, ArrayAccess, JsonSerializab 'duration' => 'string', 'busy' => 'bool', 'done' => 'bool', - 'location' => '\Pipedrive\versions\v2\Model\ActivityItemLocation', + 'location' => '\Pipedrive\versions\v2\Model\ActivityRequestBodyLocation', 'participants' => '\Pipedrive\versions\v2\Model\ActivityItemParticipants[]', 'attendees' => '\Pipedrive\versions\v2\Model\ActivityItemAttendees[]', 'public_description' => 'string', @@ -627,7 +627,7 @@ public function setDone($done): self /** * Gets location * - * @return \Pipedrive\versions\v2\Model\ActivityItemLocation|null + * @return \Pipedrive\versions\v2\Model\ActivityRequestBodyLocation|null */ public function getLocation() { @@ -637,7 +637,7 @@ public function getLocation() /** * Sets location * - * @param \Pipedrive\versions\v2\Model\ActivityItemLocation|null $location location + * @param \Pipedrive\versions\v2\Model\ActivityRequestBodyLocation|null $location location * * @return self */ diff --git a/lib/versions/v2/Model/ActivityRequestBodyLocation.php b/lib/versions/v2/Model/ActivityRequestBodyLocation.php new file mode 100644 index 0000000..93c4a7b --- /dev/null +++ b/lib/versions/v2/Model/ActivityRequestBodyLocation.php @@ -0,0 +1,616 @@ + + * @template TKey int|null + * @template TValue mixed|null + */ +class ActivityRequestBodyLocation implements ModelInterface, ArrayAccess, JsonSerializable +{ + use RawData; + + public const DISCRIMINATOR = null; + + /** + * The original name of the model. + * + * @var string + */ + protected static string $openAPIModelName = 'ActivityRequestBody_location'; + + /** + * Array of property to type mappings. Used for (de)serialization + * + * @var string[] + * @phpstan-var array + * @phpsalm-var array + */ + protected static array $openAPITypes = [ + 'value' => 'string', + 'country' => 'string', + 'admin_area_level_1' => 'string', + 'admin_area_level_2' => 'string', + 'locality' => 'string', + 'sublocality' => 'string', + 'route' => 'string', + 'street_number' => 'string', + 'subpremise' => 'string', + 'postal_code' => 'string' + ]; + + /** + * Array of property to format mappings. Used for (de)serialization + * + * @var string[] + * @phpstan-var array + * @psalm-var array + */ + protected static $openAPIFormats = [ + 'value' => null, + 'country' => null, + 'admin_area_level_1' => null, + 'admin_area_level_2' => null, + 'locality' => null, + 'sublocality' => null, + 'route' => null, + 'street_number' => null, + 'subpremise' => null, + 'postal_code' => null + ]; + + /** + * Array of property to type mappings. Used for (de)serialization + * + * @phpstan-return array + * @psalm-return array + * @return array + */ + public static function openAPITypes(): array + { + return self::$openAPITypes; + } + + /** + * Array of property to format mappings. Used for (de)serialization + * + * @phpstan-return array + * @psalm-return array + * @return array + */ + public static function openAPIFormats(): array + { + return self::$openAPIFormats; + } + + /** + * Array of attributes where the key is the local name, + * and the value is the original name + * + * @var string[] + */ + protected static $attributeMap = [ + 'value' => 'value', + 'country' => 'country', + 'admin_area_level_1' => 'admin_area_level_1', + 'admin_area_level_2' => 'admin_area_level_2', + 'locality' => 'locality', + 'sublocality' => 'sublocality', + 'route' => 'route', + 'street_number' => 'street_number', + 'subpremise' => 'subpremise', + 'postal_code' => 'postal_code' + ]; + + /** + * Array of attributes to setter functions (for deserialization of responses) + * + * @var string[] + */ + protected static $setters = [ + 'value' => 'setValue', + 'country' => 'setCountry', + 'admin_area_level_1' => 'setAdminAreaLevel1', + 'admin_area_level_2' => 'setAdminAreaLevel2', + 'locality' => 'setLocality', + 'sublocality' => 'setSublocality', + 'route' => 'setRoute', + 'street_number' => 'setStreetNumber', + 'subpremise' => 'setSubpremise', + 'postal_code' => 'setPostalCode' + ]; + + /** + * Array of attributes to getter functions (for serialization of requests) + * + * @var string[] + */ + protected static $getters = [ + 'value' => 'getValue', + 'country' => 'getCountry', + 'admin_area_level_1' => 'getAdminAreaLevel1', + 'admin_area_level_2' => 'getAdminAreaLevel2', + 'locality' => 'getLocality', + 'sublocality' => 'getSublocality', + 'route' => 'getRoute', + 'street_number' => 'getStreetNumber', + 'subpremise' => 'getSubpremise', + 'postal_code' => 'getPostalCode' + ]; + + /** + * Array of attributes where the key is the local name, + * and the value is the original name + * + * @phpstan-return array + * @psalm-return array + * @return array + */ + public static function attributeMap(): array + { + return self::$attributeMap; + } + + /** + * Array of attributes to setter functions (for deserialization of responses) + * + * @phpstan-return array + * @psalm-return array + * @return array + */ + public static function setters(): array + { + return self::$setters; + } + + /** + * Array of attributes to getter functions (for serialization of requests) + * + * @phpstan-return array + * @psalm-return array + * @return array + */ + public static function getters(): array + { + return self::$getters; + } + + /** + * The original name of the model. + * + * @return string + */ + public function getModelName(): string + { + return self::$openAPIModelName; + } + + + /** + * Associative array for storing property values + * + * @var array + * @phpstan-var array + * @psalm-var array + */ + protected array $container = []; + + /** + * Constructor + * + * @phpstan-param array|null $data + * @psalm-param array|null $data + * @param array|null $data Associated array of property values + * initializing the model + */ + public function __construct(?array $data = null) + { + $this->container['value'] = $data['value'] ?? null; + $this->container['country'] = $data['country'] ?? null; + $this->container['admin_area_level_1'] = $data['admin_area_level_1'] ?? null; + $this->container['admin_area_level_2'] = $data['admin_area_level_2'] ?? null; + $this->container['locality'] = $data['locality'] ?? null; + $this->container['sublocality'] = $data['sublocality'] ?? null; + $this->container['route'] = $data['route'] ?? null; + $this->container['street_number'] = $data['street_number'] ?? null; + $this->container['subpremise'] = $data['subpremise'] ?? null; + $this->container['postal_code'] = $data['postal_code'] ?? null; + } + + /** + * Show all the invalid properties with reasons. + * + * @return array invalid properties with reasons + * @phpstan-return array + * @psalm-return array + */ + public function listInvalidProperties(): array + { + $invalidProperties = []; + + return $invalidProperties; + } + + /** + * Validate all the properties in the model + * return true if all passed + * + * @return bool True if all properties are valid + */ + public function valid(): bool + { + return count($this->listInvalidProperties()) === 0; + } + + + /** + * Gets value + * + * @return string|null + */ + public function getValue() + { + return $this->container['value']; + } + + /** + * Sets value + * + * @param string|null $value The full address of the activity + * + * @return self + */ + public function setValue($value): self + { + $this->container['value'] = $value; + + return $this; + } + + /** + * Gets country + * + * @return string|null + */ + public function getCountry() + { + return $this->container['country']; + } + + /** + * Sets country + * + * @param string|null $country Country of the activity + * + * @return self + */ + public function setCountry($country): self + { + $this->container['country'] = $country; + + return $this; + } + + /** + * Gets admin_area_level_1 + * + * @return string|null + */ + public function getAdminAreaLevel1() + { + return $this->container['admin_area_level_1']; + } + + /** + * Sets admin_area_level_1 + * + * @param string|null $admin_area_level_1 Admin area level 1 (e.g. state) of the activity + * + * @return self + */ + public function setAdminAreaLevel1($admin_area_level_1): self + { + $this->container['admin_area_level_1'] = $admin_area_level_1; + + return $this; + } + + /** + * Gets admin_area_level_2 + * + * @return string|null + */ + public function getAdminAreaLevel2() + { + return $this->container['admin_area_level_2']; + } + + /** + * Sets admin_area_level_2 + * + * @param string|null $admin_area_level_2 Admin area level 2 (e.g. county) of the activity + * + * @return self + */ + public function setAdminAreaLevel2($admin_area_level_2): self + { + $this->container['admin_area_level_2'] = $admin_area_level_2; + + return $this; + } + + /** + * Gets locality + * + * @return string|null + */ + public function getLocality() + { + return $this->container['locality']; + } + + /** + * Sets locality + * + * @param string|null $locality Locality (e.g. city) of the activity + * + * @return self + */ + public function setLocality($locality): self + { + $this->container['locality'] = $locality; + + return $this; + } + + /** + * Gets sublocality + * + * @return string|null + */ + public function getSublocality() + { + return $this->container['sublocality']; + } + + /** + * Sets sublocality + * + * @param string|null $sublocality Sublocality (e.g. neighborhood) of the activity + * + * @return self + */ + public function setSublocality($sublocality): self + { + $this->container['sublocality'] = $sublocality; + + return $this; + } + + /** + * Gets route + * + * @return string|null + */ + public function getRoute() + { + return $this->container['route']; + } + + /** + * Sets route + * + * @param string|null $route Route (e.g. street) of the activity + * + * @return self + */ + public function setRoute($route): self + { + $this->container['route'] = $route; + + return $this; + } + + /** + * Gets street_number + * + * @return string|null + */ + public function getStreetNumber() + { + return $this->container['street_number']; + } + + /** + * Sets street_number + * + * @param string|null $street_number Street number of the activity + * + * @return self + */ + public function setStreetNumber($street_number): self + { + $this->container['street_number'] = $street_number; + + return $this; + } + + /** + * Gets subpremise + * + * @return string|null + */ + public function getSubpremise() + { + return $this->container['subpremise']; + } + + /** + * Sets subpremise + * + * @param string|null $subpremise Subpremise (e.g. apartment/suite number) of the activity + * + * @return self + */ + public function setSubpremise($subpremise): self + { + $this->container['subpremise'] = $subpremise; + + return $this; + } + + /** + * Gets postal_code + * + * @return string|null + */ + public function getPostalCode() + { + return $this->container['postal_code']; + } + + /** + * Sets postal_code + * + * @param string|null $postal_code Postal code of the activity + * + * @return self + */ + public function setPostalCode($postal_code): self + { + $this->container['postal_code'] = $postal_code; + + return $this; + } + /** + * Returns true if offset exists. False otherwise. + * + * @param integer $offset Offset + * + * @return boolean + */ + public function offsetExists($offset): bool + { + return isset($this->container[$offset]); + } + + /** + * Gets offset. + * + * @param integer $offset Offset + * + * @return mixed + */ + public function offsetGet($offset): mixed + { + return $this->container[$offset] ?? null; + } + + /** + * Sets value based on offset. + * + * @param int|null $offset Offset + * @param mixed $value Value to be set + * + * @return void + */ + public function offsetSet($offset, $value): void + { + if (is_null($offset)) { + $this->container[] = $value; + } else { + $this->container[$offset] = $value; + } + } + + /** + * Unsets offset. + * + * @param integer $offset Offset + * + * @return void + */ + public function offsetUnset($offset): void + { + unset($this->container[$offset]); + } + + /** + * Serializes the object to a value that can be serialized natively by json_encode(). + * @link https://www.php.net/manual/en/jsonserializable.jsonserialize.php + * + * @return mixed Returns data which can be serialized by json_encode(), which is a value + * of any type other than a resource. + */ + public function jsonSerialize(): mixed + { + return ObjectSerializer::sanitizeForSerialization($this); + } + + /** + * Gets the string presentation of the object + * + * @throws JsonException + * @return string + */ + public function __toString() + { + return json_encode( + ObjectSerializer::sanitizeForSerialization($this), + JSON_PRETTY_PRINT | JSON_THROW_ON_ERROR + ); + } + + /** + * Gets a header-safe presentation of the object + * + * @throws JsonException + * @return string + */ + public function toHeaderValue(): string + { + return json_encode(ObjectSerializer::sanitizeForSerialization($this), JSON_THROW_ON_ERROR); + } +} + + diff --git a/lib/versions/v2/Model/DealSearchItemItem.php b/lib/versions/v2/Model/DealSearchItemItem.php index 3b4a069..9d3a483 100644 --- a/lib/versions/v2/Model/DealSearchItemItem.php +++ b/lib/versions/v2/Model/DealSearchItemItem.php @@ -69,7 +69,7 @@ class DealSearchItemItem implements ModelInterface, ArrayAccess, JsonSerializabl 'id' => 'int', 'type' => 'string', 'title' => 'string', - 'value' => 'int', + 'value' => 'float', 'currency' => 'string', 'status' => 'string', 'visible_to' => 'int', @@ -381,7 +381,7 @@ public function setTitle($title): self /** * Gets value * - * @return int|null + * @return float|null */ public function getValue() { @@ -391,7 +391,7 @@ public function getValue() /** * Sets value * - * @param int|null $value The value of the deal + * @param float|null $value The value of the deal * * @return self */ diff --git a/lib/versions/v2/Model/ProductSearchItemItem.php b/lib/versions/v2/Model/ProductSearchItemItem.php index 866eb35..064ac99 100644 --- a/lib/versions/v2/Model/ProductSearchItemItem.php +++ b/lib/versions/v2/Model/ProductSearchItemItem.php @@ -69,7 +69,7 @@ class ProductSearchItemItem implements ModelInterface, ArrayAccess, JsonSerializ 'id' => 'int', 'type' => 'string', 'name' => 'string', - 'code' => 'int', + 'code' => 'string', 'visible_to' => 'int', 'owner' => '\Pipedrive\versions\v2\Model\ProductSearchItemItemOwner', 'custom_fields' => 'string[]' @@ -339,7 +339,7 @@ public function setName($name): self /** * Gets code * - * @return int|null + * @return string|null */ public function getCode() { @@ -349,7 +349,7 @@ public function getCode() /** * Sets code * - * @param int|null $code The code of the product + * @param string|null $code The code of the product * * @return self */