mirror of
https://gitlab.com/foxixus/neomovies-api.git
synced 2025-10-27 17:38:51 +05:00
126 lines
3.3 KiB
Go
126 lines
3.3 KiB
Go
|
|
package main
|
|||
|
|
|
|||
|
|
import (
|
|||
|
|
"log"
|
|||
|
|
"os"
|
|||
|
|
|
|||
|
|
"neomovies-api/internal/api"
|
|||
|
|
|
|||
|
|
"github.com/gin-contrib/cors"
|
|||
|
|
"github.com/gin-gonic/gin"
|
|||
|
|
swaggerFiles "github.com/swaggo/files"
|
|||
|
|
ginSwagger "github.com/swaggo/gin-swagger"
|
|||
|
|
|
|||
|
|
_ "neomovies-api/docs"
|
|||
|
|
)
|
|||
|
|
|
|||
|
|
// @title Neo Movies API
|
|||
|
|
// @version 1.0
|
|||
|
|
// @description API для работы с фильмами
|
|||
|
|
// @host localhost:8080
|
|||
|
|
// @BasePath /
|
|||
|
|
func main() {
|
|||
|
|
// Устанавливаем переменные окружения
|
|||
|
|
os.Setenv("GIN_MODE", "debug")
|
|||
|
|
os.Setenv("PORT", "8080")
|
|||
|
|
os.Setenv("TMDB_ACCESS_TOKEN", "eyJhbGciOiJIUzI1NiJ9.eyJhdWQiOiI4ZmU3ODhlYmI5ZDAwNjZiNjQ2MWZhNzk5M2MyMzcxYiIsIm5iZiI6MTcyMzQwMTM3My4yMDgsInN1YiI6IjY2YjkwNDlkNzU4ZDQxOTQwYzA3NjlhNSIsInNjb3BlcyI6WyJhcGlfcmVhZCJdLCJ2ZXJzaW9uIjoxfQ.x50tvcWDdBTEhtwRb3dE7aEe9qu4sXV_qOjLMn_Vmew")
|
|||
|
|
|
|||
|
|
// Инициализируем TMDB клиент с CommsOne DNS
|
|||
|
|
log.Println("Initializing TMDB client with CommsOne DNS")
|
|||
|
|
api.InitTMDBClient(os.Getenv("TMDB_ACCESS_TOKEN"))
|
|||
|
|
|
|||
|
|
// Устанавливаем режим Gin
|
|||
|
|
gin.SetMode(os.Getenv("GIN_MODE"))
|
|||
|
|
|
|||
|
|
// Создаем роутер
|
|||
|
|
r := gin.Default()
|
|||
|
|
|
|||
|
|
// Настраиваем CORS
|
|||
|
|
r.Use(cors.New(cors.Config{
|
|||
|
|
AllowOrigins: []string{"*"},
|
|||
|
|
AllowMethods: []string{"GET", "POST", "PUT", "PATCH", "DELETE", "OPTIONS"},
|
|||
|
|
AllowHeaders: []string{"Origin", "Content-Type", "Accept", "Authorization"},
|
|||
|
|
}))
|
|||
|
|
|
|||
|
|
// Swagger документация
|
|||
|
|
r.GET("/swagger/*any", ginSwagger.WrapHandler(swaggerFiles.Handler))
|
|||
|
|
|
|||
|
|
// Health check
|
|||
|
|
r.GET("/health", api.HealthCheck)
|
|||
|
|
|
|||
|
|
// Movies API
|
|||
|
|
movies := r.Group("/movies")
|
|||
|
|
{
|
|||
|
|
movies.GET("/popular", api.GetPopularMovies)
|
|||
|
|
movies.GET("/search", api.SearchMovies)
|
|||
|
|
movies.GET("/top-rated", api.GetTopRatedMovies)
|
|||
|
|
movies.GET("/upcoming", api.GetUpcomingMovies)
|
|||
|
|
movies.GET("/:id", api.GetMovie)
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// Bridge API
|
|||
|
|
bridge := r.Group("/bridge")
|
|||
|
|
{
|
|||
|
|
// TMDB endpoints
|
|||
|
|
tmdb := bridge.Group("/tmdb")
|
|||
|
|
{
|
|||
|
|
// Movie endpoints
|
|||
|
|
movie := tmdb.Group("/movie")
|
|||
|
|
{
|
|||
|
|
movie.GET("/popular", api.GetTMDBPopularMovies)
|
|||
|
|
movie.GET("/top_rated", api.GetTMDBTopRatedMovies)
|
|||
|
|
movie.GET("/upcoming", api.GetTMDBUpcomingMovies)
|
|||
|
|
movie.GET("/:id", api.GetTMDBMovie)
|
|||
|
|
movie.GET("/:id/external_ids", api.GetTMDBMovieExternalIDs)
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// Search endpoints
|
|||
|
|
search := tmdb.Group("/search")
|
|||
|
|
{
|
|||
|
|
search.GET("/movie", api.SearchTMDBMovies)
|
|||
|
|
search.GET("/tv", api.SearchTMDBTV)
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// TV endpoints
|
|||
|
|
tv := tmdb.Group("/tv")
|
|||
|
|
{
|
|||
|
|
tv.GET("/:id/external_ids", api.GetTMDBTVExternalIDs)
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// Discover endpoints
|
|||
|
|
discover := tmdb.Group("/discover")
|
|||
|
|
{
|
|||
|
|
discover.GET("/movie", api.DiscoverMovies)
|
|||
|
|
discover.GET("/tv", api.DiscoverTV)
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// Admin API
|
|||
|
|
admin := r.Group("/admin")
|
|||
|
|
{
|
|||
|
|
// Movies endpoints
|
|||
|
|
adminMovies := admin.Group("/movies")
|
|||
|
|
{
|
|||
|
|
adminMovies.GET("", api.GetAdminMovies)
|
|||
|
|
adminMovies.POST("/toggle-visibility", api.ToggleMovieVisibility)
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// Users endpoints
|
|||
|
|
adminUsers := admin.Group("/users")
|
|||
|
|
{
|
|||
|
|
adminUsers.GET("", api.GetUsers)
|
|||
|
|
adminUsers.POST("/create", api.CreateUser)
|
|||
|
|
adminUsers.POST("/toggle-admin", api.ToggleAdmin)
|
|||
|
|
adminUsers.POST("/send-verification", api.SendVerification)
|
|||
|
|
adminUsers.POST("/verify-code", api.VerifyCode)
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// Запускаем сервер
|
|||
|
|
port := os.Getenv("PORT")
|
|||
|
|
if err := r.Run(":" + port); err != nil {
|
|||
|
|
log.Fatal(err)
|
|||
|
|
}
|
|||
|
|
}
|