package chat import ( "narasi-ahli-be/app/module/chat/controller" "narasi-ahli-be/app/module/chat/repository" "narasi-ahli-be/app/module/chat/service" "github.com/gofiber/fiber/v2" "go.uber.org/fx" ) // struct of ChatRouter type ChatRouter struct { App fiber.Router Controller *controller.Controller } // register bulky of Chat module var NewChatModule = fx.Options( // register repository of Chat module fx.Provide(repository.NewChatRepository), // register service of Chat module fx.Provide(service.NewChatService), // register controller of Chat module fx.Provide(controller.NewController), // register router of Chat module fx.Provide(NewChatRouter), ) // init ChatRouter func NewChatRouter(fiber *fiber.App, controller *controller.Controller) *ChatRouter { return &ChatRouter{ App: fiber, Controller: controller, } } // register routes of Chat module func (_i *ChatRouter) RegisterChatRoutes() { // define controllers chatController := _i.Controller.Chat // define routes _i.App.Route("/chat", func(router fiber.Router) { // Chat Session routes router.Route("/sessions", func(sessionRouter fiber.Router) { sessionRouter.Get("/", chatController.GetAllChatSessions) sessionRouter.Get("/:id", chatController.GetChatSessionByID) sessionRouter.Post("/", chatController.CreateChatSession) sessionRouter.Put("/:id", chatController.UpdateChatSession) sessionRouter.Delete("/:id", chatController.DeleteChatSession) // Chat Participant routes sessionRouter.Post("/:chatSessionId/participants", chatController.AddParticipantToChat) sessionRouter.Delete("/:chatSessionId/participants", chatController.RemoveParticipantFromChat) }) // Chat Message routes router.Route("/messages", func(messageRouter fiber.Router) { messageRouter.Get("/", chatController.GetAllChatMessages) messageRouter.Get("/:id", chatController.GetChatMessageByID) messageRouter.Post("/", chatController.CreateChatMessage) messageRouter.Put("/:id", chatController.UpdateChatMessage) messageRouter.Delete("/:id", chatController.DeleteChatMessage) }) }) }