From 57fb9957188b41dd18b54e7f0aefdd4fce525fc8 Mon Sep 17 00:00:00 2001 From: madipo2611 Date: Mon, 18 Aug 2025 17:19:46 +0300 Subject: [PATCH] =?UTF-8?q?v0.0.18.8=20=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=20=D0=BE=D1=82=D0=B4=D0=B5=D0=BB=D1=8C=D0=BD?= =?UTF-8?q?=D1=8B=D0=B9=20=D1=8D=D0=BD=D0=B4=D0=BF=D0=BE=D0=B8=D0=BD=D1=82?= =?UTF-8?q?=20/ws?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- internal/http/server.go | 42 ++++++++++++++++++++++++++--------------- 1 file changed, 27 insertions(+), 15 deletions(-) diff --git a/internal/http/server.go b/internal/http/server.go index 943548e..c2b1b9b 100644 --- a/internal/http/server.go +++ b/internal/http/server.go @@ -17,6 +17,7 @@ import ( "tailly_back_v2/internal/http/middleware" "tailly_back_v2/internal/service" "tailly_back_v2/pkg/auth" + "time" ) type Server struct { @@ -64,32 +65,40 @@ func (s *Server) configureRouter() { s.router.Use(middleware.MetricsMiddleware) s.router.Use(middleware.CORS(allowedOrigins)) - s.router.Use(middleware.WSAuthMiddleware(s.tokenAuth)) - s.router.Use(middleware.AuthMiddleware(s.tokenAuth)) - + // Основной GraphQL обработчик resolver := graph.NewResolver(s.services, s.db, s.services.Messages) srv := handler.NewDefaultServer(graph.NewExecutableSchema(graph.Config{ Resolvers: resolver, })) - wsTransport := transport.Websocket{ - Upgrader: websocket.Upgrader{ - CheckOrigin: func(r *http.Request) bool { - origin := r.Header.Get("Origin") - for _, allowed := range allowedOrigins { - if origin == allowed { - return true - } + // Настройка WebSocket транспорта + wsUpgrader := websocket.Upgrader{ + CheckOrigin: func(r *http.Request) bool { + origin := r.Header.Get("Origin") + for _, allowed := range allowedOrigins { + if origin == allowed { + return true } - return false - }, + } + return false }, } - srv.AddTransport(&wsTransport) + srv.AddTransport(&transport.Websocket{ + Upgrader: wsUpgrader, + KeepAlivePingInterval: 15 * time.Second, + }) + // Раздельные эндпоинты: + + // 1. Обычные HTTP GraphQL запросы (только POST) + s.router.With(middleware.AuthMiddleware(s.tokenAuth)).Post("/query", srv.ServeHTTP) + + // 2. WebSocket подписки (отдельный эндпоинт) + s.router.With(middleware.WSAuthMiddleware(s.tokenAuth)).Get("/ws", srv.ServeHTTP) + + // 3. Playground и другие обработчики s.router.Handle("/", playground.Handler("GraphQL playground", "/query")) - s.router.Handle("/query", srv) s.router.Handle("/uploads/*", http.StripPrefix("/uploads/", http.FileServer(http.Dir("./uploads")))) } @@ -105,9 +114,12 @@ func (s *Server) configureMetrics() { } func (s *Server) Run() error { + log.Printf("Server running on %s:%s", s.cfg.Server.Host, s.cfg.Server.Port) + log.Printf("WebSocket subscriptions at /ws") return http.ListenAndServe(s.cfg.Server.Host+":"+s.cfg.Server.Port, s.router) } func (s *Server) Shutdown(ctx context.Context) error { + // Graceful shutdown logic return nil }