Files
go_typecho/routers/router.go
T

155 lines
5.0 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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.GET("/tags/:id", backend.GetTag)
admin.PUT("/tags/:id", backend.UpdateTag)
admin.DELETE("/tags/:id", backend.DeleteTag)
// 页面管理(写入)
admin.GET("/pages", backend.GetPages)
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)
}