package routers import ( "goblog/handlers/backend" "goblog/handlers/frontend" "goblog/middleware" "github.com/gin-gonic/gin" ) // 常量定义 const ( staticPath = "/static" adminStaticPath = "/admin/static" adminPath = "/admin" apiPrefix = "/api" ) // SetupRoutes 配置所有路由 func SetupRoutes(r *gin.Engine) { setupStaticRoutes(r) setupAdminPageRoutes(r) setupFrontendRoutes(r) setupAPIRoutes(r) } // setupStaticRoutes 配置静态资源路由 func setupStaticRoutes(r *gin.Engine) { r.Static(staticPath, "./static") r.Static(adminStaticPath, "./static/admin") } // setupAdminPageRoutes 配置后台管理页面路由(服务端渲染) func setupAdminPageRoutes(r *gin.Engine) { r.GET(adminPath+"/login", backend.AdminLoginView) r.GET(adminPath, middleware.OptionalAuth(), backend.AdminView) } // setupFrontendRoutes 配置前台页面路由 func setupFrontendRoutes(r *gin.Engine) { r.GET("/", middleware.OptionalAuth(), frontend.IndexView) r.GET("/post/:slug", middleware.OptionalAuth(), frontend.PostView) r.GET("/page/:slug", middleware.OptionalAuth(), frontend.PageView) r.GET("/search", middleware.OptionalAuth(), frontend.SearchView) r.POST("/comment", frontend.SubmitComment) // 前台提交评论(公开) r.GET("/logout", backend.WebLogout) // 前台退出登录 } // setupAPIRoutes 配置所有 /api 下的接口路由 func setupAPIRoutes(r *gin.Engine) { api := r.Group(apiPrefix) // 公开接口:无需认证或可选认证 setupPublicAPIRoutes(api) // 需要认证的接口(JWT) setupAuthenticatedAPIRoutes(api) // 管理员专属接口(JWT + 管理员角色) setupAdminAPIRoutes(api) } // setupPublicAPIRoutes 配置公开 API(无需认证或可选认证) func setupPublicAPIRoutes(api *gin.RouterGroup) { // 文章 api.GET("/posts", middleware.OptionalAuth(), backend.GetPosts) api.GET("/posts/:id", middleware.OptionalAuth(), backend.GetPost) // 分类 api.GET("/categories", backend.GetCategories) api.GET("/categories/:id", backend.GetCategory) // 标签 api.GET("/tags", backend.GetTags) api.GET("/tags/:id", backend.GetTag) // 页面 api.GET("/pages", backend.GetPages) api.GET("/pages/:id", backend.GetPage) // 评论列表(公开,仅显示已批准评论) api.GET("/comments", backend.GetComments) // 创建评论(可选认证,若登录则关联用户) api.POST("/comments", middleware.OptionalAuth(), backend.CreateComment) // 登录(公开) api.POST("/auth/login", backend.Login) // 仪表盘统计(可选认证,未登录返回公开统计,登录返回更多数据) api.GET("/dashboard/stats", middleware.OptionalAuth(), backend.GetDashboardStats) // 主题公开接口 api.GET("/themes", backend.GetThemes) api.GET("/theme", backend.GetCurrentTheme) } // setupAuthenticatedAPIRoutes 配置需要登录的 API(JWT 认证) func setupAuthenticatedAPIRoutes(api *gin.RouterGroup) { auth := api.Group("/") auth.Use(middleware.JWTAuth()) // 当前用户信息与修改 auth.GET("/auth/me", backend.GetCurrentUser) auth.PUT("/auth/me", backend.UpdateUser) auth.PUT("/auth/password", backend.ChangePassword) // 登出 auth.POST("/auth/logout", backend.Logout) // 文章管理 auth.POST("/posts", backend.CreatePost) auth.PUT("/posts/:id", backend.UpdatePost) auth.DELETE("/posts/:id", backend.DeletePost) // Markdown 预览 auth.POST("/markdown/preview", backend.PreviewMarkdown) // 文件上传与管理 auth.POST("/upload", backend.UploadImage) auth.GET("/uploads", backend.ListUploads) auth.DELETE("/uploads/:id", backend.DeleteUpload) // 我的评论管理(管理自己文章下的评论) auth.GET("/my/comments", backend.GetComments) auth.PUT("/my/comments/:id/approve", backend.ApproveComment) auth.PUT("/my/comments/:id/spam", backend.MarkSpamComment) auth.DELETE("/my/comments/:id", backend.DeleteComment) // 主题管理(认证用户可切换主题、创建主题、编辑主题文件) themeAuth := auth.Group("/") { themeAuth.POST("/theme", backend.SwitchTheme) themeAuth.POST("/themes/create", backend.CreateTheme) themeAuth.GET("/themes/:theme/files", backend.GetThemeFiles) themeAuth.GET("/themes/:theme/files/:file", backend.GetThemeFile) themeAuth.PUT("/themes/:theme/files/:file", backend.SaveThemeFile) } } // setupAdminAPIRoutes 配置管理员专属 API(需要登录 + 管理员角色) func setupAdminAPIRoutes(api *gin.RouterGroup) { admin := api.Group("/admin") admin.Use(middleware.JWTAuth(), middleware.AdminRequired()) // 分类管理 admin.POST("/categories", backend.CreateCategory) admin.PUT("/categories/:id", backend.UpdateCategory) admin.DELETE("/categories/:id", backend.DeleteCategory) // 标签管理 admin.POST("/tags", backend.CreateTag) admin.PUT("/tags/:id", backend.UpdateTag) admin.DELETE("/tags/:id", backend.DeleteTag) // 页面管理 admin.POST("/pages", backend.CreatePage) admin.PUT("/pages/:id", backend.UpdatePage) admin.DELETE("/pages/:id", backend.DeletePage) // 评论管理(所有评论) admin.GET("/comments", backend.GetComments) admin.PUT("/comments/:id/approve", backend.ApproveComment) admin.PUT("/comments/:id/spam", backend.MarkSpamComment) admin.DELETE("/comments/:id", backend.DeleteComment) // 用户管理 admin.GET("/users", backend.GetUsers) admin.POST("/users", backend.CreateUser) admin.PUT("/users/:id", backend.AdminUpdateUser) admin.PUT("/users/:id/password", backend.AdminResetPassword) admin.DELETE("/users/:id", backend.DeleteUser) // 基础设置 admin.GET("/settings", backend.GetSettings) admin.PUT("/settings", backend.UpdateSettings) // 文件管理(管理员可看全部) admin.POST("/upload", backend.UploadImage) admin.GET("/uploads", backend.ListUploads) admin.DELETE("/uploads/:id", backend.DeleteUpload) }