105 lines
3.5 KiB
Go
105 lines
3.5 KiB
Go
package routes
|
|
|
|
import (
|
|
"tyapi-server/internal/infrastructure/http/handlers"
|
|
sharedhttp "tyapi-server/internal/shared/http"
|
|
"tyapi-server/internal/shared/middleware"
|
|
|
|
"go.uber.org/zap"
|
|
)
|
|
|
|
// ArticleRoutes 文章路由
|
|
type ArticleRoutes struct {
|
|
handler *handlers.ArticleHandler
|
|
auth *middleware.JWTAuthMiddleware
|
|
admin *middleware.AdminAuthMiddleware
|
|
logger *zap.Logger
|
|
}
|
|
|
|
// NewArticleRoutes 创建文章路由
|
|
func NewArticleRoutes(
|
|
handler *handlers.ArticleHandler,
|
|
auth *middleware.JWTAuthMiddleware,
|
|
admin *middleware.AdminAuthMiddleware,
|
|
logger *zap.Logger,
|
|
) *ArticleRoutes {
|
|
return &ArticleRoutes{
|
|
handler: handler,
|
|
auth: auth,
|
|
admin: admin,
|
|
logger: logger,
|
|
}
|
|
}
|
|
|
|
// Register 注册路由
|
|
func (r *ArticleRoutes) Register(router *sharedhttp.GinRouter) {
|
|
engine := router.GetEngine()
|
|
|
|
// ==================== 用户端路由 ====================
|
|
// 文章相关路由 - 用户端
|
|
articleGroup := engine.Group("/api/v1/articles")
|
|
{
|
|
// 公开路由 - 不需要认证
|
|
articleGroup.GET("/:id", r.handler.GetArticleByID) // 获取文章详情
|
|
articleGroup.GET("", r.handler.ListArticles) // 获取文章列表(支持筛选:标题、分类、摘要、标签、推荐状态)
|
|
}
|
|
|
|
// 分类相关路由 - 用户端
|
|
categoryGroup := engine.Group("/api/v1/article-categories")
|
|
{
|
|
// 公开路由 - 不需要认证
|
|
categoryGroup.GET("", r.handler.ListCategories) // 获取分类列表
|
|
categoryGroup.GET("/:id", r.handler.GetCategoryByID) // 获取分类详情
|
|
}
|
|
|
|
// 标签相关路由 - 用户端
|
|
tagGroup := engine.Group("/api/v1/article-tags")
|
|
{
|
|
// 公开路由 - 不需要认证
|
|
tagGroup.GET("", r.handler.ListTags) // 获取标签列表
|
|
tagGroup.GET("/:id", r.handler.GetTagByID) // 获取标签详情
|
|
}
|
|
|
|
// ==================== 管理员端路由 ====================
|
|
// 管理员文章管理路由
|
|
adminArticleGroup := engine.Group("/api/v1/admin/articles")
|
|
adminArticleGroup.Use(r.admin.Handle())
|
|
{
|
|
// 统计信息
|
|
adminArticleGroup.GET("/stats", r.handler.GetArticleStats) // 获取文章统计
|
|
|
|
// 文章管理
|
|
adminArticleGroup.POST("", r.handler.CreateArticle) // 创建文章
|
|
adminArticleGroup.PUT("/:id", r.handler.UpdateArticle) // 更新文章
|
|
adminArticleGroup.DELETE("/:id", r.handler.DeleteArticle) // 删除文章
|
|
|
|
// 文章状态管理
|
|
adminArticleGroup.POST("/:id/publish", r.handler.PublishArticle) // 发布文章
|
|
adminArticleGroup.POST("/:id/schedule-publish", r.handler.SchedulePublishArticle) // 定时发布文章
|
|
adminArticleGroup.POST("/:id/archive", r.handler.ArchiveArticle) // 归档文章
|
|
adminArticleGroup.PUT("/:id/featured", r.handler.SetFeatured) // 设置推荐状态
|
|
}
|
|
|
|
// 管理员分类管理路由
|
|
adminCategoryGroup := engine.Group("/api/v1/admin/article-categories")
|
|
adminCategoryGroup.Use(r.admin.Handle())
|
|
{
|
|
// 分类管理
|
|
adminCategoryGroup.POST("", r.handler.CreateCategory) // 创建分类
|
|
adminCategoryGroup.PUT("/:id", r.handler.UpdateCategory) // 更新分类
|
|
adminCategoryGroup.DELETE("/:id", r.handler.DeleteCategory) // 删除分类
|
|
}
|
|
|
|
// 管理员标签管理路由
|
|
adminTagGroup := engine.Group("/api/v1/admin/article-tags")
|
|
adminTagGroup.Use(r.admin.Handle())
|
|
{
|
|
// 标签管理
|
|
adminTagGroup.POST("", r.handler.CreateTag) // 创建标签
|
|
adminTagGroup.PUT("/:id", r.handler.UpdateTag) // 更新标签
|
|
adminTagGroup.DELETE("/:id", r.handler.DeleteTag) // 删除标签
|
|
}
|
|
|
|
r.logger.Info("文章路由注册完成")
|
|
}
|