package handler import ( "net/http" "github.com/gin-gonic/gin" zlog "github.com/rs/zerolog/log" ginSwagger "github.com/swaggo/gin-swagger" "github.com/swaggo/gin-swagger/swaggerFiles" _ "gitlab.33.cn/chat/dtalk/gateway/api/v1/docs" "gitlab.33.cn/chat/dtalk/gateway/api/v1/internal/handler/account" "gitlab.33.cn/chat/dtalk/gateway/api/v1/internal/handler/group" modules "gitlab.33.cn/chat/dtalk/gateway/api/v1/internal/handler/modules" "gitlab.33.cn/chat/dtalk/gateway/api/v1/internal/handler/record" test "gitlab.33.cn/chat/dtalk/gateway/api/v1/internal/handler/test" "gitlab.33.cn/chat/dtalk/gateway/api/v1/internal/svc" "gitlab.33.cn/chat/dtalk/pkg/api" "gitlab.33.cn/chat/dtalk/pkg/api/logger" "gitlab.33.cn/chat/dtalk/pkg/api/trace" xlog "gitlab.33.cn/chat/dtalk/pkg/logger" otrace "gitlab.33.cn/chat/im-pkg/trace" ) var ( serverCtx *svc.ServiceContext log = zlog.Logger ) func Init(ctx *svc.ServiceContext) *http.Server { serverCtx = ctx addr := serverCtx.Config().Server.Addr engine := Default() SetupEngine(engine) SetupGroupRoutes(engine) SetupResourceRoutes(engine) srv := &http.Server{ Addr: addr, Handler: engine, } go func() { // service connections if err := srv.ListenAndServe(); err != nil && err != http.ErrServerClosed { log.Error().Err(err).Msg("engineInner.Start() err") panic(err) } }() return srv } // Default returns an Engine instance with the Logger and Recovery middleware already attached. func Default() *gin.Engine { router := gin.New() // LoggerWithFormatter middleware will write the logs to gin.DefaultWriter // By default gin.DefaultWriter = os.Stdout router.Use(gin.LoggerWithFormatter(api.Chat33GinLogFormatter)) router.Use(gin.Recovery()) return router } // @title 即时通讯系统后端接口 // @version 1.0 // @description // @termsOfService // @contact.name // @contact.url // @contact.email // @schemes https // @host localhost:8080 // @BasePath /api/v1 func SetupEngine(e *gin.Engine) *gin.Engine { root := e.Group("/", otrace.OpenTracingServerMiddleWare(), api.RespMiddleWare()) root.POST("/test", test.GetHelloWord(serverCtx)) userRoute := root.Group("/user") //获取服务器列表 userRoute.Use(api.AuthMiddleWare()) { userRoute.POST("/login", account.AddressLogin(serverCtx)) } app := root.Group("/app") { modulesRoute := app.Group("/modules") //获取模块启用状态 modulesRoute.POST("/all", modules.GetModulesHandler(serverCtx)) recordRoute := app.Group("/record") { recordRoute.POST("/revoke", api.AuthMiddleWare(), record.RevokeHandler(serverCtx)) recordRoute.POST("/focus", api.AuthMiddleWare(), record.FocusHandler(serverCtx)) } } recordRoute := root.Group("/record") recordRoute.Use(api.AuthMiddleWare()) { recordRoute.POST("/push", record.PushToUid(serverCtx)) recordRoute.POST("/push2", record.PushToUid2(serverCtx)) } store := root.Group("/store/app", api.RespMiddleWare()) store.Use(api.AuthMiddleWare()) { store.POST("/pri-chat-record", record.GetPriRecords(serverCtx)) } return e } func SetupGroupRoutes(e *gin.Engine) *gin.Engine { logMiddleware := logger.NewMiddleware(xlog.New(serverCtx.Config().Env, "group")) root := e.Group("/group/app", api.RespMiddleWare()) root.Use(api.AuthMiddleWare(), trace.TraceMiddleware(), logMiddleware.Handle()) { root.POST("/create-group", group.CreateGroupHandler(serverCtx)) root.POST("/invite-group-members", group.InviteGroupMembersHandler(serverCtx)) root.POST("/group-exit", group.GroupExitHandler(serverCtx)) root.POST("/group-disband", group.GroupDisbandHandler(serverCtx)) root.POST("/group-remove", group.GroupRemoveHandler(serverCtx)) root.POST("/change-owner", group.ChangeOwnerHandler(serverCtx)) root.POST("/join-group", group.JoinGroupHandler(serverCtx)) root.POST("/name", group.UpdateGroupNameHandler(serverCtx)) root.POST("/avatar", group.UpdateGroupAvatarHandler(serverCtx)) root.POST("/joinType", group.UpdateGroupJoinTypeHandler(serverCtx)) root.POST("/friendType", group.UpdateGroupFriendTypeHandler(serverCtx)) root.POST("/muteType", group.UpdateGroupMuteTypeHandler(serverCtx)) root.POST("/member/name", group.UpdateGroupMemberNameHandler(serverCtx)) root.POST("/member/type", group.SetAdminHandler(serverCtx)) root.POST("/member/muteTime", group.UpdateGroupMemberMuteTimeHandler(serverCtx)) root.POST("/group-info", group.GetGroupInfoHandler(serverCtx)) root.POST("/group-pub-info", group.GetGroupPubInfoHandler(serverCtx)) root.POST("/group-list", group.GetGroupListHandler(serverCtx)) root.POST("/group-member-list", group.GetGroupMemberListHandler(serverCtx)) root.POST("/group-member-info", group.GetGroupMemberInfoHandler(serverCtx)) root.POST("/mute-list", group.GetMuteListHandler(serverCtx)) } return e } func SetupResourceRoutes(e *gin.Engine) *gin.Engine { // swagger 文档接口 if serverCtx.Config().Env == "debug" { // todo : 单独开一个 swagger 服务 e.GET("/swagger/*any", ginSwagger.WrapHandler(swaggerFiles.Handler)) } return e }