package routes import ( "tyapi-server/internal/infrastructure/http/handlers" sharedhttp "tyapi-server/internal/shared/http" "tyapi-server/internal/shared/middleware" "go.uber.org/zap" ) // AnnouncementRoutes 公告路由 type AnnouncementRoutes struct { handler *handlers.AnnouncementHandler auth *middleware.JWTAuthMiddleware admin *middleware.AdminAuthMiddleware logger *zap.Logger } // NewAnnouncementRoutes 创建公告路由 func NewAnnouncementRoutes( handler *handlers.AnnouncementHandler, auth *middleware.JWTAuthMiddleware, admin *middleware.AdminAuthMiddleware, logger *zap.Logger, ) *AnnouncementRoutes { return &AnnouncementRoutes{ handler: handler, auth: auth, admin: admin, logger: logger, } } // Register 注册路由 func (r *AnnouncementRoutes) Register(router *sharedhttp.GinRouter) { engine := router.GetEngine() // ==================== 用户端路由 ==================== // 公告相关路由 - 用户端(只显示已发布的公告) announcementGroup := engine.Group("/api/v1/announcements") { // 公开路由 - 不需要认证 announcementGroup.GET("/:id", r.handler.GetAnnouncementByID) // 获取公告详情 announcementGroup.GET("", r.handler.ListAnnouncements) // 获取公告列表 } // ==================== 管理员端路由 ==================== // 管理员公告管理路由 adminAnnouncementGroup := engine.Group("/api/v1/admin/announcements") adminAnnouncementGroup.Use(r.admin.Handle()) { // 统计信息 adminAnnouncementGroup.GET("/stats", r.handler.GetAnnouncementStats) // 获取公告统计 // 公告列表查询 adminAnnouncementGroup.GET("", r.handler.ListAnnouncements) // 获取公告列表(管理员端,包含所有状态) // 公告管理 adminAnnouncementGroup.POST("", r.handler.CreateAnnouncement) // 创建公告 adminAnnouncementGroup.PUT("/:id", r.handler.UpdateAnnouncement) // 更新公告 adminAnnouncementGroup.DELETE("/:id", r.handler.DeleteAnnouncement) // 删除公告 // 公告状态管理 adminAnnouncementGroup.POST("/:id/publish", r.handler.PublishAnnouncement) // 发布公告 adminAnnouncementGroup.POST("/:id/withdraw", r.handler.WithdrawAnnouncement) // 撤回公告 adminAnnouncementGroup.POST("/:id/archive", r.handler.ArchiveAnnouncement) // 归档公告 adminAnnouncementGroup.POST("/:id/schedule-publish", r.handler.SchedulePublishAnnouncement) // 定时发布公告 adminAnnouncementGroup.POST("/:id/update-schedule-publish", r.handler.UpdateSchedulePublishAnnouncement) // 修改定时发布时间 adminAnnouncementGroup.POST("/:id/cancel-schedule", r.handler.CancelSchedulePublishAnnouncement) // 取消定时发布 } r.logger.Info("公告路由注册完成") }