Update 16 files

- /docs/swagger.yaml
- /docs/swagger.json
- /docs/docs.go
- /internal/api/init.go
- /internal/api/models.go
- /internal/api/handlers.go
- /internal/api/utils.go
- /internal/tmdb/models.go
- /internal/tmdb/client.go
- /build.sh
- /go.mod
- /go.sum
- /main.go
- /render.yaml
- /run.sh
- /README.md
This commit is contained in:
2025-01-03 18:42:44 +00:00
parent 46735b80e8
commit 612e49817c
16 changed files with 3618 additions and 79 deletions

806
docs/docs.go Normal file
View File

@@ -0,0 +1,806 @@
// Package docs Code generated by swaggo/swag. DO NOT EDIT
package docs
import "github.com/swaggo/swag"
const docTemplate = `{
"schemes": {{ marshal .Schemes }},
"swagger": "2.0",
"info": {
"description": "{{escape .Description}}",
"title": "{{.Title}}",
"contact": {},
"version": "{{.Version}}"
},
"host": "{{.Host}}",
"basePath": "{{.BasePath}}",
"paths": {
"/bridge/tmdb/discover/movie": {
"get": {
"description": "Get a list of movies based on filters",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"tmdb"
],
"summary": "Discover movies",
"parameters": [
{
"type": "integer",
"description": "Page number (default: 1)",
"name": "page",
"in": "query"
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"$ref": "#/definitions/api.TMDBMoviesResponse"
}
}
}
}
},
"/bridge/tmdb/discover/tv": {
"get": {
"description": "Get a list of TV shows based on filters",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"tmdb"
],
"summary": "Discover TV shows",
"parameters": [
{
"type": "integer",
"description": "Page number (default: 1)",
"name": "page",
"in": "query"
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"$ref": "#/definitions/api.TMDBMoviesResponse"
}
}
}
}
},
"/bridge/tmdb/movie/popular": {
"get": {
"description": "Get a list of popular movies directly from TMDB",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"tmdb"
],
"summary": "Get TMDB popular movies",
"parameters": [
{
"type": "integer",
"description": "Page number (default: 1)",
"name": "page",
"in": "query"
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"$ref": "#/definitions/api.TMDBMoviesResponse"
}
}
}
}
},
"/bridge/tmdb/movie/top_rated": {
"get": {
"description": "Get a list of top rated movies directly from TMDB",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"tmdb"
],
"summary": "Get TMDB top rated movies",
"parameters": [
{
"type": "integer",
"description": "Page number (default: 1)",
"name": "page",
"in": "query"
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"$ref": "#/definitions/api.TMDBMoviesResponse"
}
}
}
}
},
"/bridge/tmdb/movie/upcoming": {
"get": {
"description": "Get a list of upcoming movies directly from TMDB",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"tmdb"
],
"summary": "Get TMDB upcoming movies",
"parameters": [
{
"type": "integer",
"description": "Page number (default: 1)",
"name": "page",
"in": "query"
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"$ref": "#/definitions/api.TMDBMoviesResponse"
}
}
}
}
},
"/bridge/tmdb/movie/{id}": {
"get": {
"description": "Get detailed information about a specific movie directly from TMDB",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"tmdb"
],
"summary": "Get TMDB movie details",
"parameters": [
{
"type": "integer",
"description": "Movie ID",
"name": "id",
"in": "path",
"required": true
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"$ref": "#/definitions/tmdb.Movie"
}
}
}
}
},
"/bridge/tmdb/movie/{id}/external_ids": {
"get": {
"description": "Get external IDs (IMDb, Facebook, Instagram, Twitter) for a specific movie",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"tmdb"
],
"summary": "Get TMDB movie external IDs",
"parameters": [
{
"type": "integer",
"description": "Movie ID",
"name": "id",
"in": "path",
"required": true
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"$ref": "#/definitions/tmdb.ExternalIDs"
}
}
}
}
},
"/bridge/tmdb/search/movie": {
"get": {
"description": "Search for movies directly in TMDB",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"tmdb"
],
"summary": "Search TMDB movies",
"parameters": [
{
"type": "string",
"description": "Search query",
"name": "query",
"in": "query",
"required": true
},
{
"type": "integer",
"description": "Page number (default: 1)",
"name": "page",
"in": "query"
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"$ref": "#/definitions/tmdb.MoviesResponse"
}
}
}
}
},
"/bridge/tmdb/search/tv": {
"get": {
"description": "Search for TV shows directly in TMDB",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"tmdb"
],
"summary": "Search TMDB TV shows",
"parameters": [
{
"type": "string",
"description": "Search query",
"name": "query",
"in": "query",
"required": true
},
{
"type": "integer",
"description": "Page number (default: 1)",
"name": "page",
"in": "query"
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"$ref": "#/definitions/tmdb.TVSearchResults"
}
}
}
}
},
"/bridge/tmdb/tv/{id}/external_ids": {
"get": {
"description": "Get external IDs (IMDb, Facebook, Instagram, Twitter) for a specific TV show",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"tmdb"
],
"summary": "Get TMDB TV show external IDs",
"parameters": [
{
"type": "integer",
"description": "TV Show ID",
"name": "id",
"in": "path",
"required": true
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"$ref": "#/definitions/tmdb.ExternalIDs"
}
}
}
}
},
"/movies/popular": {
"get": {
"description": "Get a list of popular movies",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"movies"
],
"summary": "Get popular movies",
"parameters": [
{
"type": "integer",
"description": "Page number (default: 1)",
"name": "page",
"in": "query"
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"$ref": "#/definitions/api.MoviesResponse"
}
}
}
}
},
"/movies/search": {
"get": {
"description": "Search for movies",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"movies"
],
"summary": "Search movies",
"parameters": [
{
"type": "string",
"description": "Search query",
"name": "query",
"in": "query",
"required": true
},
{
"type": "integer",
"description": "Page number (default: 1)",
"name": "page",
"in": "query"
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"$ref": "#/definitions/api.MoviesResponse"
}
}
}
}
},
"/movies/top-rated": {
"get": {
"description": "Get a list of top rated movies",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"movies"
],
"summary": "Get top rated movies",
"parameters": [
{
"type": "integer",
"description": "Page number (default: 1)",
"name": "page",
"in": "query"
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"$ref": "#/definitions/api.MoviesResponse"
}
}
}
}
},
"/movies/upcoming": {
"get": {
"description": "Get a list of upcoming movies",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"movies"
],
"summary": "Get upcoming movies",
"parameters": [
{
"type": "integer",
"description": "Page number (default: 1)",
"name": "page",
"in": "query"
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"$ref": "#/definitions/api.MoviesResponse"
}
}
}
}
},
"/movies/{id}": {
"get": {
"description": "Get detailed information about a specific movie",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"movies"
],
"summary": "Get movie details",
"parameters": [
{
"type": "integer",
"description": "Movie ID",
"name": "id",
"in": "path",
"required": true
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"$ref": "#/definitions/api.MovieDetails"
}
}
}
}
}
},
"definitions": {
"api.Genre": {
"type": "object",
"properties": {
"id": {
"type": "integer"
},
"name": {
"type": "string"
}
}
},
"api.Movie": {
"type": "object",
"properties": {
"backdrop_path": {
"type": "string"
},
"genres": {
"type": "array",
"items": {
"$ref": "#/definitions/api.Genre"
}
},
"id": {
"type": "integer"
},
"overview": {
"type": "string"
},
"poster_path": {
"type": "string"
},
"release_date": {
"type": "string"
},
"title": {
"type": "string"
},
"vote_average": {
"type": "number"
}
}
},
"api.MovieDetails": {
"type": "object",
"properties": {
"backdrop_path": {
"type": "string"
},
"budget": {
"type": "integer"
},
"genres": {
"type": "array",
"items": {
"$ref": "#/definitions/api.Genre"
}
},
"id": {
"type": "integer"
},
"overview": {
"type": "string"
},
"poster_path": {
"type": "string"
},
"release_date": {
"type": "string"
},
"revenue": {
"type": "integer"
},
"runtime": {
"type": "integer"
},
"status": {
"type": "string"
},
"tagline": {
"type": "string"
},
"title": {
"type": "string"
},
"vote_average": {
"type": "number"
}
}
},
"api.MoviesResponse": {
"type": "object",
"properties": {
"page": {
"type": "integer"
},
"results": {
"type": "array",
"items": {
"$ref": "#/definitions/api.Movie"
}
},
"total_pages": {
"type": "integer"
},
"total_results": {
"type": "integer"
}
}
},
"api.TMDBMoviesResponse": {
"type": "object",
"properties": {
"page": {
"type": "integer"
},
"results": {
"type": "array",
"items": {
"$ref": "#/definitions/api.Movie"
}
},
"total_pages": {
"type": "integer"
},
"total_results": {
"type": "integer"
}
}
},
"tmdb.ExternalIDs": {
"type": "object",
"properties": {
"facebook_id": {
"type": "string"
},
"id": {
"type": "integer"
},
"imdb_id": {
"type": "string"
},
"instagram_id": {
"type": "string"
},
"twitter_id": {
"type": "string"
}
}
},
"tmdb.Genre": {
"type": "object",
"properties": {
"id": {
"type": "integer"
},
"name": {
"type": "string"
}
}
},
"tmdb.Movie": {
"type": "object",
"properties": {
"backdrop_path": {
"type": "string"
},
"genres": {
"type": "array",
"items": {
"$ref": "#/definitions/tmdb.Genre"
}
},
"id": {
"type": "integer"
},
"overview": {
"type": "string"
},
"poster_path": {
"type": "string"
},
"release_date": {
"type": "string"
},
"title": {
"type": "string"
},
"vote_average": {
"type": "number"
}
}
},
"tmdb.MoviesResponse": {
"type": "object",
"properties": {
"page": {
"type": "integer"
},
"results": {
"type": "array",
"items": {
"$ref": "#/definitions/tmdb.Movie"
}
},
"total_pages": {
"type": "integer"
},
"total_results": {
"type": "integer"
}
}
},
"tmdb.TV": {
"type": "object",
"properties": {
"backdrop_path": {
"type": "string"
},
"first_air_date": {
"type": "string"
},
"genre_ids": {
"type": "array",
"items": {
"type": "integer"
}
},
"id": {
"type": "integer"
},
"name": {
"type": "string"
},
"original_language": {
"type": "string"
},
"original_name": {
"type": "string"
},
"overview": {
"type": "string"
},
"popularity": {
"type": "number"
},
"poster_path": {
"type": "string"
},
"vote_average": {
"type": "number"
},
"vote_count": {
"type": "integer"
}
}
},
"tmdb.TVSearchResults": {
"type": "object",
"properties": {
"page": {
"type": "integer"
},
"results": {
"type": "array",
"items": {
"$ref": "#/definitions/tmdb.TV"
}
},
"total_pages": {
"type": "integer"
},
"total_results": {
"type": "integer"
}
}
}
}
}`
// SwaggerInfo holds exported Swagger Info so clients can modify it
var SwaggerInfo = &swag.Spec{
Version: "1.0",
Host: "localhost:8080",
BasePath: "/",
Schemes: []string{},
Title: "Neo Movies API",
Description: "API для работы с фильмами",
InfoInstanceName: "swagger",
SwaggerTemplate: docTemplate,
LeftDelim: "{{",
RightDelim: "}}",
}
func init() {
swag.Register(SwaggerInfo.InstanceName(), SwaggerInfo)
}

782
docs/swagger.json Normal file
View File

@@ -0,0 +1,782 @@
{
"swagger": "2.0",
"info": {
"description": "API для работы с фильмами",
"title": "Neo Movies API",
"contact": {},
"version": "1.0"
},
"host": "localhost:8080",
"basePath": "/",
"paths": {
"/bridge/tmdb/discover/movie": {
"get": {
"description": "Get a list of movies based on filters",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"tmdb"
],
"summary": "Discover movies",
"parameters": [
{
"type": "integer",
"description": "Page number (default: 1)",
"name": "page",
"in": "query"
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"$ref": "#/definitions/api.TMDBMoviesResponse"
}
}
}
}
},
"/bridge/tmdb/discover/tv": {
"get": {
"description": "Get a list of TV shows based on filters",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"tmdb"
],
"summary": "Discover TV shows",
"parameters": [
{
"type": "integer",
"description": "Page number (default: 1)",
"name": "page",
"in": "query"
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"$ref": "#/definitions/api.TMDBMoviesResponse"
}
}
}
}
},
"/bridge/tmdb/movie/popular": {
"get": {
"description": "Get a list of popular movies directly from TMDB",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"tmdb"
],
"summary": "Get TMDB popular movies",
"parameters": [
{
"type": "integer",
"description": "Page number (default: 1)",
"name": "page",
"in": "query"
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"$ref": "#/definitions/api.TMDBMoviesResponse"
}
}
}
}
},
"/bridge/tmdb/movie/top_rated": {
"get": {
"description": "Get a list of top rated movies directly from TMDB",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"tmdb"
],
"summary": "Get TMDB top rated movies",
"parameters": [
{
"type": "integer",
"description": "Page number (default: 1)",
"name": "page",
"in": "query"
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"$ref": "#/definitions/api.TMDBMoviesResponse"
}
}
}
}
},
"/bridge/tmdb/movie/upcoming": {
"get": {
"description": "Get a list of upcoming movies directly from TMDB",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"tmdb"
],
"summary": "Get TMDB upcoming movies",
"parameters": [
{
"type": "integer",
"description": "Page number (default: 1)",
"name": "page",
"in": "query"
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"$ref": "#/definitions/api.TMDBMoviesResponse"
}
}
}
}
},
"/bridge/tmdb/movie/{id}": {
"get": {
"description": "Get detailed information about a specific movie directly from TMDB",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"tmdb"
],
"summary": "Get TMDB movie details",
"parameters": [
{
"type": "integer",
"description": "Movie ID",
"name": "id",
"in": "path",
"required": true
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"$ref": "#/definitions/tmdb.Movie"
}
}
}
}
},
"/bridge/tmdb/movie/{id}/external_ids": {
"get": {
"description": "Get external IDs (IMDb, Facebook, Instagram, Twitter) for a specific movie",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"tmdb"
],
"summary": "Get TMDB movie external IDs",
"parameters": [
{
"type": "integer",
"description": "Movie ID",
"name": "id",
"in": "path",
"required": true
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"$ref": "#/definitions/tmdb.ExternalIDs"
}
}
}
}
},
"/bridge/tmdb/search/movie": {
"get": {
"description": "Search for movies directly in TMDB",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"tmdb"
],
"summary": "Search TMDB movies",
"parameters": [
{
"type": "string",
"description": "Search query",
"name": "query",
"in": "query",
"required": true
},
{
"type": "integer",
"description": "Page number (default: 1)",
"name": "page",
"in": "query"
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"$ref": "#/definitions/tmdb.MoviesResponse"
}
}
}
}
},
"/bridge/tmdb/search/tv": {
"get": {
"description": "Search for TV shows directly in TMDB",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"tmdb"
],
"summary": "Search TMDB TV shows",
"parameters": [
{
"type": "string",
"description": "Search query",
"name": "query",
"in": "query",
"required": true
},
{
"type": "integer",
"description": "Page number (default: 1)",
"name": "page",
"in": "query"
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"$ref": "#/definitions/tmdb.TVSearchResults"
}
}
}
}
},
"/bridge/tmdb/tv/{id}/external_ids": {
"get": {
"description": "Get external IDs (IMDb, Facebook, Instagram, Twitter) for a specific TV show",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"tmdb"
],
"summary": "Get TMDB TV show external IDs",
"parameters": [
{
"type": "integer",
"description": "TV Show ID",
"name": "id",
"in": "path",
"required": true
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"$ref": "#/definitions/tmdb.ExternalIDs"
}
}
}
}
},
"/movies/popular": {
"get": {
"description": "Get a list of popular movies",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"movies"
],
"summary": "Get popular movies",
"parameters": [
{
"type": "integer",
"description": "Page number (default: 1)",
"name": "page",
"in": "query"
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"$ref": "#/definitions/api.MoviesResponse"
}
}
}
}
},
"/movies/search": {
"get": {
"description": "Search for movies",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"movies"
],
"summary": "Search movies",
"parameters": [
{
"type": "string",
"description": "Search query",
"name": "query",
"in": "query",
"required": true
},
{
"type": "integer",
"description": "Page number (default: 1)",
"name": "page",
"in": "query"
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"$ref": "#/definitions/api.MoviesResponse"
}
}
}
}
},
"/movies/top-rated": {
"get": {
"description": "Get a list of top rated movies",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"movies"
],
"summary": "Get top rated movies",
"parameters": [
{
"type": "integer",
"description": "Page number (default: 1)",
"name": "page",
"in": "query"
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"$ref": "#/definitions/api.MoviesResponse"
}
}
}
}
},
"/movies/upcoming": {
"get": {
"description": "Get a list of upcoming movies",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"movies"
],
"summary": "Get upcoming movies",
"parameters": [
{
"type": "integer",
"description": "Page number (default: 1)",
"name": "page",
"in": "query"
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"$ref": "#/definitions/api.MoviesResponse"
}
}
}
}
},
"/movies/{id}": {
"get": {
"description": "Get detailed information about a specific movie",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"movies"
],
"summary": "Get movie details",
"parameters": [
{
"type": "integer",
"description": "Movie ID",
"name": "id",
"in": "path",
"required": true
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"$ref": "#/definitions/api.MovieDetails"
}
}
}
}
}
},
"definitions": {
"api.Genre": {
"type": "object",
"properties": {
"id": {
"type": "integer"
},
"name": {
"type": "string"
}
}
},
"api.Movie": {
"type": "object",
"properties": {
"backdrop_path": {
"type": "string"
},
"genres": {
"type": "array",
"items": {
"$ref": "#/definitions/api.Genre"
}
},
"id": {
"type": "integer"
},
"overview": {
"type": "string"
},
"poster_path": {
"type": "string"
},
"release_date": {
"type": "string"
},
"title": {
"type": "string"
},
"vote_average": {
"type": "number"
}
}
},
"api.MovieDetails": {
"type": "object",
"properties": {
"backdrop_path": {
"type": "string"
},
"budget": {
"type": "integer"
},
"genres": {
"type": "array",
"items": {
"$ref": "#/definitions/api.Genre"
}
},
"id": {
"type": "integer"
},
"overview": {
"type": "string"
},
"poster_path": {
"type": "string"
},
"release_date": {
"type": "string"
},
"revenue": {
"type": "integer"
},
"runtime": {
"type": "integer"
},
"status": {
"type": "string"
},
"tagline": {
"type": "string"
},
"title": {
"type": "string"
},
"vote_average": {
"type": "number"
}
}
},
"api.MoviesResponse": {
"type": "object",
"properties": {
"page": {
"type": "integer"
},
"results": {
"type": "array",
"items": {
"$ref": "#/definitions/api.Movie"
}
},
"total_pages": {
"type": "integer"
},
"total_results": {
"type": "integer"
}
}
},
"api.TMDBMoviesResponse": {
"type": "object",
"properties": {
"page": {
"type": "integer"
},
"results": {
"type": "array",
"items": {
"$ref": "#/definitions/api.Movie"
}
},
"total_pages": {
"type": "integer"
},
"total_results": {
"type": "integer"
}
}
},
"tmdb.ExternalIDs": {
"type": "object",
"properties": {
"facebook_id": {
"type": "string"
},
"id": {
"type": "integer"
},
"imdb_id": {
"type": "string"
},
"instagram_id": {
"type": "string"
},
"twitter_id": {
"type": "string"
}
}
},
"tmdb.Genre": {
"type": "object",
"properties": {
"id": {
"type": "integer"
},
"name": {
"type": "string"
}
}
},
"tmdb.Movie": {
"type": "object",
"properties": {
"backdrop_path": {
"type": "string"
},
"genres": {
"type": "array",
"items": {
"$ref": "#/definitions/tmdb.Genre"
}
},
"id": {
"type": "integer"
},
"overview": {
"type": "string"
},
"poster_path": {
"type": "string"
},
"release_date": {
"type": "string"
},
"title": {
"type": "string"
},
"vote_average": {
"type": "number"
}
}
},
"tmdb.MoviesResponse": {
"type": "object",
"properties": {
"page": {
"type": "integer"
},
"results": {
"type": "array",
"items": {
"$ref": "#/definitions/tmdb.Movie"
}
},
"total_pages": {
"type": "integer"
},
"total_results": {
"type": "integer"
}
}
},
"tmdb.TV": {
"type": "object",
"properties": {
"backdrop_path": {
"type": "string"
},
"first_air_date": {
"type": "string"
},
"genre_ids": {
"type": "array",
"items": {
"type": "integer"
}
},
"id": {
"type": "integer"
},
"name": {
"type": "string"
},
"original_language": {
"type": "string"
},
"original_name": {
"type": "string"
},
"overview": {
"type": "string"
},
"popularity": {
"type": "number"
},
"poster_path": {
"type": "string"
},
"vote_average": {
"type": "number"
},
"vote_count": {
"type": "integer"
}
}
},
"tmdb.TVSearchResults": {
"type": "object",
"properties": {
"page": {
"type": "integer"
},
"results": {
"type": "array",
"items": {
"$ref": "#/definitions/tmdb.TV"
}
},
"total_pages": {
"type": "integer"
},
"total_results": {
"type": "integer"
}
}
}
}
}

512
docs/swagger.yaml Normal file
View File

@@ -0,0 +1,512 @@
basePath: /
definitions:
api.Genre:
properties:
id:
type: integer
name:
type: string
type: object
api.Movie:
properties:
backdrop_path:
type: string
genres:
items:
$ref: '#/definitions/api.Genre'
type: array
id:
type: integer
overview:
type: string
poster_path:
type: string
release_date:
type: string
title:
type: string
vote_average:
type: number
type: object
api.MovieDetails:
properties:
backdrop_path:
type: string
budget:
type: integer
genres:
items:
$ref: '#/definitions/api.Genre'
type: array
id:
type: integer
overview:
type: string
poster_path:
type: string
release_date:
type: string
revenue:
type: integer
runtime:
type: integer
status:
type: string
tagline:
type: string
title:
type: string
vote_average:
type: number
type: object
api.MoviesResponse:
properties:
page:
type: integer
results:
items:
$ref: '#/definitions/api.Movie'
type: array
total_pages:
type: integer
total_results:
type: integer
type: object
api.TMDBMoviesResponse:
properties:
page:
type: integer
results:
items:
$ref: '#/definitions/api.Movie'
type: array
total_pages:
type: integer
total_results:
type: integer
type: object
tmdb.ExternalIDs:
properties:
facebook_id:
type: string
id:
type: integer
imdb_id:
type: string
instagram_id:
type: string
twitter_id:
type: string
type: object
tmdb.Genre:
properties:
id:
type: integer
name:
type: string
type: object
tmdb.Movie:
properties:
backdrop_path:
type: string
genres:
items:
$ref: '#/definitions/tmdb.Genre'
type: array
id:
type: integer
overview:
type: string
poster_path:
type: string
release_date:
type: string
title:
type: string
vote_average:
type: number
type: object
tmdb.MoviesResponse:
properties:
page:
type: integer
results:
items:
$ref: '#/definitions/tmdb.Movie'
type: array
total_pages:
type: integer
total_results:
type: integer
type: object
tmdb.TV:
properties:
backdrop_path:
type: string
first_air_date:
type: string
genre_ids:
items:
type: integer
type: array
id:
type: integer
name:
type: string
original_language:
type: string
original_name:
type: string
overview:
type: string
popularity:
type: number
poster_path:
type: string
vote_average:
type: number
vote_count:
type: integer
type: object
tmdb.TVSearchResults:
properties:
page:
type: integer
results:
items:
$ref: '#/definitions/tmdb.TV'
type: array
total_pages:
type: integer
total_results:
type: integer
type: object
host: localhost:8080
info:
contact: {}
description: API для работы с фильмами
title: Neo Movies API
version: "1.0"
paths:
/bridge/tmdb/discover/movie:
get:
consumes:
- application/json
description: Get a list of movies based on filters
parameters:
- description: 'Page number (default: 1)'
in: query
name: page
type: integer
produces:
- application/json
responses:
"200":
description: OK
schema:
$ref: '#/definitions/api.TMDBMoviesResponse'
summary: Discover movies
tags:
- tmdb
/bridge/tmdb/discover/tv:
get:
consumes:
- application/json
description: Get a list of TV shows based on filters
parameters:
- description: 'Page number (default: 1)'
in: query
name: page
type: integer
produces:
- application/json
responses:
"200":
description: OK
schema:
$ref: '#/definitions/api.TMDBMoviesResponse'
summary: Discover TV shows
tags:
- tmdb
/bridge/tmdb/movie/{id}:
get:
consumes:
- application/json
description: Get detailed information about a specific movie directly from TMDB
parameters:
- description: Movie ID
in: path
name: id
required: true
type: integer
produces:
- application/json
responses:
"200":
description: OK
schema:
$ref: '#/definitions/tmdb.Movie'
summary: Get TMDB movie details
tags:
- tmdb
/bridge/tmdb/movie/{id}/external_ids:
get:
consumes:
- application/json
description: Get external IDs (IMDb, Facebook, Instagram, Twitter) for a specific
movie
parameters:
- description: Movie ID
in: path
name: id
required: true
type: integer
produces:
- application/json
responses:
"200":
description: OK
schema:
$ref: '#/definitions/tmdb.ExternalIDs'
summary: Get TMDB movie external IDs
tags:
- tmdb
/bridge/tmdb/movie/popular:
get:
consumes:
- application/json
description: Get a list of popular movies directly from TMDB
parameters:
- description: 'Page number (default: 1)'
in: query
name: page
type: integer
produces:
- application/json
responses:
"200":
description: OK
schema:
$ref: '#/definitions/api.TMDBMoviesResponse'
summary: Get TMDB popular movies
tags:
- tmdb
/bridge/tmdb/movie/top_rated:
get:
consumes:
- application/json
description: Get a list of top rated movies directly from TMDB
parameters:
- description: 'Page number (default: 1)'
in: query
name: page
type: integer
produces:
- application/json
responses:
"200":
description: OK
schema:
$ref: '#/definitions/api.TMDBMoviesResponse'
summary: Get TMDB top rated movies
tags:
- tmdb
/bridge/tmdb/movie/upcoming:
get:
consumes:
- application/json
description: Get a list of upcoming movies directly from TMDB
parameters:
- description: 'Page number (default: 1)'
in: query
name: page
type: integer
produces:
- application/json
responses:
"200":
description: OK
schema:
$ref: '#/definitions/api.TMDBMoviesResponse'
summary: Get TMDB upcoming movies
tags:
- tmdb
/bridge/tmdb/search/movie:
get:
consumes:
- application/json
description: Search for movies directly in TMDB
parameters:
- description: Search query
in: query
name: query
required: true
type: string
- description: 'Page number (default: 1)'
in: query
name: page
type: integer
produces:
- application/json
responses:
"200":
description: OK
schema:
$ref: '#/definitions/tmdb.MoviesResponse'
summary: Search TMDB movies
tags:
- tmdb
/bridge/tmdb/search/tv:
get:
consumes:
- application/json
description: Search for TV shows directly in TMDB
parameters:
- description: Search query
in: query
name: query
required: true
type: string
- description: 'Page number (default: 1)'
in: query
name: page
type: integer
produces:
- application/json
responses:
"200":
description: OK
schema:
$ref: '#/definitions/tmdb.TVSearchResults'
summary: Search TMDB TV shows
tags:
- tmdb
/bridge/tmdb/tv/{id}/external_ids:
get:
consumes:
- application/json
description: Get external IDs (IMDb, Facebook, Instagram, Twitter) for a specific
TV show
parameters:
- description: TV Show ID
in: path
name: id
required: true
type: integer
produces:
- application/json
responses:
"200":
description: OK
schema:
$ref: '#/definitions/tmdb.ExternalIDs'
summary: Get TMDB TV show external IDs
tags:
- tmdb
/movies/{id}:
get:
consumes:
- application/json
description: Get detailed information about a specific movie
parameters:
- description: Movie ID
in: path
name: id
required: true
type: integer
produces:
- application/json
responses:
"200":
description: OK
schema:
$ref: '#/definitions/api.MovieDetails'
summary: Get movie details
tags:
- movies
/movies/popular:
get:
consumes:
- application/json
description: Get a list of popular movies
parameters:
- description: 'Page number (default: 1)'
in: query
name: page
type: integer
produces:
- application/json
responses:
"200":
description: OK
schema:
$ref: '#/definitions/api.MoviesResponse'
summary: Get popular movies
tags:
- movies
/movies/search:
get:
consumes:
- application/json
description: Search for movies
parameters:
- description: Search query
in: query
name: query
required: true
type: string
- description: 'Page number (default: 1)'
in: query
name: page
type: integer
produces:
- application/json
responses:
"200":
description: OK
schema:
$ref: '#/definitions/api.MoviesResponse'
summary: Search movies
tags:
- movies
/movies/top-rated:
get:
consumes:
- application/json
description: Get a list of top rated movies
parameters:
- description: 'Page number (default: 1)'
in: query
name: page
type: integer
produces:
- application/json
responses:
"200":
description: OK
schema:
$ref: '#/definitions/api.MoviesResponse'
summary: Get top rated movies
tags:
- movies
/movies/upcoming:
get:
consumes:
- application/json
description: Get a list of upcoming movies
parameters:
- description: 'Page number (default: 1)'
in: query
name: page
type: integer
produces:
- application/json
responses:
"200":
description: OK
schema:
$ref: '#/definitions/api.MoviesResponse'
summary: Get upcoming movies
tags:
- movies
swagger: "2.0"