From 6e471c382f8526c9361f35166755a640e2bdd09c Mon Sep 17 00:00:00 2001 From: Maxim Harder Date: Mon, 4 Aug 2025 14:56:59 +0200 Subject: [PATCH] =?UTF-8?q?=E2=99=BB=EF=B8=8F=20UPDATE=20=D0=9E=D0=B1?= =?UTF-8?q?=D0=BD=D0=BE=D0=B2=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=B4=D0=BE?= =?UTF-8?q?=D0=BA=D1=83=D0=BC=D0=B5=D0=BD=D1=82=D0=B0=D1=86=D0=B8=D0=B8=20?= =?UTF-8?q?=D0=B4=D0=BB=D1=8F=20KinopoiskDev=20=D0=B1=D0=B8=D0=B1=D0=BB?= =?UTF-8?q?=D0=B8=D0=BE=D1=82=D0=B5=D0=BA=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Детальное описание: - Обновлены ссылки на официальный API kinopoisk.dev и неофициальный API kinopoiskapiunofficial.tech - Исправлена опечатка в описании поддержки для NotKinopoiskPHP (было "EMail", исправлено на "Email") - Обновлены примеры использования библиотеки KinopoiskDev, заменены устаревшие классы на актуальные - Добавлена навигация для всех разделов документации, отсортированная в алфавитном порядке Данные изменения направлены на улучшение актуальности и читаемости документации для KinopoiskDev библиотеки. --- docs/dev/kinopoiskdev/Attributes/.nav.yml | 6 +- docs/dev/kinopoiskdev/Contracts/.nav.yml | 5 +- docs/dev/kinopoiskdev/Enums/.nav.yml | 17 +- docs/dev/kinopoiskdev/Exceptions/.nav.yml | 6 +- docs/dev/kinopoiskdev/Filter/.nav.yml | 11 +- docs/dev/kinopoiskdev/Http/.nav.yml | 11 +- docs/dev/kinopoiskdev/README.md | 312 ++++++++++-------- docs/dev/kinopoiskdev/Responses/Api/.nav.yml | 17 +- .../kinopoiskdev/Responses/Errors/.nav.yml | 6 +- .../kinopoiskdev/notkinopoiskphp-compare.md | 12 +- docs/dev/notkinopoiskphp/.nav.yml | 3 +- 11 files changed, 202 insertions(+), 204 deletions(-) diff --git a/docs/dev/kinopoiskdev/Attributes/.nav.yml b/docs/dev/kinopoiskdev/Attributes/.nav.yml index 559a2ab..5a99d26 100644 --- a/docs/dev/kinopoiskdev/Attributes/.nav.yml +++ b/docs/dev/kinopoiskdev/Attributes/.nav.yml @@ -1,5 +1,5 @@ title: Атрибуты nav: - - ApiField: ApiField.md - - Sensitive: Sensitive.md - - Validation: Validation.md \ No newline at end of file + - "*" +sort: + type: alphabetical diff --git a/docs/dev/kinopoiskdev/Contracts/.nav.yml b/docs/dev/kinopoiskdev/Contracts/.nav.yml index 75e7f35..70fbf78 100644 --- a/docs/dev/kinopoiskdev/Contracts/.nav.yml +++ b/docs/dev/kinopoiskdev/Contracts/.nav.yml @@ -1,4 +1,5 @@ title: Контракты nav: - - CacheInterface: CacheInterface.md - - LoggerInterface: LoggerInterface.md \ No newline at end of file + - "*" +sort: + type: alphabetical diff --git a/docs/dev/kinopoiskdev/Enums/.nav.yml b/docs/dev/kinopoiskdev/Enums/.nav.yml index 0cec844..297e0f7 100644 --- a/docs/dev/kinopoiskdev/Enums/.nav.yml +++ b/docs/dev/kinopoiskdev/Enums/.nav.yml @@ -1,16 +1,5 @@ title: Перечисления nav: - - FilterField: FilterField.md - - FilterOperator: FilterOperator.md - - HttpStatusCode: HttpStatusCode.md - - ImageType: ImageType.md - - ListCategory: ListCategory.md - - MovieStatus: MovieStatus.md - - MovieType: MovieType.md - - PersonProfession: PersonProfession.md - - PersonSex: PersonSex.md - - RatingMpaa: RatingMpaa.md - - ReviewType: ReviewType.md - - SortDirection: SortDirection.md - - SortField: SortField.md - - StudioType: StudioType.md \ No newline at end of file + - "*" +sort: + type: alphabetical diff --git a/docs/dev/kinopoiskdev/Exceptions/.nav.yml b/docs/dev/kinopoiskdev/Exceptions/.nav.yml index 7b41a2b..532df33 100644 --- a/docs/dev/kinopoiskdev/Exceptions/.nav.yml +++ b/docs/dev/kinopoiskdev/Exceptions/.nav.yml @@ -1,5 +1,5 @@ title: Исключения nav: - - KinopoiskDevException: KinopoiskDevException.md - - KinopoiskResponseException: KinopoiskResponseException.md - - ValidationException: ValidationException.md \ No newline at end of file + - "*" +sort: + type: alphabetical diff --git a/docs/dev/kinopoiskdev/Filter/.nav.yml b/docs/dev/kinopoiskdev/Filter/.nav.yml index ce98d92..f9d0742 100644 --- a/docs/dev/kinopoiskdev/Filter/.nav.yml +++ b/docs/dev/kinopoiskdev/Filter/.nav.yml @@ -1,10 +1,5 @@ title: Фильтры nav: - - ImageSearchFilter: ImageSearchFilter.md - - KeywordSearchFilter: KeywordSearchFilter.md - - MovieSearchFilter: MovieSearchFilter.md - - PersonSearchFilter: PersonSearchFilter.md - - ReviewSearchFilter: ReviewSearchFilter.md - - SeasonSearchFilter: SeasonSearchFilter.md - - SortCriteria: SortCriteria.md - - StudioSearchFilter: StudioSearchFilter.md \ No newline at end of file + - "*" +sort: + type: alphabetical diff --git a/docs/dev/kinopoiskdev/Http/.nav.yml b/docs/dev/kinopoiskdev/Http/.nav.yml index 4c827f5..9e398f4 100644 --- a/docs/dev/kinopoiskdev/Http/.nav.yml +++ b/docs/dev/kinopoiskdev/Http/.nav.yml @@ -1,10 +1,5 @@ title: HTTP запросы nav: - - ImageRequests: ImageRequests.md - - KeywordRequests: KeywordRequests.md - - ListRequests: ListRequests.md - - MovieRequests: MovieRequests.md - - PersonRequests: PersonRequests.md - - ReviewRequests: ReviewRequests.md - - SeasonRequests: SeasonRequests.md - - StudioRequests: StudioRequests.md \ No newline at end of file + - "*" +sort: + type: alphabetical diff --git a/docs/dev/kinopoiskdev/README.md b/docs/dev/kinopoiskdev/README.md index 03bdc2e..9535b7e 100644 --- a/docs/dev/kinopoiskdev/README.md +++ b/docs/dev/kinopoiskdev/README.md @@ -1,142 +1,170 @@ -# Содержание - -## Filter/ - -* [ReviewSearchFilter](Filter/ReviewSearchFilter.md) -* [SortCriteria](Filter/SortCriteria.md) -* [MovieSearchFilter](Filter/MovieSearchFilter.md) -* [SeasonSearchFilter](Filter/SeasonSearchFilter.md) -* [StudioSearchFilter](Filter/StudioSearchFilter.md) -* [ImageSearchFilter](Filter/ImageSearchFilter.md) -* [KeywordSearchFilter](Filter/KeywordSearchFilter.md) -* [PersonSearchFilter](Filter/PersonSearchFilter.md) -## Contracts/ - -* [CacheInterface](Contracts/CacheInterface.md) -* [LoggerInterface](Contracts/LoggerInterface.md) -## Utils/ - -* [DataManager](Utils/DataManager.md) -* [FilterTrait](Utils/FilterTrait.md) -* [SortManager](Utils/SortManager.md) -* [MovieFilter](Utils/MovieFilter.md) -## Models/ - -* [Spouses](Models/Spouses.md) -* [FactInMovie](Models/FactInMovie.md) -* [Rating](Models/Rating.md) -* [WatchabilityItem](Models/WatchabilityItem.md) -* [ExternalId](Models/ExternalId.md) -* [CurrencyValue](Models/CurrencyValue.md) -* [Name](Models/Name.md) -* [FactInPerson](Models/FactInPerson.md) -* [NominationAward](Models/NominationAward.md) -* [YearRange](Models/YearRange.md) -* [Networks](Models/Networks.md) -* [Watchability](Models/Watchability.md) -* [Movie](Models/Movie.md) -* [MovieInPerson](Models/MovieInPerson.md) -* [Season](Models/Season.md) -* [NetworkItem](Models/NetworkItem.md) -* [PersonPlace](Models/PersonPlace.md) -* [MeiliPersonEntity](Models/MeiliPersonEntity.md) -* [Video](Models/Video.md) -* [DeathPlace](Models/DeathPlace.md) -* [PersonAward](Models/PersonAward.md) -* [LinkedMovie](Models/LinkedMovie.md) -* [ItemName](Models/ItemName.md) -* [SeasonInfo](Models/SeasonInfo.md) -* [Logo](Models/Logo.md) -* [Image](Models/Image.md) -* [Review](Models/Review.md) -* [BirthPlace](Models/BirthPlace.md) -* [Votes](Models/Votes.md) -* [ReviewInfo](Models/ReviewInfo.md) -* [PersonInMovie](Models/PersonInMovie.md) -* [Episode](Models/Episode.md) -* [Audience](Models/Audience.md) -* [ApiImage](Models/ApiImage.md) -* [Premiere](Models/Premiere.md) -* [Lists](Models/Lists.md) -* [BaseModel](Models/BaseModel.md) -* [MovieFromKeyword](Models/MovieFromKeyword.md) -* [Nomination](Models/Nomination.md) -* [Fees](Models/Fees.md) -* [MovieAward](Models/MovieAward.md) -* [SearchMovie](Models/SearchMovie.md) -* [Person](Models/Person.md) -* [AbstractBaseModel](Models/AbstractBaseModel.md) -* [Studio](Models/Studio.md) -* [Keyword](Models/Keyword.md) -* [VideoTypes](Models/VideoTypes.md) -* [ShortImage](Models/ShortImage.md) -* [MovieFromStudio](Models/MovieFromStudio.md) -## Http/ - -* [StudioRequests](Http/StudioRequests.md) -* [MovieRequests](Http/MovieRequests.md) -* [ImageRequests](Http/ImageRequests.md) -* [KeywordRequests](Http/KeywordRequests.md) -* [PersonRequests](Http/PersonRequests.md) -* [SeasonRequests](Http/SeasonRequests.md) -* [ListRequests](Http/ListRequests.md) -* [ReviewRequests](Http/ReviewRequests.md) -## Enums/ - -* [ListCategory](Enums/ListCategory.md) -* [FilterOperator](Enums/FilterOperator.md) -* [SortDirection](Enums/SortDirection.md) -* [ImageType](Enums/ImageType.md) -* [PersonProfession](Enums/PersonProfession.md) -* [MovieType](Enums/MovieType.md) -* [HttpStatusCode](Enums/HttpStatusCode.md) -* [ReviewType](Enums/ReviewType.md) -* [RatingMpaa](Enums/RatingMpaa.md) -* [MovieStatus](Enums/MovieStatus.md) -* [StudioType](Enums/StudioType.md) -* [FilterField](Enums/FilterField.md) -* [SortField](Enums/SortField.md) -* [PersonSex](Enums/PersonSex.md) -## - -* [Kinopoisk](Kinopoisk.md) -## Exceptions/ - -* [KinopoiskResponseException](Exceptions/KinopoiskResponseException.md) -* [ValidationException](Exceptions/ValidationException.md) -* [KinopoiskDevException](Exceptions/KinopoiskDevException.md) -## Services/ - -* [CacheService](Services/CacheService.md) -* [ValidationService](Services/ValidationService.md) -## Responses/ - -* [ErrorResponseDto](Responses/ErrorResponseDto.md) -* [BaseDocsResponseDto](Responses/BaseDocsResponseDto.md) -* [BaseResponseDto](Responses/BaseResponseDto.md) -## Responses/Api/ - -* [ImageDocsResponseDto](Responses/Api/ImageDocsResponseDto.md) -* [PersonDocsResponseDto](Responses/Api/PersonDocsResponseDto.md) -* [MovieAwardDocsResponseDto](Responses/Api/MovieAwardDocsResponseDto.md) -* [PossibleValueDto](Responses/Api/PossibleValueDto.md) -* [KeywordDocsResponseDto](Responses/Api/KeywordDocsResponseDto.md) -* [MovieDocsResponseDto](Responses/Api/MovieDocsResponseDto.md) -* [SearchMovieResponseDto](Responses/Api/SearchMovieResponseDto.md) -* [ListDocsResponseDto](Responses/Api/ListDocsResponseDto.md) -* [SearchPersonResponseDto](Responses/Api/SearchPersonResponseDto.md) -* [ReviewDocsResponseDto](Responses/Api/ReviewDocsResponseDto.md) -* [SeasonDocsResponseDto](Responses/Api/SeasonDocsResponseDto.md) -* [StudioDocsResponseDto](Responses/Api/StudioDocsResponseDto.md) -* [PersonAwardDocsResponseDto](Responses/Api/PersonAwardDocsResponseDto.md) -* [SearchStudioResponseDto](Responses/Api/SearchStudioResponseDto.md) -## Responses/Errors/ - -* [NotFoundErrorResponseDto](Responses/Errors/NotFoundErrorResponseDto.md) -* [UnauthorizedErrorResponseDto](Responses/Errors/UnauthorizedErrorResponseDto.md) -* [ForbiddenErrorResponseDto](Responses/Errors/ForbiddenErrorResponseDto.md) -## Attributes/ - -* [ApiField](Attributes/ApiField.md) -* [Sensitive](Attributes/Sensitive.md) -* [Validation](Attributes/Validation.md) +# KinopoiskDev PHP Wrapper + +Современная PHP библиотека для работы с API [kinopoisk.dev](https://kinopoisk.dev) - неофициальным API КиноПоиска. + +## 🚀 Особенности + +- **Современный подход** - использует PHP 8.3+ атрибуты и строгую типизацию +- **Расширенные фильтры** - гибкая система фильтрации с поддержкой диапазонов +- **Автоматическая валидация** - декларативная валидация через атрибуты +- **PSR стандарты** - совместимость с PSR-3 для логирования +- **Активная поддержка** - [Telegram группа](https://t.me/omdb_dev) с 7,908 участниками +- **Модульная архитектура** - четкое разделение ответственности + +## 📦 Установка + +```bash +composer require devcraftclub/kinopoisk-dev +``` + +## 🔧 Быстрый старт + +```php +withYearBetween(2020, 2024) + ->withMinRating(7.0, 'kp') + ->withAllGenres(['драма', 'комедия']) + ->onlyMovies(); + +$movies = $request->searchMovies($filter); + +// Получение информации о фильме +$movie = $request->getMovieById(301); +echo $movie->name; // "Матрица" +``` + +## 🏗️ Архитектура + +### Основные компоненты + +- **Kinopoisk** - главный класс для работы с API +- **Фильтры** - специализированные классы для разных типов поиска +- **Модели** - типизированные объекты для данных +- **Атрибуты** - декларативная валидация и конфигурация +- **Сервисы** - бизнес-логика и утилиты + +### Структура проекта + +``` +KinopoiskDev/ +├── Attributes/ # PHP 8.3+ атрибуты +├── Contracts/ # Интерфейсы (PSR-3, кэширование) +├── Enums/ # Перечисления +├── Exceptions/ # Специализированные исключения +├── Filter/ # Классы фильтров +├── Http/ # HTTP запросы +├── Models/ # Модели данных +├── Responses/ # Ответы API +├── Services/ # Сервисы +└── Utils/ # Утилиты +``` + +## 🔍 Возможности + +### Поиск фильмов + +```php +$filter = new MovieSearchFilter(); +$filter->withYearBetween(2020, 2024) + ->withMinRating(7.0, 'kp') + ->withAllGenres(['драма', 'комедия']) + ->onlyMovies() + ->inTop250(); + +$movies = $kinopoisk->searchMovies($filter); +``` + +### Поиск персон + +```php +$filter = new PersonSearchFilter(); +$filter->onlyActors() + ->ageRange(30, 50) + ->withMinRating(7.0, 'kp'); + +$persons = $kinopoisk->searchPersons($filter); +``` + +### Работа с изображениями + +```php +$filter = new ImageSearchFilter(); +$filter->onlyPosters() + ->minResolution(1920, 1080) + ->onlyHighRes(); + +$images = $kinopoisk->getMovieImages(301, $filter); +``` + +### Автоматическая валидация + +```php +class Movie { + #[Validation(required: true, minLength: 1, maxLength: 255)] + public string $title; + + #[Validation(min: 1900, max: 2030)] + public int $year; + + #[Sensitive(hideInJson: true)] + public string $apiToken; +} +``` + +## 🛡️ Безопасность + +- **Атрибут `#[Sensitive]`** - автоматическое скрытие конфиденциальных данных +- **Валидация входных данных** - защита от некорректных параметров +- **Типизированные модели** - предотвращение ошибок типов + +## 📚 Документация + +- **[Основной класс](Kinopoisk.md)** - главный клиент API +- **[Атрибуты](Attributes/)** - валидация и конфигурация +- **[Фильтры](Filter/)** - система фильтрации +- **[Модели](Models/)** - структуры данных +- **[Исключения](Exceptions/)** - обработка ошибок + +## 🔗 Полезные ссылки + +- **[kinopoisk.dev](https://kinopoisk.dev)** - официальный сайт API +- **[Telegram группа](https://t.me/omdb_dev)** - активное сообщество (7,908 участников) +- **[Сравнение с KinopoiskUnofficialTech](notkinopoiskphp-compare.md)** - различия между библиотеками + +## 🤝 Поддержка + +- **Telegram**: [@omdb_dev](https://t.me/omdb_dev) - основная группа поддержки +- **Email**: поддержка через Telegram группу +- **Документация**: полная документация в этом разделе + +## 📄 Лицензия + +MIT License - см. файл [LICENSE](LICENSE) для деталей. + +## 🆚 Сравнение с альтернативами + +| Особенность | KinopoiskDev | KinopoiskUnofficialTech | +| --------------- | -------------------------------------- | --------------------------- | +| **API** | [kinopoisk.dev](https://kinopoisk.dev) | kinopoiskapiunofficial.tech | +| **Поддержка** | ✅ Активная (Telegram) | ❌ Отсутствует | +| **PHP версия** | 8.3+ | 8.3+ | +| **Архитектура** | Модульная | Монолитная | +| **Валидация** | Автоматическая | Ручная | +| **Фильтры** | Расширенные | Базовые | + +## 🚀 Миграция + +Если вы используете KinopoiskUnofficialTech, см. [руководство по миграции](notkinopoiskphp-compare.md#миграция). + +--- + +**KinopoiskDev** - современное решение для работы с API КиноПоиска с активной поддержкой и развитием. diff --git a/docs/dev/kinopoiskdev/Responses/Api/.nav.yml b/docs/dev/kinopoiskdev/Responses/Api/.nav.yml index 0fc756b..d8f7a11 100644 --- a/docs/dev/kinopoiskdev/Responses/Api/.nav.yml +++ b/docs/dev/kinopoiskdev/Responses/Api/.nav.yml @@ -1,16 +1,5 @@ title: API ответы nav: - - ImageDocsResponseDto: ImageDocsResponseDto.md - - KeywordDocsResponseDto: KeywordDocsResponseDto.md - - ListDocsResponseDto: ListDocsResponseDto.md - - MovieAwardDocsResponseDto: MovieAwardDocsResponseDto.md - - MovieDocsResponseDto: MovieDocsResponseDto.md - - PersonAwardDocsResponseDto: PersonAwardDocsResponseDto.md - - PersonDocsResponseDto: PersonDocsResponseDto.md - - PossibleValueDto: PossibleValueDto.md - - ReviewDocsResponseDto: ReviewDocsResponseDto.md - - SearchMovieResponseDto: SearchMovieResponseDto.md - - SearchPersonResponseDto: SearchPersonResponseDto.md - - SearchStudioResponseDto: SearchStudioResponseDto.md - - SeasonDocsResponseDto: SeasonDocsResponseDto.md - - StudioDocsResponseDto: StudioDocsResponseDto.md \ No newline at end of file + - "*" +sort: + type: alphabetical diff --git a/docs/dev/kinopoiskdev/Responses/Errors/.nav.yml b/docs/dev/kinopoiskdev/Responses/Errors/.nav.yml index 610fccf..528b95a 100644 --- a/docs/dev/kinopoiskdev/Responses/Errors/.nav.yml +++ b/docs/dev/kinopoiskdev/Responses/Errors/.nav.yml @@ -1,5 +1,5 @@ title: Ошибки nav: - - ForbiddenErrorResponseDto: ForbiddenErrorResponseDto.md - - NotFoundErrorResponseDto: NotFoundErrorResponseDto.md - - UnauthorizedErrorResponseDto: UnauthorizedErrorResponseDto.md \ No newline at end of file + - "*" +sort: + type: alphabetical diff --git a/docs/dev/kinopoiskdev/notkinopoiskphp-compare.md b/docs/dev/kinopoiskdev/notkinopoiskphp-compare.md index d1c1090..d3c67b3 100644 --- a/docs/dev/kinopoiskdev/notkinopoiskphp-compare.md +++ b/docs/dev/kinopoiskdev/notkinopoiskphp-compare.md @@ -4,8 +4,8 @@ **Важно:** Это два совершенно разных API от разных команд разработки! -- **KinopoiskDev** - обертка для официального API [kinopoisk.dev](https://kinopoisk.dev) от команды Open Movie Database -- **NotKinopoiskPHP** - обертка для неофициального API kinopoiskapiunofficial.tech от независимых разработчиков +- **KinopoiskDev** - обертка для неофициального API [kinopoisk.dev](https://kinopoisk.dev) +- **NotKinopoiskPHP** - обертка для неофициального API [kinopoiskapiunofficial.tech](https://kinopoiskapiunofficial.tech) Эти API **не совместимы** между собой, имеют разную структуру данных и эндпоинты. @@ -17,7 +17,7 @@ | ----------------- | ----------------------------------------------------------- | ------------------------------------------------------------------ | | **API** | [kinopoisk.dev](https://kinopoisk.dev) | [kinopoiskapiunofficial.tech](https://kinopoiskapiunofficial.tech) | | **Статус** | Активная разработка, современный API | Стабильный, но менее активная разработка | -| **Поддержка** | [Telegram группа](https://t.me/omdb_dev) (7,908 участников) | ❌ Даже на EMail не отвечают | +| **Поддержка** | [Telegram группа](https://t.me/omdb_dev) (7,908 участников) | ❌ Даже на Email не отвечают | | **Совместимость** | ❌ Не совместим с NotKinopoiskPHP | ❌ Не совместим с KinopoiskDev | ### Архитектура библиотек @@ -47,10 +47,10 @@ #### KinopoiskDev ```php -use KinopoiskDev\Kinopoisk; +use KinopoiskDev\Http\MovieRequests; use KinopoiskDev\Filter\MovieSearchFilter; -$kinopoisk = new Kinopoisk(apiToken: 'your-token'); +$kinopoisk = new MovieRequests(apiToken: 'your-token'); // Поиск с расширенными фильтрами $filter = new MovieSearchFilter(); @@ -159,7 +159,7 @@ $client = new Client('token'); $movies = $client->searchMovies(['year' => '2023']); // KinopoiskDev (новый код) - ПОЛНОСТЬЮ ПЕРЕПИСАТЬ! -$kinopoisk = new Kinopoisk(apiToken: 'new-token-for-kinopoisk-dev'); +$kinopoisk = new MovieRequests(apiToken: 'new-token-for-kinopoisk-dev'); $filter = new MovieSearchFilter(); $filter->year(2023); $movies = $kinopoisk->searchMovies($filter); diff --git a/docs/dev/notkinopoiskphp/.nav.yml b/docs/dev/notkinopoiskphp/.nav.yml index 9f81990..05b7414 100644 --- a/docs/dev/notkinopoiskphp/.nav.yml +++ b/docs/dev/notkinopoiskphp/.nav.yml @@ -1,6 +1,7 @@ title: KinopoiskUnofficialTech PHP Wrapper nav: - Главная: index.md + - Сравнение с KinopoiskDev: ../kinopoiskdev/notkinopoiskphp-compare.md - Клиент: client.md - Абстрактные классы: abstract-classes.md - Интерфейсы: interfaces/ @@ -9,4 +10,4 @@ nav: - Перечисления (Enums): enums/ - Ответы API: responses/ - Исключения: exceptions/ - - Навигационная карта: navigation-map.md \ No newline at end of file + - Навигационная карта: navigation-map.md