initial commit
This commit is contained in:
104
server/cmd/server/main.go
Normal file
104
server/cmd/server/main.go
Normal file
@@ -0,0 +1,104 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"log"
|
||||
"os"
|
||||
|
||||
"github.com/gin-contrib/cors"
|
||||
"github.com/gin-gonic/gin"
|
||||
"github.com/novablog/server/internal/config"
|
||||
"github.com/novablog/server/internal/database"
|
||||
"github.com/novablog/server/internal/handlers"
|
||||
"github.com/novablog/server/internal/middleware"
|
||||
"github.com/novablog/server/internal/utils"
|
||||
)
|
||||
|
||||
func main() {
|
||||
// 加载配置
|
||||
cfg := config.Load()
|
||||
|
||||
// 设置运行模式
|
||||
gin.SetMode(cfg.Server.Mode)
|
||||
|
||||
// 初始化数据库
|
||||
if err := database.Initialize(cfg); err != nil {
|
||||
log.Fatalf("Failed to initialize database: %v", err)
|
||||
}
|
||||
defer database.Close()
|
||||
|
||||
// 创建 JWT 管理器
|
||||
jwtManager := utils.NewJWTManager(cfg.JWT.Secret, cfg.JWT.ExpireTime)
|
||||
|
||||
// 创建处理器
|
||||
authHandler := handlers.NewAuthHandler(jwtManager)
|
||||
commentHandler := handlers.NewCommentHandler()
|
||||
likeHandler := handlers.NewLikeHandler()
|
||||
|
||||
// 创建路由
|
||||
r := gin.New()
|
||||
|
||||
// 中间件
|
||||
r.Use(gin.Logger())
|
||||
r.Use(gin.Recovery())
|
||||
|
||||
// CORS 配置
|
||||
corsConfig := cors.Config{
|
||||
AllowOrigins: cfg.CORS.AllowOrigins,
|
||||
AllowMethods: []string{"GET", "POST", "PUT", "DELETE", "OPTIONS"},
|
||||
AllowHeaders: []string{"Origin", "Content-Type", "Authorization"},
|
||||
ExposeHeaders: []string{"Content-Length"},
|
||||
AllowCredentials: true,
|
||||
}
|
||||
r.Use(cors.New(corsConfig))
|
||||
|
||||
// 健康检查
|
||||
r.GET("/health", func(c *gin.Context) {
|
||||
c.JSON(200, gin.H{
|
||||
"status": "ok",
|
||||
"message": "NovaBlog API is running",
|
||||
})
|
||||
})
|
||||
|
||||
// API 路由组
|
||||
api := r.Group("/api")
|
||||
{
|
||||
// 公开接口
|
||||
api.POST("/auth/register", authHandler.Register)
|
||||
api.POST("/auth/login", authHandler.Login)
|
||||
api.GET("/comments", commentHandler.GetComments)
|
||||
api.POST("/comments", commentHandler.CreateComment) // 允许访客评论
|
||||
api.GET("/likes", likeHandler.GetLikeStatus)
|
||||
api.POST("/likes", likeHandler.ToggleLike) // 允许访客点赞(基于 IP Hash)
|
||||
|
||||
// 需要认证的接口
|
||||
authGroup := api.Group("")
|
||||
authGroup.Use(middleware.AuthMiddleware(jwtManager))
|
||||
{
|
||||
// 用户相关
|
||||
authGroup.GET("/auth/profile", authHandler.GetProfile)
|
||||
authGroup.PUT("/auth/profile", authHandler.UpdateProfile)
|
||||
|
||||
// 评论相关(用户删除自己的评论)
|
||||
authGroup.DELETE("/comments/:id", commentHandler.DeleteComment)
|
||||
}
|
||||
|
||||
// 管理员接口
|
||||
adminGroup := api.Group("/admin")
|
||||
adminGroup.Use(middleware.AuthMiddleware(jwtManager))
|
||||
adminGroup.Use(middleware.AdminMiddleware())
|
||||
{
|
||||
// 管理员接口(未来扩展)
|
||||
}
|
||||
}
|
||||
|
||||
// 启动服务器
|
||||
port := os.Getenv("PORT")
|
||||
if port == "" {
|
||||
port = cfg.Server.Port
|
||||
}
|
||||
|
||||
log.Printf("Server starting on port %s...", port)
|
||||
if err := r.Run(":" + port); err != nil {
|
||||
log.Fatalf("Failed to start server: %v", err)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user