package router import ( "dubbo.apache.org/dubbo-go/v3/client" "github.com/gin-gonic/gin" swaggerfiles "github.com/swaggo/files" ginSwagger "github.com/swaggo/gin-swagger" _ "github.com/topfans/backend/gateway/docs" // 导入 docs 包以初始化 Swagger "github.com/topfans/backend/gateway/controller" "github.com/topfans/backend/gateway/middleware" ) // SetupRouter 设置路由 func SetupRouter(userClient *client.Client, socialClient *client.Client, assetClient *client.Client, galleryClient *client.Client, activityClient *client.Client) (*gin.Engine, error) { r := gin.Default() // 全局中间件 r.Use(middleware.CORSMiddleware()) r.Use(middleware.LoggerMiddleware()) // 健康检查 r.GET("/health", func(c *gin.Context) { c.JSON(200, gin.H{ "status": "ok", "service": "top-fans-gateway", }) }) // Swagger UI - 使用默认配置,自动从 docs 包读取 swaggerHandler := ginSwagger.WrapHandler(swaggerfiles.Handler) r.GET("/swagger/*any", swaggerHandler) // 创建控制器 authCtrl, err := controller.NewAuthController(userClient) if err != nil { return nil, err } userCtrl, err := controller.NewUserController(userClient) if err != nil { return nil, err } socialCtrl, err := controller.NewSocialController(socialClient) if err != nil { return nil, err } assetCtrl, err := controller.NewAssetController(assetClient) if err != nil { return nil, err } galleryCtrl, err := controller.NewGalleryController(galleryClient, socialClient) if err != nil { return nil, err } rankingCtrl, err := controller.NewRankingController(assetClient) if err != nil { return nil, err } activityCtrl, err := controller.NewActivityController(activityClient) if err != nil { return nil, err } // API v1 路由组 v1 := r.Group("/api/v1") { // 认证相关路由(公开) auth := v1.Group("/auth") { auth.POST("/register", authCtrl.Register) // 注册 auth.POST("/login", authCtrl.Login) // 登录 auth.POST("/validate", authCtrl.ValidateToken) // 验证 Token auth.POST("/check-nickname", authCtrl.CheckNickname) // 检查昵称是否被注册 auth.POST("/check-mobile", authCtrl.CheckMobile) // 检查手机号是否被注册 } // 认证相关路由(需要认证) authProtected := v1.Group("/auth") authProtected.Use(middleware.AuthMiddleware()) { authProtected.GET("/me", userCtrl.GetCurrentUser) // 获取当前用户信息 authProtected.POST("/refresh", authCtrl.RefreshToken) // 刷新 Token authProtected.POST("/logout", authCtrl.Logout) // 登出 } // 用户相关路由(公开) users := v1.Group("/users") { users.GET("/:user_id", userCtrl.GetUser) // 获取指定用户信息 } // 粉丝档案相关路由(公开) fanProfiles := v1.Group("/fan-profiles") { fanProfiles.GET("", userCtrl.GetFanProfile) // 获取指定粉丝档案(query params) } // 粉丝身份相关路由(公开) fanIdentities := v1.Group("/fan-identities") { fanIdentities.GET("", userCtrl.GetFanIdentities) // 获取可选粉丝身份列表 } // 当前用户相关路由(需要认证) me := v1.Group("/me") me.Use(middleware.AuthMiddleware()) { me.GET("/profile", userCtrl.GetMyProfile) // 获取当前用户粉丝档案 me.PUT("/nickname", userCtrl.UpdateNickname) // 更新昵称 me.PUT("/avatar", userCtrl.UpdateAvatar) // 更新头像 } // 账户管理路由(需要认证) account := v1.Group("/account") account.Use(middleware.AuthMiddleware()) { account.POST("/password", userCtrl.UpdatePassword) // 更新密码 } // 我的粉丝身份管理路由(需要认证) myFanIdentities := v1.Group("/my/fan-identities") myFanIdentities.Use(middleware.AuthMiddleware()) { myFanIdentities.GET("", userCtrl.GetMyFanIdentities) // 获取我的粉丝身份列表 myFanIdentities.POST("", userCtrl.AddIdentity) // 添加粉丝身份 myFanIdentities.POST("/switch", userCtrl.SwitchIdentity) // 切换粉丝身份 } // 社交功能路由(需要认证) social := v1.Group("/social") social.Use(middleware.AuthMiddleware()) { // 用户搜索(用于加好友) social.GET("/search-user", socialCtrl.SearchUserForFriend) // 查找用户信息 social.GET("/random-users", socialCtrl.GetRandomUsers) // 获取随机用户 social.GET("/users", socialCtrl.GetUsersPaged) // 获取分页用户列表 // 好友请求相关 social.POST("/friend-requests", socialCtrl.SendFriendRequest) // 发送好友请求 social.GET("/friend-requests", socialCtrl.GetFriendRequests) // 获取好友请求列表 social.POST("/friend-requests/handle", socialCtrl.HandleFriendRequest) // 处理好友请求 // 好友管理相关 social.GET("/friends", socialCtrl.GetFriendList) // 获取好友列表 social.DELETE("/friends", socialCtrl.DeleteFriend) // 删除好友 social.PUT("/friends/remark", socialCtrl.SetFriendRemark) // 设置好友备注 // 好友关系查询 social.GET("/friendship/check", socialCtrl.CheckFriendship) // 检查好友关系 social.GET("/friends/count", socialCtrl.GetFriendCount) // 获取好友数量 // 资产点赞操作(保留操作接口,查询状态已集成到资产详情) social.POST("/assets/:asset_id/like", socialCtrl.LikeAsset) // 点赞资产 social.DELETE("/assets/:asset_id/like", socialCtrl.UnlikeAsset) // 取消点赞 // 注意:GET /api/v1/assets/:asset_id 会返回 is_liked 字段,无需单独查询 } // 资产相关路由(需要认证) assets := v1.Group("/assets") assets.Use(middleware.AuthMiddleware()) { assets.GET("/oss/signature", assetCtrl.GetOSSUploadSignature) // 获取 OSS 上传签名(兼容旧接口) assets.GET("/oss/upload-signature", assetCtrl.GetOSSUploadSignature) // 获取 OSS 上传签名(阶段一接口) assets.GET("/oss/presigned-url", assetCtrl.GetOSSPresignedURL) // 获取 OSS 预签名URL(用于读取单个文件) assets.GET("/oss/batch-presigned-urls", assetCtrl.GetOSSBatchPresignedURLs) // 批量获取 OSS 预签名URL(用于读取目录下的图片) assets.POST("/upload", assetCtrl.UploadImage) // 上传图片 assets.POST("/mints/precreate", assetCtrl.PreCreateMintOrder) // 阶段一:预创建铸造订单(返回 order_id) assets.POST("/mints", assetCtrl.CreateMintOrder) // 创建铸造订单 assets.GET("/mints/:order_id", assetCtrl.GetMintOrder) // 查询铸造订单状态 assets.DELETE("/mints/:order_id", assetCtrl.CancelMintOrder) // 取消铸造订单 assets.POST("/mints/image/generation", assetCtrl.ImageGeneration) // 图生图 assets.GET("/me/items", assetCtrl.GetMyAssets) // 获取我的藏品列表 assets.GET("/:asset_id", assetCtrl.GetAsset) // 获取资产详情 assets.GET("/:asset_id/status", assetCtrl.GetAssetStatus) // 查询上链状态 } // 展馆相关路由(需要认证) galleries := v1.Group("/galleries") galleries.Use(middleware.AuthMiddleware()) { galleries.GET("/me", galleryCtrl.GetMyGallery) // 获取我的展馆 galleries.GET("/random", galleryCtrl.GetRandomGallery) // 获取随机玩家展馆(静态路由必须在参数路由之前) galleries.GET("/:target_uid", galleryCtrl.GetUserGallery) // 获取他人展馆 galleries.POST("/place", galleryCtrl.PlaceAsset) // 在展位展示藏品 galleries.DELETE("/slots/:slot_id/asset", galleryCtrl.RemoveFromSlot) // 从展位移除资产(统一接口) galleries.POST("/slots_unlock", galleryCtrl.UnlockSlot) // 解锁/购买新展位 } // 我的展馆路由(需要认证) mygalleries := v1.Group("/mygalleries") mygalleries.Use(middleware.AuthMiddleware()) { mygalleries.GET("", galleryCtrl.GetMyGallery) // 获取我的展馆 } // 排行榜相关路由(需要认证) rankings := v1.Group("/rankings") rankings.Use(middleware.AuthMiddleware()) { rankings.GET("/hot", rankingCtrl.GetHotRanking) // 获取热度排行榜 rankings.GET("/original", rankingCtrl.GetOriginalRanking) // 获取自制排行榜 } // 活动相关路由(需要认证) activities := v1.Group("/activities") activities.Use(middleware.AuthMiddleware()) { activities.GET("", activityCtrl.GetActivityList) // 获取活动列表 activities.GET("/:id", activityCtrl.GetActivity) // 获取活动详情 activities.GET("/:id/items", activityCtrl.GetActivityItems) // 获取活动道具列表 activities.GET("/:id/progress", activityCtrl.GetProgress) // 获取活动进度 activities.POST("/:id/purchase", activityCtrl.PurchaseItem) // 购买道具 activities.GET("/:id/ranking", activityCtrl.GetContributionRanking) // 获取贡献点排名 } } return r, nil }