fix: separation of handler for notification

This commit is contained in:
dawitel 2025-04-02 12:04:39 +03:00
parent e5260ea349
commit 5cc125d450
2 changed files with 33 additions and 25 deletions

View File

@ -0,0 +1,32 @@
package handlers
import (
"context"
"log/slog"
notificationservice "github.com/SamuelTariku/FortuneBet-Backend/internal/services/notfication"
customvalidator "github.com/SamuelTariku/FortuneBet-Backend/internal/web_server/validator"
"github.com/gofiber/fiber/v2"
"github.com/gofiber/websocket/v2"
)
func ConnectSocket(logger slog.Logger, NotidicationSvc notificationservice.NotificationStore, v *customvalidator.CustomValidator) fiber.Handler {
return func(c *fiber.Ctx) error {
if !websocket.IsWebSocketUpgrade(c) {
return fiber.ErrUpgradeRequired
}
c.Locals("allowed", true)
return websocket.New(func(conn *websocket.Conn) {
// TODO: get the recipientID from the token
recipientID := c.Params("recipientID")
NotidicationSvc.ConnectWebSocket(context.Background(), recipientID, conn)
defer func() {
NotidicationSvc.DisconnectWebSocket(recipientID)
conn.Close()
}()
})(c)
}
}

View File

@ -1,12 +1,9 @@
package httpserver package httpserver
import ( import (
"context"
_ "github.com/SamuelTariku/FortuneBet-Backend/docs" _ "github.com/SamuelTariku/FortuneBet-Backend/docs"
"github.com/SamuelTariku/FortuneBet-Backend/internal/web_server/handlers" "github.com/SamuelTariku/FortuneBet-Backend/internal/web_server/handlers"
"github.com/gofiber/fiber/v2" "github.com/gofiber/fiber/v2"
"github.com/gofiber/websocket/v2"
fiberSwagger "github.com/swaggo/fiber-swagger" fiberSwagger "github.com/swaggo/fiber-swagger"
) )
@ -44,28 +41,7 @@ func (a *App) initAppRoutes() {
a.fiber.Patch("/bet/:id", handlers.UpdateCashOut(a.logger, a.betSvc, a.validator)) a.fiber.Patch("/bet/:id", handlers.UpdateCashOut(a.logger, a.betSvc, a.validator))
a.fiber.Delete("/bet/:id", handlers.DeleteBet(a.logger, a.betSvc, a.validator)) a.fiber.Delete("/bet/:id", handlers.DeleteBet(a.logger, a.betSvc, a.validator))
a.fiber.Get("/ws/:recipientID", func(c *fiber.Ctx) error { a.fiber.Get("/ws/:recipientID", handlers.ConnectSocket(*a.logger, a.NotidicationStore, a.validator))
if websocket.IsWebSocketUpgrade(c) {
c.Locals("allowed", true)
return c.Next()
}
return fiber.ErrUpgradeRequired
}, websocket.New(func(c *websocket.Conn) {
recipientID := c.Params("recipientID")
a.NotidicationStore.ConnectWebSocket(context.Background(), recipientID, c)
defer a.NotidicationStore.DisconnectWebSocket(recipientID)
for {
_, _, err := c.ReadMessage()
if err != nil {
if websocket.IsUnexpectedCloseError(err, websocket.CloseGoingAway, websocket.CloseAbnormalClosure) {
a.Logger.Error("WebSocket error", "recipientID", recipientID, "error", err)
}
return
}
}
}))
} }
///user/profile get ///user/profile get