From e5260ea34937538f761abc8fb1730efefc07e85c Mon Sep 17 00:00:00 2001 From: Samuel Tariku Date: Wed, 2 Apr 2025 10:56:26 +0300 Subject: [PATCH] merge fix --- cmd/main.go | 3 +- internal/web_server/app.go | 4 +- internal/web_server/routes.go | 76 +++++++++++++++++++++++++++++++++++ 3 files changed, 79 insertions(+), 4 deletions(-) create mode 100644 internal/web_server/routes.go diff --git a/cmd/main.go b/cmd/main.go index ebc19fa..93b4fa2 100644 --- a/cmd/main.go +++ b/cmd/main.go @@ -2,7 +2,6 @@ package main import ( "fmt" - "log" "log/slog" "os" @@ -13,13 +12,13 @@ import ( "github.com/SamuelTariku/FortuneBet-Backend/internal/repository" "github.com/SamuelTariku/FortuneBet-Backend/internal/services/authentication" "github.com/SamuelTariku/FortuneBet-Backend/internal/services/bet" + notificationservice "github.com/SamuelTariku/FortuneBet-Backend/internal/services/notfication" "github.com/SamuelTariku/FortuneBet-Backend/internal/services/ticket" "github.com/SamuelTariku/FortuneBet-Backend/internal/services/user" httpserver "github.com/SamuelTariku/FortuneBet-Backend/internal/web_server" jwtutil "github.com/SamuelTariku/FortuneBet-Backend/internal/web_server/jwt" customvalidator "github.com/SamuelTariku/FortuneBet-Backend/internal/web_server/validator" "github.com/go-playground/validator/v10" - notificationservice "github.com/SamuelTariku/FortuneBet-Backend/internal/services/notfication" ) // @title FortuneBet API diff --git a/internal/web_server/app.go b/internal/web_server/app.go index c27e08b..7f5b575 100644 --- a/internal/web_server/app.go +++ b/internal/web_server/app.go @@ -9,7 +9,7 @@ import ( "github.com/SamuelTariku/FortuneBet-Backend/internal/services/ticket" "github.com/SamuelTariku/FortuneBet-Backend/internal/services/user" jwtutil "github.com/SamuelTariku/FortuneBet-Backend/internal/web_server/jwt" - customvalidator "github.com/SamuelTariku/FortuneBet-Backend/internal/web_server/validator" "log/slog" + customvalidator "github.com/SamuelTariku/FortuneBet-Backend/internal/web_server/validator" notificationservice "github.com/SamuelTariku/FortuneBet-Backend/internal/services/notfication" "github.com/bytedance/sonic" @@ -38,7 +38,7 @@ func NewApp( userSvc *user.Service, ticketSvc *ticket.Service, betSvc *bet.Service, -, notidicationStore notificationservice.NotificationStore) *App { + notidicationStore notificationservice.NotificationStore) *App { app := fiber.New(fiber.Config{ CaseSensitive: true, DisableHeaderNormalizing: true, diff --git a/internal/web_server/routes.go b/internal/web_server/routes.go new file mode 100644 index 0000000..63c604f --- /dev/null +++ b/internal/web_server/routes.go @@ -0,0 +1,76 @@ +package httpserver + +import ( + "context" + + _ "github.com/SamuelTariku/FortuneBet-Backend/docs" + "github.com/SamuelTariku/FortuneBet-Backend/internal/web_server/handlers" + "github.com/gofiber/fiber/v2" + "github.com/gofiber/websocket/v2" + fiberSwagger "github.com/swaggo/fiber-swagger" +) + +func (a *App) initAppRoutes() { + a.fiber.Post("/auth/login", handlers.LoginCustomer(a.logger, a.authSvc, a.validator, a.JwtConfig)) + a.fiber.Post("/auth/refresh", a.authMiddleware, handlers.RefreshToken(a.logger, a.authSvc, a.validator, a.JwtConfig)) + a.fiber.Post("/auth/logout", a.authMiddleware, handlers.LogOutCustomer(a.logger, a.authSvc, a.validator)) + a.fiber.Get("/auth/test", a.authMiddleware, func(c *fiber.Ctx) error { + userId := c.Locals("user_id") + role := c.Locals("role") + refreshToken := c.Locals("refresh_token") + a.logger.Info("User ID: " + userId.(string)) + a.logger.Info("Role: " + role.(string)) + a.logger.Info("Refresh Token: " + refreshToken.(string)) + return c.SendString("Test endpoint") + }) + a.fiber.Post("/user/resetPassword", handlers.ResetPassword(a.logger, a.userSvc, a.validator)) + a.fiber.Post("/user/sendResetCode", handlers.SendResetCode(a.logger, a.userSvc, a.validator)) + a.fiber.Post("/user/register", handlers.RegisterUser(a.logger, a.userSvc, a.validator)) + a.fiber.Post("/user/sendRegisterCode", handlers.SendRegisterCode(a.logger, a.userSvc, a.validator)) + a.fiber.Post("/user/checkPhoneEmailExist", handlers.CheckPhoneEmailExist(a.logger, a.userSvc, a.validator)) + a.fiber.Get("/user/profile", a.authMiddleware, handlers.UserProfile(a.logger, a.userSvc)) + // Swagger + a.fiber.Get("/swagger/*", fiberSwagger.FiberWrapHandler()) + + // Ticket + a.fiber.Post("/ticket", handlers.CreateTicket(a.logger, a.ticketSvc, a.validator)) + a.fiber.Get("/ticket", handlers.GetAllTickets(a.logger, a.ticketSvc, a.validator)) + a.fiber.Get("/ticket/:id", handlers.GetTicketByID(a.logger, a.ticketSvc, a.validator)) + + // Bet + a.fiber.Post("/bet", handlers.CreateBet(a.logger, a.betSvc, a.validator)) + a.fiber.Get("/bet", handlers.GetAllBet(a.logger, a.betSvc, a.validator)) + a.fiber.Get("/bet/:id", handlers.GetAllBet(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.Get("/ws/:recipientID", func(c *fiber.Ctx) error { + 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 +// @Router /user/resetPassword [post] +// @Router /user/sendResetCode [post] +// @Router /user/register [post] +// @Router /user/sendRegisterCode [post] +// @Router /user/checkPhoneEmailExist [post]