155 lines
5.0 KiB
Go
155 lines
5.0 KiB
Go
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.JWTAuth(), backend.AdminView)
|
||
}
|
||
|
||
// setupFrontendRoutes 前台页面(服务端渲染)
|
||
func setupFrontendRoutes(r *gin.Engine) {
|
||
r.GET("/", frontend.IndexView)
|
||
r.GET("/post/:slug", frontend.PostView)
|
||
r.GET("/page/:slug", frontend.PageView)
|
||
r.GET("/search", frontend.SearchView)
|
||
|
||
r.GET("/posts/:postID/comments", frontend.ListComments)
|
||
r.POST("/posts/:postID/comment", frontend.SubmitComment)
|
||
r.GET("/logout", backend.WebLogout)
|
||
}
|
||
|
||
// setupAPIRoutes API 路由分组
|
||
func setupAPIRoutes(r *gin.Engine) {
|
||
api := r.Group(apiPrefix)
|
||
// 登录
|
||
api.POST("/auth/login", backend.Login)
|
||
setupAuthenticatedAPIRoutes(api) // 需要 JWT 的接口
|
||
setupAdminAPIRoutes(api) // 管理员专属接口
|
||
}
|
||
|
||
// setupAuthenticatedAPIRoutes 需要 JWT 的接口(所有登录用户)
|
||
func setupAuthenticatedAPIRoutes(api *gin.RouterGroup) {
|
||
auth := api.Group("/")
|
||
auth.Use(middleware.JWTAuth())
|
||
|
||
// 仪表盘公开统计数据(可选认证,登录后返回更多数据)
|
||
auth.GET("/dashboard/stats", backend.GetDashboardStats)
|
||
// 当前用户信息
|
||
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)
|
||
|
||
// 分类读取
|
||
auth.GET("/categories", backend.GetCategories)
|
||
|
||
// 评论管理(查看所有评论,需登录)
|
||
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)
|
||
|
||
// Markdown 预览
|
||
auth.POST("/markdown/preview", backend.PreviewMarkdown)
|
||
|
||
// 文件上传
|
||
auth.POST("/upload", backend.UploadImage)
|
||
auth.GET("/uploads", backend.ListUploads)
|
||
auth.DELETE("/uploads/:id", backend.DeleteUpload)
|
||
|
||
}
|
||
|
||
// setupAdminAPIRoutes 管理员专属接口(JWT + AdminRequired)
|
||
func setupAdminAPIRoutes(api *gin.RouterGroup) {
|
||
admin := api.Group("/admin")
|
||
admin.Use(middleware.JWTAuth(), middleware.AdminRequired())
|
||
|
||
// 分类管理(写入)
|
||
admin.POST("/categories", backend.CreateCategory)
|
||
admin.GET("/categories/:id", backend.GetCategory)
|
||
admin.PUT("/categories/:id", backend.UpdateCategory)
|
||
admin.DELETE("/categories/:id", backend.DeleteCategory)
|
||
|
||
// 标签管理(写入)
|
||
admin.POST("/tags", backend.CreateTag)
|
||
admin.GET("/tags/:id", backend.GetTag)
|
||
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)
|
||
|
||
// 主题管理(登录用户可切换主题、创建主题、编辑文件)
|
||
// 主题公开信息
|
||
admin.GET("/themes", backend.GetThemes)
|
||
admin.GET("/theme", backend.GetCurrentTheme)
|
||
admin.POST("/theme", backend.SwitchTheme)
|
||
admin.POST("/themes/create", backend.CreateTheme)
|
||
admin.GET("/themes/:theme/files", backend.GetThemeFiles)
|
||
admin.GET("/themes/:theme/files/:file", backend.GetThemeFile)
|
||
admin.PUT("/themes/:theme/files/:file", backend.SaveThemeFile)
|
||
}
|