2025-07-10 01:27:35 +08:00
|
|
|
|
package main
|
|
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
|
"log"
|
|
|
|
|
|
"os"
|
|
|
|
|
|
|
2025-07-10 13:56:37 +08:00
|
|
|
|
"res_db/db"
|
|
|
|
|
|
"res_db/db/repo"
|
2025-07-10 01:27:35 +08:00
|
|
|
|
"res_db/handlers"
|
2025-07-10 15:07:29 +08:00
|
|
|
|
"res_db/middleware"
|
2025-07-10 01:27:35 +08:00
|
|
|
|
|
|
|
|
|
|
"github.com/gin-contrib/cors"
|
|
|
|
|
|
"github.com/gin-gonic/gin"
|
|
|
|
|
|
"github.com/joho/godotenv"
|
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
func main() {
|
|
|
|
|
|
// 加载环境变量
|
|
|
|
|
|
if err := godotenv.Load(); err != nil {
|
|
|
|
|
|
log.Println("未找到.env文件,使用默认配置")
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 初始化数据库
|
2025-07-10 13:56:37 +08:00
|
|
|
|
if err := db.InitDB(); err != nil {
|
2025-07-10 01:27:35 +08:00
|
|
|
|
log.Fatal("数据库连接失败:", err)
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2025-07-10 13:56:37 +08:00
|
|
|
|
// 创建Repository管理器
|
|
|
|
|
|
repoManager := repo.NewRepositoryManager(db.DB)
|
|
|
|
|
|
|
2025-07-10 01:27:35 +08:00
|
|
|
|
// 创建Gin实例
|
|
|
|
|
|
r := gin.Default()
|
|
|
|
|
|
|
|
|
|
|
|
// 配置CORS
|
|
|
|
|
|
config := cors.DefaultConfig()
|
|
|
|
|
|
config.AllowOrigins = []string{"*"}
|
|
|
|
|
|
config.AllowMethods = []string{"GET", "POST", "PUT", "DELETE", "OPTIONS"}
|
|
|
|
|
|
config.AllowHeaders = []string{"Origin", "Content-Type", "Accept", "Authorization"}
|
|
|
|
|
|
r.Use(cors.New(config))
|
|
|
|
|
|
|
2025-07-10 13:56:37 +08:00
|
|
|
|
// 将Repository管理器注入到handlers中
|
|
|
|
|
|
handlers.SetRepositoryManager(repoManager)
|
|
|
|
|
|
|
2025-07-10 01:27:35 +08:00
|
|
|
|
// API路由
|
|
|
|
|
|
api := r.Group("/api")
|
|
|
|
|
|
{
|
2025-07-10 15:07:29 +08:00
|
|
|
|
// 认证路由
|
|
|
|
|
|
api.POST("/auth/login", handlers.Login)
|
|
|
|
|
|
api.POST("/auth/register", handlers.Register)
|
|
|
|
|
|
api.GET("/auth/profile", middleware.AuthMiddleware(), handlers.GetProfile)
|
|
|
|
|
|
|
2025-07-10 01:27:35 +08:00
|
|
|
|
// 资源管理
|
|
|
|
|
|
api.GET("/resources", handlers.GetResources)
|
2025-07-10 15:07:29 +08:00
|
|
|
|
api.POST("/resources", middleware.AuthMiddleware(), middleware.AdminMiddleware(), handlers.CreateResource)
|
|
|
|
|
|
api.PUT("/resources/:id", middleware.AuthMiddleware(), middleware.AdminMiddleware(), handlers.UpdateResource)
|
|
|
|
|
|
api.DELETE("/resources/:id", middleware.AuthMiddleware(), middleware.AdminMiddleware(), handlers.DeleteResource)
|
2025-07-10 01:27:35 +08:00
|
|
|
|
api.GET("/resources/:id", handlers.GetResourceByID)
|
|
|
|
|
|
|
|
|
|
|
|
// 分类管理
|
|
|
|
|
|
api.GET("/categories", handlers.GetCategories)
|
2025-07-10 15:07:29 +08:00
|
|
|
|
api.POST("/categories", middleware.AuthMiddleware(), middleware.AdminMiddleware(), handlers.CreateCategory)
|
|
|
|
|
|
api.PUT("/categories/:id", middleware.AuthMiddleware(), middleware.AdminMiddleware(), handlers.UpdateCategory)
|
|
|
|
|
|
api.DELETE("/categories/:id", middleware.AuthMiddleware(), middleware.AdminMiddleware(), handlers.DeleteCategory)
|
2025-07-10 01:27:35 +08:00
|
|
|
|
|
|
|
|
|
|
// 搜索
|
|
|
|
|
|
api.GET("/search", handlers.SearchResources)
|
|
|
|
|
|
|
|
|
|
|
|
// 统计
|
|
|
|
|
|
api.GET("/stats", handlers.GetStats)
|
2025-07-10 13:56:37 +08:00
|
|
|
|
|
|
|
|
|
|
// 平台管理
|
2025-07-10 15:07:29 +08:00
|
|
|
|
api.GET("/pans", middleware.AuthMiddleware(), middleware.AdminMiddleware(), handlers.GetPans)
|
|
|
|
|
|
api.POST("/pans", middleware.AuthMiddleware(), middleware.AdminMiddleware(), handlers.CreatePan)
|
|
|
|
|
|
api.PUT("/pans/:id", middleware.AuthMiddleware(), middleware.AdminMiddleware(), handlers.UpdatePan)
|
|
|
|
|
|
api.DELETE("/pans/:id", middleware.AuthMiddleware(), middleware.AdminMiddleware(), handlers.DeletePan)
|
|
|
|
|
|
api.GET("/pans/:id", middleware.AuthMiddleware(), middleware.AdminMiddleware(), handlers.GetPan)
|
2025-07-10 13:56:37 +08:00
|
|
|
|
|
|
|
|
|
|
// Cookie管理
|
2025-07-10 15:07:29 +08:00
|
|
|
|
api.GET("/cks", middleware.AuthMiddleware(), middleware.AdminMiddleware(), handlers.GetCks)
|
|
|
|
|
|
api.POST("/cks", middleware.AuthMiddleware(), middleware.AdminMiddleware(), handlers.CreateCks)
|
|
|
|
|
|
api.PUT("/cks/:id", middleware.AuthMiddleware(), middleware.AdminMiddleware(), handlers.UpdateCks)
|
|
|
|
|
|
api.DELETE("/cks/:id", middleware.AuthMiddleware(), middleware.AdminMiddleware(), handlers.DeleteCks)
|
|
|
|
|
|
api.GET("/cks/:id", middleware.AuthMiddleware(), middleware.AdminMiddleware(), handlers.GetCksByID)
|
2025-07-10 13:56:37 +08:00
|
|
|
|
|
|
|
|
|
|
// 标签管理
|
|
|
|
|
|
api.GET("/tags", handlers.GetTags)
|
2025-07-10 15:07:29 +08:00
|
|
|
|
api.POST("/tags", middleware.AuthMiddleware(), middleware.AdminMiddleware(), handlers.CreateTag)
|
|
|
|
|
|
api.PUT("/tags/:id", middleware.AuthMiddleware(), middleware.AdminMiddleware(), handlers.UpdateTag)
|
|
|
|
|
|
api.DELETE("/tags/:id", middleware.AuthMiddleware(), middleware.AdminMiddleware(), handlers.DeleteTag)
|
2025-07-10 13:56:37 +08:00
|
|
|
|
api.GET("/tags/:id", handlers.GetTagByID)
|
|
|
|
|
|
api.GET("/resources/:id/tags", handlers.GetResourceTags)
|
|
|
|
|
|
|
|
|
|
|
|
// 待处理资源管理
|
2025-07-10 15:07:29 +08:00
|
|
|
|
api.GET("/ready-resources", middleware.AuthMiddleware(), middleware.AdminMiddleware(), handlers.GetReadyResources)
|
|
|
|
|
|
api.POST("/ready-resources", middleware.AuthMiddleware(), middleware.AdminMiddleware(), handlers.CreateReadyResource)
|
|
|
|
|
|
api.POST("/ready-resources/batch", middleware.AuthMiddleware(), middleware.AdminMiddleware(), handlers.BatchCreateReadyResources)
|
|
|
|
|
|
api.POST("/ready-resources/text", middleware.AuthMiddleware(), middleware.AdminMiddleware(), handlers.CreateReadyResourcesFromText)
|
|
|
|
|
|
api.DELETE("/ready-resources/:id", middleware.AuthMiddleware(), middleware.AdminMiddleware(), handlers.DeleteReadyResource)
|
|
|
|
|
|
api.DELETE("/ready-resources", middleware.AuthMiddleware(), middleware.AdminMiddleware(), handlers.ClearReadyResources)
|
|
|
|
|
|
|
|
|
|
|
|
// 用户管理(仅管理员)
|
|
|
|
|
|
api.GET("/users", middleware.AuthMiddleware(), middleware.AdminMiddleware(), handlers.GetUsers)
|
|
|
|
|
|
api.POST("/users", middleware.AuthMiddleware(), middleware.AdminMiddleware(), handlers.CreateUser)
|
|
|
|
|
|
api.PUT("/users/:id", middleware.AuthMiddleware(), middleware.AdminMiddleware(), handlers.UpdateUser)
|
|
|
|
|
|
api.DELETE("/users/:id", middleware.AuthMiddleware(), middleware.AdminMiddleware(), handlers.DeleteUser)
|
2025-07-10 21:14:17 +08:00
|
|
|
|
|
|
|
|
|
|
// 搜索统计路由
|
|
|
|
|
|
api.GET("/search-stats", handlers.GetSearchStats)
|
|
|
|
|
|
api.GET("/search-stats/hot-keywords", handlers.GetHotKeywords)
|
|
|
|
|
|
api.GET("/search-stats/daily", handlers.GetDailyStats)
|
|
|
|
|
|
api.GET("/search-stats/trend", handlers.GetSearchTrend)
|
|
|
|
|
|
api.GET("/search-stats/keyword/:keyword/trend", handlers.GetKeywordTrend)
|
|
|
|
|
|
api.POST("/search-stats/record", handlers.RecordSearch)
|
2025-07-10 01:27:35 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 静态文件服务
|
|
|
|
|
|
r.Static("/uploads", "./uploads")
|
|
|
|
|
|
|
|
|
|
|
|
port := os.Getenv("PORT")
|
|
|
|
|
|
if port == "" {
|
|
|
|
|
|
port = "8080"
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
log.Printf("服务器启动在端口 %s", port)
|
|
|
|
|
|
r.Run(":" + port)
|
|
|
|
|
|
}
|