mirror of
https://gitlab.com/foxixus/neomovies-api.git
synced 2025-10-28 01:48:51 +05:00
- /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
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)
|
||
}
|
||
}
|