110 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			110 lines
		
	
	
		
			3.9 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.GET("", r.handler.ListArticlesForAdmin) // 获取文章列表(管理员端,包含所有状态)
 | |
| 
 | |
| 		// 文章管理
 | |
| 		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/update-schedule-publish", r.handler.UpdateSchedulePublishArticle) // 修改定时发布时间
 | |
| 		adminArticleGroup.POST("/:id/cancel-schedule", r.handler.CancelSchedulePublishArticle) // 取消定时发布
 | |
| 		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("文章路由注册完成")
 | |
| }
 |