优化router、main等文件。
This commit is contained in:
+156
-126
@@ -1,151 +1,181 @@
|
||||
package routers
|
||||
|
||||
import (
|
||||
"strconv"
|
||||
|
||||
"goblog/handlers/backend"
|
||||
"goblog/handlers/frontend"
|
||||
"goblog/middleware"
|
||||
"goblog/utils"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
)
|
||||
|
||||
// 常量定义
|
||||
const (
|
||||
staticPath = "/static"
|
||||
adminStaticPath = "/admin/static"
|
||||
adminPath = "/admin"
|
||||
apiPrefix = "/api"
|
||||
)
|
||||
|
||||
// SetupRoutes 配置所有路由
|
||||
func SetupRoutes(r *gin.Engine) {
|
||||
// 静态文件
|
||||
r.Static("/static", "./static")
|
||||
setupStaticRoutes(r)
|
||||
setupAdminPageRoutes(r)
|
||||
setupFrontendRoutes(r)
|
||||
setupAPIRoutes(r)
|
||||
}
|
||||
|
||||
// 后台管理(放在前面避免冲突)
|
||||
r.Static("/admin/static", "./static/admin")
|
||||
// 独立登录页
|
||||
r.GET("/admin/login", backend.AdminLoginView)
|
||||
// 后台首页:可选认证中间件注入用户信息,服务端按角色渲染菜单与页面框架
|
||||
r.GET("/admin", middleware.OptionalAuth(), backend.AdminView)
|
||||
// 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)
|
||||
// 前台退出登录:清除 Cookie 后回首页
|
||||
r.GET("/logout", backend.WebLogout)
|
||||
|
||||
// API 路由组
|
||||
api := r.Group("/api")
|
||||
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("/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("/")
|
||||
{
|
||||
// 公开 API(支持可选认证,以便管理员查看所有文章)
|
||||
api.GET("/posts", middleware.OptionalAuth(), backend.GetPosts)
|
||||
api.GET("/dashboard/stats", middleware.OptionalAuth(), backend.GetDashboardStats)
|
||||
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
|
||||
api.POST("/comments", middleware.OptionalAuth(), backend.CreateComment)
|
||||
|
||||
// 用户认证
|
||||
api.POST("/auth/login", backend.Login)
|
||||
api.POST("/auth/logout", backend.Logout)
|
||||
|
||||
// 需要登录的 API
|
||||
auth := api.Group("/")
|
||||
auth.Use(middleware.JWTAuth())
|
||||
{
|
||||
auth.GET("/auth/me", backend.GetCurrentUser)
|
||||
|
||||
// 仪表盘统计(所有登录用户可访问,handler 内部按角色过滤数据)
|
||||
auth.GET("/dashboard", middleware.OptionalAuth(), backend.GetDashboardStats)
|
||||
auth.PUT("/auth/me", backend.UpdateUser)
|
||||
auth.PUT("/auth/password", backend.ChangePassword)
|
||||
|
||||
// 文章管理(所有登录用户可新建文章,修改/删除自己的文章)
|
||||
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("/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)
|
||||
}
|
||||
|
||||
// 主题管理(可选认证)
|
||||
api.GET("/themes", backend.GetThemes)
|
||||
api.GET("/theme", backend.GetCurrentTheme)
|
||||
api.POST("/theme", middleware.JWTAuth(), backend.SwitchTheme)
|
||||
api.POST("/themes/create", middleware.JWTAuth(), backend.CreateTheme)
|
||||
api.GET("/themes/:theme/files", middleware.JWTAuth(), backend.GetThemeFiles)
|
||||
api.GET("/themes/:theme/files/:file", middleware.JWTAuth(), backend.GetThemeFile)
|
||||
api.PUT("/themes/:theme/files/:file", middleware.JWTAuth(), backend.SaveThemeFile)
|
||||
|
||||
// 管理员 API
|
||||
admin := api.Group("/admin")
|
||||
admin.Use(middleware.JWTAuth(), middleware.AdminRequired())
|
||||
{
|
||||
// Markdown 预览(文章编辑器用)已移至登录组
|
||||
|
||||
// 分类管理
|
||||
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/:name", backend.DeleteUpload)
|
||||
}
|
||||
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)
|
||||
}
|
||||
}
|
||||
|
||||
// SetupTemplates 配置模板渲染器
|
||||
func SetupTemplates(r *gin.Engine, theme string) {
|
||||
htmlRenderer := utils.LoadTemplates(theme)
|
||||
utils.SetGlobalRenderer(htmlRenderer)
|
||||
r.HTMLRender = htmlRenderer
|
||||
}
|
||||
// setupAdminAPIRoutes 配置管理员专属 API(需要登录 + 管理员角色)
|
||||
func setupAdminAPIRoutes(api *gin.RouterGroup) {
|
||||
admin := api.Group("/admin")
|
||||
admin.Use(middleware.JWTAuth(), middleware.AdminRequired())
|
||||
|
||||
// GetServerPort 获取服务器端口
|
||||
func GetServerPort(port int) string {
|
||||
return ":" + strconv.Itoa(port)
|
||||
// 分类管理
|
||||
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/:name", backend.DeleteUpload)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user