From abee7e86aa7f42b4004acb1309cf69f27cf69ca6 Mon Sep 17 00:00:00 2001 From: Zhang Chao Date: Wed, 19 Aug 2026 17:49:58 +0800 Subject: [PATCH] =?UTF-8?q?=E6=95=B4=E7=90=86router?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- routers/router.go | 127 +++++++++++++++++++++------------------------- 1 file changed, 57 insertions(+), 70 deletions(-) diff --git a/routers/router.go b/routers/router.go index 4608dac..c834850 100644 --- a/routers/router.go +++ b/routers/router.go @@ -8,7 +8,6 @@ import ( "github.com/gin-gonic/gin" ) -// 常量定义 const ( staticPath = "/static" adminStaticPath = "/admin/static" @@ -24,143 +23,131 @@ func SetupRoutes(r *gin.Engine) { setupAPIRoutes(r) } -// setupStaticRoutes 配置静态资源路由 +// setupStaticRoutes 静态资源 func setupStaticRoutes(r *gin.Engine) { r.Static(staticPath, "./static") r.Static(adminStaticPath, "./static/admin") } -// setupAdminPageRoutes 配置后台管理页面路由(服务端渲染) +// setupAdminPageRoutes 后台管理页面(服务端渲染) func setupAdminPageRoutes(r *gin.Engine) { r.GET(adminPath+"/login", backend.AdminLoginView) r.GET(adminPath, middleware.OptionalAuth(), backend.AdminView) } -// setupFrontendRoutes 配置前台页面路由 +// 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) // 前台退出登录 + r.POST("/comment", frontend.SubmitComment) + r.GET("/logout", backend.WebLogout) } -// setupAPIRoutes 配置所有 /api 下的接口路由 +// setupAPIRoutes API 路由分组 func setupAPIRoutes(r *gin.Engine) { api := r.Group(apiPrefix) - // 公开接口:无需认证或可选认证 - setupPublicAPIRoutes(api) - - // 需要认证的接口(JWT) - setupAuthenticatedAPIRoutes(api) - - // 管理员专属接口(JWT + 管理员角色) - setupAdminAPIRoutes(api) + setupPublicAPIRoutes(api) // 公开接口 + setupAuthenticatedAPIRoutes(api) // 需要 JWT 的接口 + setupAdminAPIRoutes(api) // 管理员专属接口 } -// setupPublicAPIRoutes 配置公开 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.POST("/comments", middleware.OptionalAuth(), backend.CreateComment) + + // 仪表盘公开统计数据(可选认证,登录后返回更多数据) api.GET("/dashboard/stats", middleware.OptionalAuth(), backend.GetDashboardStats) - // 主题公开接口 + // 主题公开信息 api.GET("/themes", backend.GetThemes) api.GET("/theme", backend.GetCurrentTheme) } -// setupAuthenticatedAPIRoutes 配置需要登录的 API(JWT 认证) +// setupAuthenticatedAPIRoutes 需要 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.GET("/posts", backend.GetPosts) + auth.GET("/posts/:id", backend.GetPost) 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.GET("/categories", backend.GetCategories) + auth.GET("/categories/:id", backend.GetCategory) - // 文件上传与管理 - auth.POST("/upload", backend.UploadImage) - auth.GET("/uploads", backend.ListUploads) - auth.DELETE("/uploads/:id", backend.DeleteUpload) + // 标签读取(写入在管理员组) + auth.GET("/tags", backend.GetTags) + auth.GET("/tags/:id", backend.GetTag) - // 我的评论管理(管理自己文章下的评论) + // 页面读取(写入在管理员组) + auth.GET("/pages", backend.GetPages) + auth.GET("/pages/:id", backend.GetPage) + + // 评论管理(查看所有评论,需登录) + auth.GET("/comments", backend.GetComments) + + // 我的评论管理(用户自己文章下的评论) 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) - } + // Markdown 预览 + auth.POST("/markdown/preview", backend.PreviewMarkdown) + + // 文件上传 + auth.POST("/upload", backend.UploadImage) + auth.GET("/uploads", backend.ListUploads) + auth.DELETE("/uploads/:id", backend.DeleteUpload) + + // 主题管理(登录用户可切换主题、创建主题、编辑文件) + auth.POST("/theme", backend.SwitchTheme) + auth.POST("/themes/create", backend.CreateTheme) + auth.GET("/themes/:theme/files", backend.GetThemeFiles) + auth.GET("/themes/:theme/files/:file", backend.GetThemeFile) + auth.PUT("/themes/:theme/files/:file", backend.SaveThemeFile) } -// setupAdminAPIRoutes 配置管理员专属 API(需要登录 + 管理员角色) +// setupAdminAPIRoutes 管理员专属接口(JWT + AdminRequired) 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.GET("/comments", backend.GetComments) // 管理员可查看所有评论 admin.PUT("/comments/:id/approve", backend.ApproveComment) admin.PUT("/comments/:id/spam", backend.MarkSpamComment) admin.DELETE("/comments/:id", backend.DeleteComment) @@ -176,8 +163,8 @@ func setupAdminAPIRoutes(api *gin.RouterGroup) { admin.GET("/settings", backend.GetSettings) admin.PUT("/settings", backend.UpdateSettings) - // 文件管理(管理员可看全部) - admin.POST("/upload", backend.UploadImage) + // 文件管理 + admin.POST("/upload", backend.UploadImage) // 管理员上传(也可在认证组) admin.GET("/uploads", backend.ListUploads) admin.DELETE("/uploads/:id", backend.DeleteUpload) }