Files
neomovies-api/main.go

126 lines
3.3 KiB
Go
Raw Normal View History

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)
}
}