diff --git a/app/src/DTO/RestaurantListDTO.php b/app/src/DTO/RestaurantListDTO.php
deleted file mode 100644
index 2cd51f0dd3640035d37772439fa767e121b4c1a0..0000000000000000000000000000000000000000
--- a/app/src/DTO/RestaurantListDTO.php
+++ /dev/null
@@ -1,10 +0,0 @@
-<?php
-
-namespace App\DTO;
-
-class RestaurantListDTO
-{
-    private $pagination;
-    private $list;
-    private $filterVariants;
-}
\ No newline at end of file
diff --git a/app/src/DTO/RestaurantListingElementDTO.php b/app/src/DTO/RestaurantListingElementDTO.php
deleted file mode 100644
index c6d6a7ef66b76ab26904f6e6f0cf88b09728fca1..0000000000000000000000000000000000000000
--- a/app/src/DTO/RestaurantListingElementDTO.php
+++ /dev/null
@@ -1,15 +0,0 @@
-<?php
-
-namespace App\DTO;
-
-class RestaurantListingElementDTO
-{
-    private $id;
-    private $name;
-    private $code;
-    private $type;
-    private $check;
-    private $image;
-    private $detailLink;
-
-}
\ No newline at end of file
diff --git a/app/src/Dto/DtoCollection.php b/app/src/Dto/DtoCollection.php
new file mode 100644
index 0000000000000000000000000000000000000000..0e6bb085a674d54466a8bb99b99c19e74429eb0f
--- /dev/null
+++ b/app/src/Dto/DtoCollection.php
@@ -0,0 +1,29 @@
+<?php
+
+namespace App\Dto;
+
+use JsonSerializable;
+use Ramsey\Collection\AbstractCollection;
+
+/** Переопределенная коллекция, что бы можно было сериалайзить коллекции */
+class DtoCollection extends AbstractCollection implements JsonSerializable
+{
+    public function __construct(
+        private readonly string $collectionType,
+        array $data = []
+    ) {
+        parent::__construct($data);
+    }
+
+    /** @return string */
+    public function getType(): string
+    {
+        return $this->collectionType;
+    }
+
+    /** Метод для сериализации коллекции в JSON */
+    public function jsonSerialize(): array
+    {
+        return $this->data;
+    }
+}
diff --git a/app/src/Dto/DtoInterface.php b/app/src/Dto/DtoInterface.php
new file mode 100644
index 0000000000000000000000000000000000000000..fc7960897c180d4c35d3a1eef1731a8d87bc38e2
--- /dev/null
+++ b/app/src/Dto/DtoInterface.php
@@ -0,0 +1,6 @@
+<?php
+
+namespace App\Dto;
+
+/** Инетерфейс, необходимый для реализации протота */
+interface DtoInterface {}
diff --git a/app/src/Dto/ErrorDto.php b/app/src/Dto/ErrorDto.php
new file mode 100644
index 0000000000000000000000000000000000000000..8ac836d82f3c244997bf3f5e4e64bc8a0bf92109
--- /dev/null
+++ b/app/src/Dto/ErrorDto.php
@@ -0,0 +1,12 @@
+<?php
+
+namespace App\Dto;
+
+class ErrorDto implements DtoInterface
+{
+    public string $status;
+
+    public string $message;
+
+    public string $code;
+}
diff --git a/app/src/Dto/FileDto.php b/app/src/Dto/FileDto.php
new file mode 100644
index 0000000000000000000000000000000000000000..b480f1e5903edc9b97cde60495c2813531776397
--- /dev/null
+++ b/app/src/Dto/FileDto.php
@@ -0,0 +1,18 @@
+<?php
+
+namespace App\Dto;
+
+class FileDto implements DtoInterface
+{
+    public string $id;
+
+    public string $name;
+
+    public string $description;
+
+    public int $size;
+
+    public string $type;
+
+    public string $url;
+}
diff --git a/app/src/Dto/KitchenTypeDto.php b/app/src/Dto/KitchenTypeDto.php
new file mode 100644
index 0000000000000000000000000000000000000000..e7cf75bc8efbf4db6e2e2da62cfddea0b2fa045c
--- /dev/null
+++ b/app/src/Dto/KitchenTypeDto.php
@@ -0,0 +1,12 @@
+<?php
+
+namespace App\Dto;
+
+class KitchenTypeDto implements DtoInterface
+{
+    public string $id;
+
+    public string $name;
+
+    public string $code;
+}
diff --git a/app/src/Dto/NewsCategoryDto.php b/app/src/Dto/NewsCategoryDto.php
new file mode 100644
index 0000000000000000000000000000000000000000..8f1b7f84c0fd1c221f04a879bf061cf0362887e7
--- /dev/null
+++ b/app/src/Dto/NewsCategoryDto.php
@@ -0,0 +1,12 @@
+<?php
+
+namespace App\Dto;
+
+class NewsCategoryDto implements DtoInterface
+{
+    public string $id;
+
+    public string $name;
+
+    public string $code;
+}
diff --git a/app/src/Dto/NewsDetailElementDto.php b/app/src/Dto/NewsDetailElementDto.php
new file mode 100644
index 0000000000000000000000000000000000000000..224b9ccec2b07c554fe7409c51abf0448671b864
--- /dev/null
+++ b/app/src/Dto/NewsDetailElementDto.php
@@ -0,0 +1,19 @@
+<?php
+
+namespace App\Dto;
+
+class NewsDetailElementDto implements DtoInterface
+{
+    public string $id;
+
+    public string $name;
+
+    public string $description;
+
+    public ?string $text;
+
+    /** @var FileDto Преаью */
+    public ?FileDto $image;
+
+    public string $create_at;
+}
diff --git a/app/src/Dto/NewsFilterVariants.php b/app/src/Dto/NewsFilterVariants.php
new file mode 100644
index 0000000000000000000000000000000000000000..b1d55e4d30c991f4d6cc3bcb27d2d6888419e2da
--- /dev/null
+++ b/app/src/Dto/NewsFilterVariants.php
@@ -0,0 +1,9 @@
+<?php
+
+namespace App\Dto;
+
+class NewsFilterVariants implements DtoInterface
+{
+    /** @var DtoCollection<NewsCategoryDto>  */
+    public DtoCollection $category;
+}
diff --git a/app/src/Dto/NewsListDto.php b/app/src/Dto/NewsListDto.php
new file mode 100644
index 0000000000000000000000000000000000000000..93928bfbdb381f1d12518b947e3ea74c5bcc9927
--- /dev/null
+++ b/app/src/Dto/NewsListDto.php
@@ -0,0 +1,13 @@
+<?php
+
+namespace App\Dto;
+
+class NewsListDto implements DtoInterface
+{
+    public PaginationDto $pagination;
+
+    /** @var DtoCollection<NewsListingElementDto>  */
+    public DtoCollection $list;
+
+    public NewsFilterVariants $filterVariants;
+}
diff --git a/app/src/Dto/NewsListingElementDto.php b/app/src/Dto/NewsListingElementDto.php
new file mode 100644
index 0000000000000000000000000000000000000000..ef41fea34be91b9e4a903b794865e1225e86c46a
--- /dev/null
+++ b/app/src/Dto/NewsListingElementDto.php
@@ -0,0 +1,19 @@
+<?php
+
+namespace App\Dto;
+
+class NewsListingElementDto implements DtoInterface
+{
+    public string $id;
+
+    public string $name;
+
+    public ?string $description;
+
+    /** @var ?FileDto Превью */
+    public ?FileDto $image;
+
+    public string $create_at;
+
+    public string $detail_link;
+}
diff --git a/app/src/Dto/PaginationDto.php b/app/src/Dto/PaginationDto.php
new file mode 100644
index 0000000000000000000000000000000000000000..7bd5a5c0cd90ac1288849b08e30f5b699a5ca05f
--- /dev/null
+++ b/app/src/Dto/PaginationDto.php
@@ -0,0 +1,10 @@
+<?php
+
+namespace App\Dto;
+
+class PaginationDto implements DtoInterface
+{
+    public int $current_page = 1;
+    public int $pages;
+    public int $page_size;
+}
diff --git a/app/src/Dto/RestaurantDetailElementDto.php b/app/src/Dto/RestaurantDetailElementDto.php
new file mode 100644
index 0000000000000000000000000000000000000000..13f29c946273c32ab0162eb4c2e14b697336b4d6
--- /dev/null
+++ b/app/src/Dto/RestaurantDetailElementDto.php
@@ -0,0 +1,45 @@
+<?php
+
+namespace App\Dto;
+
+use Ramsey\Collection\Collection;
+
+class RestaurantDetailElementDto implements DtoInterface
+{
+    public string $id;
+
+    public string $name;
+
+    public string $code;
+
+    public string $coordinates;
+
+    public RestaurantTypeDto $type;
+
+    public ?string $check;
+
+    public ?string $check_info;
+
+    /** @var DtoCollection<KitchenTypeDto>|null  */
+    public ?DtoCollection $kitchen;
+
+    /** @var DtoCollection<string>|null */
+    public ?DtoCollection $phone;
+
+    /** @var DtoCollection<string>|null */
+    public ?DtoCollection $email;
+
+    /** @var DtoCollection<string>|null */
+    public ?DtoCollection $address;
+
+    /** @var DtoCollection<TagDto>|null */
+    public ?DtoCollection $tags;
+
+    public ?string $site;
+
+    /** @var FileDto|null Превью фото */
+    public ?FileDto $image;
+
+    /** @var DtoCollection<FileDto>|null */
+    public ?DtoCollection $gallery;
+}
diff --git a/app/src/Dto/RestaurantFilterVariantsDto.php b/app/src/Dto/RestaurantFilterVariantsDto.php
new file mode 100644
index 0000000000000000000000000000000000000000..612cd5c69cd7b8d3ac32f1d6bd8d7e7bdee6875f
--- /dev/null
+++ b/app/src/Dto/RestaurantFilterVariantsDto.php
@@ -0,0 +1,14 @@
+<?php
+
+namespace App\Dto;
+
+use Ramsey\Collection\Collection;
+
+class RestaurantFilterVariantsDto implements DtoInterface
+{
+    /** @var DtoCollection<RestaurantTypeDto>  */
+    public DtoCollection $type;
+
+    /** @var DtoCollection<KitchenTypeDto>  */
+    public DtoCollection $kitchen;
+}
diff --git a/app/src/Dto/RestaurantListDto.php b/app/src/Dto/RestaurantListDto.php
new file mode 100644
index 0000000000000000000000000000000000000000..87c6e61083143fc67cd8a3f00711ad1c22a18653
--- /dev/null
+++ b/app/src/Dto/RestaurantListDto.php
@@ -0,0 +1,15 @@
+<?php
+
+namespace App\Dto;
+
+use Ramsey\Collection\Collection;
+
+class RestaurantListDto implements DtoInterface
+{
+    public PaginationDto $pagination;
+
+    /** @var DtoCollection<RestaurantListingElementDto>  */
+    public DtoCollection $list;
+
+    public RestaurantFilterVariantsDto $filterVariants;
+}
diff --git a/app/src/Dto/RestaurantListingElementDto.php b/app/src/Dto/RestaurantListingElementDto.php
new file mode 100644
index 0000000000000000000000000000000000000000..3b575daa4894394e0ee37ff4f3d1cf345ab944d9
--- /dev/null
+++ b/app/src/Dto/RestaurantListingElementDto.php
@@ -0,0 +1,20 @@
+<?php
+
+namespace App\Dto;
+
+class RestaurantListingElementDto implements DtoInterface
+{
+    public string $id;
+
+    public string $name;
+
+    public string $code;
+
+    public RestaurantTypeDto $type;
+
+    public ?string $check;
+
+    public ?FileDto $image;
+
+    public string $detail_link;
+}
diff --git a/app/src/Dto/RestaurantTypeDto.php b/app/src/Dto/RestaurantTypeDto.php
new file mode 100644
index 0000000000000000000000000000000000000000..233bbc7d7ee48b21c3f311a985b72a0c166601e7
--- /dev/null
+++ b/app/src/Dto/RestaurantTypeDto.php
@@ -0,0 +1,12 @@
+<?php
+
+namespace App\Dto;
+
+class RestaurantTypeDto implements DtoInterface
+{
+    public string $id;
+
+    public string $name;
+
+    public string $code;
+}
diff --git a/app/src/Dto/TagDto.php b/app/src/Dto/TagDto.php
new file mode 100644
index 0000000000000000000000000000000000000000..42dee2b9d96b142348e5634276fee9f8e4edadf5
--- /dev/null
+++ b/app/src/Dto/TagDto.php
@@ -0,0 +1,11 @@
+<?php
+
+namespace App\Dto;
+
+class TagDto implements DtoInterface
+{
+    public string $name;
+
+    /** @var DtoCollection<string>  */
+    public DtoCollection $list;
+}
diff --git a/app/src/Dto/ValidateErrorDto.php b/app/src/Dto/ValidateErrorDto.php
new file mode 100644
index 0000000000000000000000000000000000000000..307b43e288e2f6b75b1997338183c02a2d4f1739
--- /dev/null
+++ b/app/src/Dto/ValidateErrorDto.php
@@ -0,0 +1,5 @@
+<?php
+
+namespace App\Dto;
+
+class ValidateErrorDto extends ErrorDto {}
diff --git a/app/src/Entity/File.php b/app/src/Entity/File.php
index c123f4113ea86543802537c2f50e2eb926dd9ec3..751cb27e755245e45e1864a4d7619871e37ac453 100644
--- a/app/src/Entity/File.php
+++ b/app/src/Entity/File.php
@@ -2,6 +2,8 @@
 
 namespace App\Entity;
 
+use App\Dto\DtoInterface;
+use App\Dto\FileDto;
 use App\Repository\FileRepository;
 use Doctrine\Common\Collections\ArrayCollection;
 use Doctrine\Common\Collections\Collection;
@@ -9,7 +11,7 @@ use Doctrine\DBAL\Types\Types;
 use Doctrine\ORM\Mapping as ORM;
 
 #[ORM\Entity(repositoryClass: FileRepository::class)]
-class File
+class File implements PrototypeDto
 {
     #[ORM\Id]
     #[ORM\Column(type: Types::GUID)]
@@ -288,4 +290,19 @@ class File
 
         return $this;
     }
+
+    /** @inheritDoc */
+    public function getDto(): FileDto
+    {
+        $dto =  new FileDto();
+
+        $dto->id = $this->getId();
+        $dto->name = $this->getName();
+        $dto->description = $this->getDescription();
+        $dto->size = $this->getSize();
+        $dto->type = $this->getType();
+        $dto->url = $this->getUrl();
+
+        return $dto;
+    }
 }
diff --git a/app/src/Entity/Kitchens.php b/app/src/Entity/Kitchens.php
index c5dc4aa9cf3b829d9634470596ca3e33064f51ef..d45bf0a141cbb6d2ef242c80c114be1ab0f48b5c 100644
--- a/app/src/Entity/Kitchens.php
+++ b/app/src/Entity/Kitchens.php
@@ -2,6 +2,8 @@
 
 namespace App\Entity;
 
+use App\Dto\DtoInterface;
+use App\Dto\KitchenTypeDto;
 use App\Repository\KitchensRepository;
 use Doctrine\Common\Collections\ArrayCollection;
 use Doctrine\Common\Collections\Collection;
@@ -9,7 +11,7 @@ use Doctrine\DBAL\Types\Types;
 use Doctrine\ORM\Mapping as ORM;
 
 #[ORM\Entity(repositoryClass: KitchensRepository::class)]
-class Kitchens
+class Kitchens implements PrototypeDto
 {
     #[ORM\Id]
     #[ORM\Column(type: Types::GUID)]
@@ -94,4 +96,16 @@ class Kitchens
 
         return $this;
     }
+
+    /** @inheritDoc */
+    public function getDto(): DtoInterface
+    {
+        $dto = new KitchenTypeDto();
+
+        $dto->id = $this->getId();
+        $dto->name = $this->getName();
+        $dto->code = $this->getCode();
+
+        return $dto;
+    }
 }
diff --git a/app/src/Entity/News.php b/app/src/Entity/News.php
index 5011c6dfd2a9e2fe32f2bd4e0bf8a1791a490257..e84bdc8d42315e52952a2b6d8d4e99e0ce7fd4ae 100644
--- a/app/src/Entity/News.php
+++ b/app/src/Entity/News.php
@@ -2,6 +2,9 @@
 
 namespace App\Entity;
 
+use App\Dto\DtoInterface;
+use App\Dto\NewsDetailElementDto;
+use App\Dto\NewsListingElementDto;
 use App\Repository\NewsRepository;
 use Doctrine\Common\Collections\ArrayCollection;
 use Doctrine\Common\Collections\Collection;
@@ -9,7 +12,7 @@ use Doctrine\DBAL\Types\Types;
 use Doctrine\ORM\Mapping as ORM;
 
 #[ORM\Entity(repositoryClass: NewsRepository::class)]
-class News
+class News implements PrototypeElementDto
 {
     #[ORM\Id]
     #[ORM\Column(type: Types::GUID)]
@@ -242,4 +245,34 @@ class News
 
         return $this;
     }
+
+    /** @inheritDoc */
+    public function getDto(): DtoInterface
+    {
+        $entity = new NewsListingElementDto();
+
+        $entity->id = $this->getId();
+        $entity->name = $this->getName();
+        $entity->description = $this->getDetailText();
+        $entity->image = $this->getPreviewImage()?->getDto();
+        $entity->create_at = $this->getCreatedAt();
+        $entity->detail_link = "api/v1/restaurants/" . $this->getId();
+
+        return $entity;
+    }
+
+    /** @inheritDoc */
+    public function getExtendedDto(): DtoInterface
+    {
+        $entity = new NewsDetailElementDto();
+
+        $entity->id = $this->getId();
+        $entity->name = $this->getName();
+        $entity->description = $this->getPreviewText();
+        $entity->text = $this->getDetailText();
+        $entity->image = $this->getPreviewImage()?->getDto();
+        $entity->create_at = $this->getCreatedAt();
+
+        return $entity;
+    }
 }
diff --git a/app/src/Entity/NewsCategories.php b/app/src/Entity/NewsCategories.php
index fb41930d7d14886d07bc11af57b94457d2892307..0f77fd1c9a1af2120b56faefede1c795ec1f524b 100644
--- a/app/src/Entity/NewsCategories.php
+++ b/app/src/Entity/NewsCategories.php
@@ -2,6 +2,8 @@
 
 namespace App\Entity;
 
+use App\Dto\DtoInterface;
+use App\Dto\NewsCategoryDto;
 use App\Repository\NewsCategoriesRepository;
 use Doctrine\Common\Collections\ArrayCollection;
 use Doctrine\Common\Collections\Collection;
@@ -9,7 +11,7 @@ use Doctrine\DBAL\Types\Types;
 use Doctrine\ORM\Mapping as ORM;
 
 #[ORM\Entity(repositoryClass: NewsCategoriesRepository::class)]
-class NewsCategories
+class NewsCategories implements PrototypeDto
 {
     #[ORM\Id]
     #[ORM\Column(type: Types::GUID)]
@@ -94,4 +96,16 @@ class NewsCategories
 
         return $this;
     }
+
+    /** @inheritDoc */
+    public function getDto(): DtoInterface
+    {
+        $dto = new NewsCategoryDto();
+
+        $dto->id = $this->getId();
+        $dto->name = $this->getName();
+        $dto->code = $this->getCode();
+
+        return $dto;
+    }
 }
diff --git a/app/src/Entity/NewsType.php b/app/src/Entity/NewsType.php
index 493fff06d1e3ca16ce55cced003555084084d8d7..8331456cece38db0ea9e0e8233fe9353f1ead6ca 100644
--- a/app/src/Entity/NewsType.php
+++ b/app/src/Entity/NewsType.php
@@ -2,6 +2,7 @@
 
 namespace App\Entity;
 
+use App\Dto\DtoInterface;
 use App\Repository\NewsTypeRepository;
 use Doctrine\Common\Collections\ArrayCollection;
 use Doctrine\Common\Collections\Collection;
diff --git a/app/src/Entity/PrototypeDto.php b/app/src/Entity/PrototypeDto.php
new file mode 100644
index 0000000000000000000000000000000000000000..19c882216798008c141336bfa2947b8544673c13
--- /dev/null
+++ b/app/src/Entity/PrototypeDto.php
@@ -0,0 +1,11 @@
+<?php
+
+namespace App\Entity;
+
+use App\Dto\DtoInterface;
+/** Интерфейс прототипа */
+interface PrototypeDto
+{
+    /** Породить dto из сущности */
+    public function getDto(): DtoInterface;
+}
diff --git a/app/src/Entity/PrototypeElementDto.php b/app/src/Entity/PrototypeElementDto.php
new file mode 100644
index 0000000000000000000000000000000000000000..7c6a79f835a4fe1cfaa942dcac02009662822e1b
--- /dev/null
+++ b/app/src/Entity/PrototypeElementDto.php
@@ -0,0 +1,14 @@
+<?php
+
+namespace App\Entity;
+
+use App\Dto\DtoInterface;
+
+interface PrototypeElementDto
+{
+    /** Породить dto элемента листинга */
+    public function getDto(): DtoInterface;
+
+    /** Породить dto детальной информации */
+    public function getExtendedDto(): DtoInterface;
+}
diff --git a/app/src/Entity/RestaurantTypes.php b/app/src/Entity/RestaurantTypes.php
index 12d132e252f67bf2c37f1da5beb34842e556d3c4..59f87c8aa5dd62db5e7cae0719f7b0ec9f78cb45 100644
--- a/app/src/Entity/RestaurantTypes.php
+++ b/app/src/Entity/RestaurantTypes.php
@@ -2,6 +2,8 @@
 
 namespace App\Entity;
 
+use App\Dto\DtoInterface;
+use App\Dto\RestaurantTypeDto;
 use App\Repository\RestaurantTypesRepository;
 use Doctrine\Common\Collections\ArrayCollection;
 use Doctrine\Common\Collections\Collection;
@@ -10,7 +12,7 @@ use Doctrine\ORM\Mapping as ORM;
 use Doctrine\ORM\Mapping\GeneratedValue;
 
 #[ORM\Entity(repositoryClass: RestaurantTypesRepository::class)]
-class RestaurantTypes
+class RestaurantTypes implements PrototypeDto
 {
     #[ORM\Id]
     #[ORM\Column(type: Types::GUID)]
@@ -98,4 +100,15 @@ class RestaurantTypes
 
         return $this;
     }
+
+    public function getDto(): DtoInterface
+    {
+        $dto = new RestaurantTypeDto();
+
+        $dto->id = $this->getId();
+        $dto->name = $this->getName();
+        $dto->code = $this->getCode();
+
+        return $dto;
+    }
 }
diff --git a/app/src/Entity/Restaurants.php b/app/src/Entity/Restaurants.php
index 8f3380d12c8a4a2a3e3b447886bb80a41993f278..ec816f748d774a708cbb8b8b11298333ca38627c 100644
--- a/app/src/Entity/Restaurants.php
+++ b/app/src/Entity/Restaurants.php
@@ -2,14 +2,22 @@
 
 namespace App\Entity;
 
+use App\Dto\DtoCollection;
+use App\Dto\DtoInterface;
+use App\Dto\FileDto;
+use App\Dto\KitchenTypeDto;
+use App\Dto\RestaurantDetailElementDto;
+use App\Dto\RestaurantListingElementDto;
+use App\Dto\TagDto;
 use App\Repository\RestaurantsRepository;
 use Doctrine\Common\Collections\ArrayCollection;
 use Doctrine\Common\Collections\Collection;
+use Ramsey\Collection\Collection as RamseyCollection;
 use Doctrine\DBAL\Types\Types;
 use Doctrine\ORM\Mapping as ORM;
 
 #[ORM\Entity(repositoryClass: RestaurantsRepository::class)]
-class Restaurants
+class Restaurants implements PrototypeElementDto
 {
     #[ORM\Id]
     #[ORM\Column(type: Types::GUID)]
@@ -392,4 +400,114 @@ class Restaurants
 
         return $this;
     }
+
+    /** @inheritDoc */
+    public function getDto(): DtoInterface
+    {
+        $dto = new RestaurantListingElementDto();
+
+        $dto->id = $this->getId();
+        $dto->name = $this->getName();
+        $dto->code = $this->getCode();
+        $dto->type = $this->getType()->getDto();
+        $dto->check = $this->getReceipt();
+        $dto->image = $this->getPreviewImage()?->getDto();
+        $dto->detail_link = 'api/v1/restaurants/' . $this->getId();
+
+        return $dto;
+    }
+
+    /** @inheritDoc
+     * @throws \JsonException Если получен неправильный json с бд
+     */
+    public function getExtendedDto(): DtoInterface
+    {
+        $dto = new RestaurantDetailElementDto();
+
+        $dto->id = $this->getId();
+        $dto->name = $this->getName();
+        $dto->code = $this->getCode();
+        $dto->coordinates = $this->getCoordinates();
+        $dto->type = $this->getType()->getDto();
+        $dto->check = $this->getReceipt();
+        $dto->check_info = $this->getReceiptInfo();
+
+        $dto->kitchen = new DtoCollection(
+            KitchenTypeDto::class,
+            $this->getKitchens()
+                ->map(function(Kitchens $kitchen) {
+                return $kitchen->getDto();
+                })
+                ->toArray()
+        );
+
+        $dto->phone = $this->decode($this->getPhone(), 'phone');
+        $dto->email = $this->decode($this->getEmail(), 'email');
+        $dto->address = $this->decode($this->getAddress(), 'address');
+        $dto->tags = $this->decodeTags($this->getTags());
+        $dto->site = $this->getSite();
+        $dto->image = $this->getPreviewImage()?->getDto();
+        $dto->gallery = new DtoCollection(
+            FileDto::class,
+            $this->getGallery()
+                ->map(function(File $file) {
+                    return $file->getDto();
+                })
+                ->toArray()
+        );
+
+        return $dto;
+    }
+
+    /**
+     * @throws \JsonException Если получен неправильный json с бд
+     * @return ?DtoCollection<string>
+     */
+    private function decode(?string $jsonString, string $name): ?DtoCollection
+    {
+        if ($jsonString === null) {
+            return null;
+        }
+        return new DtoCollection(
+            'string|null',
+            json_decode(
+                $jsonString,
+                true,
+                512,
+                JSON_THROW_ON_ERROR
+            )[$name]
+        );
+    }
+
+    private function decodeTags(?string $jsonString): ?DtoCollection
+    {
+        if ($jsonString === null) {
+            return null;
+        }
+
+        $jsonCollection = new RamseyCollection(
+            'array',
+            json_decode(
+                $jsonString,
+                true,
+                512,
+                JSON_THROW_ON_ERROR
+            )
+        );
+
+        return new DtoCollection(
+            TagDto::class,
+            $jsonCollection
+                ->map(function(array $tag) {
+                    $tagDto = new TagDto();
+                    $tagDto->name = key($tag);
+                    $tagDto->list = new DtoCollection(
+                    'string',
+                    $tag
+                    );
+                    return $tagDto;
+                })
+                ->toArray()
+        );
+    }
 }