From be39714a878ab610e073682d827268e8076180ff Mon Sep 17 00:00:00 2001 From: Ernela Date: Fri, 21 Nov 2025 16:54:47 +0200 Subject: [PATCH] Ed docs --- README.md | 23 -------- pkg/handlers/docs.go | 135 ++++++++++++++++++------------------------- 2 files changed, 55 insertions(+), 103 deletions(-) diff --git a/README.md b/README.md index f461533..940ff8f 100644 --- a/README.md +++ b/README.md @@ -2,19 +2,6 @@ Полнофункциональный REST API для поиска и получения информации о фильмах и сериалах с интеграцией Kinopoisk и TMDB. -## Особенности - -- **Двойная интеграция**: Kinopoisk API для русского контента + TMDB для международного -- **Умное переключение**: автоматический выбор источника по языку запроса -- **Коллекции Kinopoisk**: популярные, топ-рейтинговые фильмы/сериалы из официальных коллекций -- **Унифицированный формат**: единый ответ для контента из разных источников -- **Русские плееры**: Alloha, Lumex, Vibix, HDVB, Vidsrc, Vidlink -- **Поиск торрентов**: интеграция с RedAPI для поиска торрентов -- **Система реакций**: лайки, дизлайки, избранное с сохранением в БД -- **Аутентификация**: JWT + Google OAuth -- **Интерактивная документация**: Swagger/OpenAPI -- **Высокая производительность**: Go + горутины + кэширование - ## 🛠 Быстрый старт ### Локальная разработка @@ -42,12 +29,6 @@ go run main.go API будет доступен на `http://localhost:3000` -### Деплой на Vercel - -1. **Подключите репозиторий к Vercel** -2. **Настройте переменные окружения** (см. список ниже) -3. **Деплой произойдет автоматически** - ## ⚙️ Переменные окружения ```bash @@ -113,8 +94,6 @@ GET /api/v1/categories/{id}/movies # Фильмы по категор GET /api/v1/movies/search # Поиск фильмов GET /api/v1/movies/popular # Популярные GET /api/v1/movies/top-rated # Топ-рейтинговые -GET /api/v1/movies/upcoming # Предстоящие -GET /api/v1/movies/now-playing # В прокате GET /api/v1/movies/{id} # Детали фильма (устар.) GET /api/v1/movies/{id}/recommendations # Рекомендации GET /api/v1/movies/{id}/similar # Похожие @@ -123,8 +102,6 @@ GET /api/v1/movies/{id}/similar # Похожие GET /api/v1/tv/search # Поиск сериалов GET /api/v1/tv/popular # Популярные GET /api/v1/tv/top-rated # Топ-рейтинговые -GET /api/v1/tv/on-the-air # В эфире -GET /api/v1/tv/airing-today # Сегодня в эфире GET /api/v1/tv/{id} # Детали сериала (устар.) ### 🔓 Публичные маршруты (унифицированные) diff --git a/pkg/handlers/docs.go b/pkg/handlers/docs.go index b3987ba..ba845e8 100644 --- a/pkg/handlers/docs.go +++ b/pkg/handlers/docs.go @@ -161,8 +161,8 @@ func getOpenAPISpecWithURL(baseURL string) *OpenAPISpec { OpenAPI: "3.0.0", Info: Info{ Title: "Neo Movies API", - Description: "Унифицированный API (TMDB/Kinopoisk) с префиксными ID (kp_*, tmdb_*) и единым форматом данных", - Version: "3.0.0", + Description: "Унифицированный API (TMDB/Kinopoisk) с префиксными ID (kp_*, tmdb_*) и единым форматом данных", + Version: "3.0.0", Contact: Contact{ Name: "API Support", URL: "https://github.com/your-username/neomovies-api-go", @@ -194,10 +194,10 @@ func getOpenAPISpecWithURL(baseURL string) *OpenAPISpec { }, }, }, - "/api/v1/search": map[string]interface{}{ + "/api/v1/search": map[string]interface{}{ "get": map[string]interface{}{ - "summary": "Унифицированный поиск", - "description": "Поиск фильмов и сериалов в источниках TMDB или Kinopoisk", + "summary": "Унифицированный поиск", + "description": "Поиск фильмов и сериалов в источниках TMDB или Kinopoisk", "tags": []string{"Search"}, "parameters": []map[string]interface{}{ { @@ -207,13 +207,13 @@ func getOpenAPISpecWithURL(baseURL string) *OpenAPISpec { "schema": map[string]string{"type": "string"}, "description": "Поисковый запрос", }, - { - "name": "source", - "in": "query", - "required": true, - "schema": map[string]interface{}{"type": "string", "enum": []string{"kp", "tmdb"}}, - "description": "Источник: kp или tmdb", - }, + { + "name": "source", + "in": "query", + "required": true, + "schema": map[string]interface{}{"type": "string", "enum": []string{"kp", "tmdb"}}, + "description": "Источник: kp или tmdb", + }, { "name": "page", "in": "query", @@ -223,7 +223,7 @@ func getOpenAPISpecWithURL(baseURL string) *OpenAPISpec { }, "responses": map[string]interface{}{ "200": map[string]interface{}{ - "description": "Результаты поиска (унифицированные)", + "description": "Результаты поиска (унифицированные)", }, }, }, @@ -342,57 +342,57 @@ func getOpenAPISpecWithURL(baseURL string) *OpenAPISpec { }, }, }, - "/api/v1/players/lumex/{imdb_id}": map[string]interface{}{ - "get": map[string]interface{}{ - "summary": "Плеер Lumex", - "description": "Получение плеера Lumex по IMDb ID. Не поддерживает выбор сезона/серии - плеер работает напрямую с IMDb ID", - "tags": []string{"Players"}, - "parameters": []map[string]interface{}{ - { - "name": "imdb_id", - "in": "path", - "required": true, - "schema": map[string]string{"type": "string"}, - "description": "IMDb ID фильма или сериала (например, tt0133093)", + "/api/v1/players/lumex/{imdb_id}": map[string]interface{}{ + "get": map[string]interface{}{ + "summary": "Плеер Lumex", + "description": "Получение плеера Lumex по IMDb ID. Не поддерживает выбор сезона/серии - плеер работает напрямую с IMDb ID", + "tags": []string{"Players"}, + "parameters": []map[string]interface{}{ + { + "name": "imdb_id", + "in": "path", + "required": true, + "schema": map[string]string{"type": "string"}, + "description": "IMDb ID фильма или сериала (например, tt0133093)", + }, }, - }, - "responses": map[string]interface{}{ - "200": map[string]interface{}{ - "description": "HTML со встроенным Lumex плеером", - "content": map[string]interface{}{ - "text/html": map[string]interface{}{}, + "responses": map[string]interface{}{ + "200": map[string]interface{}{ + "description": "HTML со встроенным Lumex плеером", + "content": map[string]interface{}{ + "text/html": map[string]interface{}{}, + }, }, }, }, }, - }, - "/api/v1/players/vibix/{imdb_id}": map[string]interface{}{ - "get": map[string]interface{}{ - "summary": "Vibix плеер по IMDb ID", - "description": "Возвращает HTML-страницу с iframe Vibix для указанного IMDb ID. Не поддерживает выбор сезона/серии - плеер работает напрямую с IMDb ID", - "tags": []string{"Players"}, - "parameters": []map[string]interface{}{ - { - "name": "imdb_id", - "in": "path", - "required": true, - "schema": map[string]string{"type": "string"}, - "description": "IMDb ID, например tt0133093", - }, - }, - "responses": map[string]interface{}{ - "200": map[string]interface{}{ - "description": "HTML со встроенным Vibix плеером", - "content": map[string]interface{}{ - "text/html": map[string]interface{}{}, + "/api/v1/players/vibix/{imdb_id}": map[string]interface{}{ + "get": map[string]interface{}{ + "summary": "Vibix плеер по IMDb ID", + "description": "Возвращает HTML-страницу с iframe Vibix для указанного IMDb ID. Не поддерживает выбор сезона/серии - плеер работает напрямую с IMDb ID", + "tags": []string{"Players"}, + "parameters": []map[string]interface{}{ + { + "name": "imdb_id", + "in": "path", + "required": true, + "schema": map[string]string{"type": "string"}, + "description": "IMDb ID, например tt0133093", }, }, - "404": map[string]interface{}{"description": "Фильм не найден"}, - "503": map[string]interface{}{"description": "VIBIX_TOKEN не настроен"}, + "responses": map[string]interface{}{ + "200": map[string]interface{}{ + "description": "HTML со встроенным Vibix плеером", + "content": map[string]interface{}{ + "text/html": map[string]interface{}{}, + }, + }, + "404": map[string]interface{}{"description": "Фильм не найден"}, + "503": map[string]interface{}{"description": "VIBIX_TOKEN не настроен"}, + }, }, }, - }, - "/api/v1/players/vidsrc/{media_type}/{imdb_id}": map[string]interface{}{ + "/api/v1/players/vidsrc/{media_type}/{imdb_id}": map[string]interface{}{ "get": map[string]interface{}{ "summary": "Vidsrc плеер (английский)", "description": "Возвращает HTML-страницу с iframe Vidsrc.to. Использует IMDb ID для фильмов и сериалов. Пример URL для фильма: https://vidsrc.to/embed/movie/tt1234567, для сериала: https://vidsrc.to/embed/tv/tt6385540/1/1", @@ -613,7 +613,6 @@ func getOpenAPISpecWithURL(baseURL string) *OpenAPISpec { }, }, - "/api/v1/torrents/search/{imdbId}": map[string]interface{}{ "get": map[string]interface{}{ "summary": "Поиск торрентов", @@ -1232,30 +1231,6 @@ func getOpenAPISpecWithURL(baseURL string) *OpenAPISpec { }, }, }, - "/api/v1/movies/now-playing": map[string]interface{}{ - "get": map[string]interface{}{ - "summary": "Сейчас в прокате", - "description": "Получение списка фильмов, которые сейчас в прокате", - "tags": []string{"Movies"}, - "parameters": []map[string]interface{}{ - { - "name": "page", - "in": "query", - "schema": map[string]string{"type": "integer", "default": "1"}, - }, - { - "name": "language", - "in": "query", - "schema": map[string]string{"type": "string", "default": "ru-RU"}, - }, - }, - "responses": map[string]interface{}{ - "200": map[string]interface{}{ - "description": "Список фильмов в прокате", - }, - }, - }, - }, "/api/v1/movies/{id}/recommendations": map[string]interface{}{ "get": map[string]interface{}{ "summary": "Рекомендации фильмов",