From e84061a7853176d09e889bf7673799ec0d76c237 Mon Sep 17 00:00:00 2001 From: Aldino Kemal Date: Thu, 10 Feb 2022 08:15:16 +0700 Subject: [PATCH] feat: add reconnect api --- controllers/app_controller.go | 57 +++++++++++++++++++ controllers/auth_controller.go | 45 --------------- main.go | 6 +- services/{auth_service.go => app_service.go} | 3 +- ...th_service_impl.go => app_service_impl.go} | 15 +++-- 5 files changed, 72 insertions(+), 54 deletions(-) create mode 100644 controllers/app_controller.go delete mode 100644 controllers/auth_controller.go rename services/{auth_service.go => app_service.go} (77%) rename services/{auth_service_impl.go => app_service_impl.go} (86%) diff --git a/controllers/app_controller.go b/controllers/app_controller.go new file mode 100644 index 0000000..2a4e020 --- /dev/null +++ b/controllers/app_controller.go @@ -0,0 +1,57 @@ +package controllers + +import ( + "github.com/aldinokemal/go-whatsapp-web-multidevice/services" + "github.com/aldinokemal/go-whatsapp-web-multidevice/utils" + "github.com/gofiber/fiber/v2" +) + +type AppController struct { + Service services.AppService +} + +func NewAppController(service services.AppService) AppController { + return AppController{Service: service} +} + +func (controller *AppController) Route(app *fiber.App) { + app.Get("/app/login", controller.Login) + app.Get("/app/logout", controller.Logout) + app.Get("/app/reconnect", controller.Reconnect) +} + +func (controller *AppController) Login(c *fiber.Ctx) error { + response, err := controller.Service.Login(c) + utils.PanicIfNeeded(err) + + return c.JSON(utils.ResponseData{ + Code: 200, + Message: "Success", + Results: map[string]interface{}{ + "qr_link": "http://localhost:3000/" + response.ImagePath, + "qr_duration": response.Duration, + }, + }) +} + +func (controller *AppController) Logout(c *fiber.Ctx) error { + err := controller.Service.Logout(c) + utils.PanicIfNeeded(err) + + return c.JSON(utils.ResponseData{ + Code: 200, + Message: "Success logout", + Results: nil, + }) +} + +func (controller *AppController) Reconnect(c *fiber.Ctx) error { + err := controller.Service.Logout(c) + utils.PanicIfNeeded(err) + + return c.JSON(utils.ResponseData{ + Code: 200, + Message: "Reconnect success", + Results: nil, + }) +} diff --git a/controllers/auth_controller.go b/controllers/auth_controller.go deleted file mode 100644 index 8f10d52..0000000 --- a/controllers/auth_controller.go +++ /dev/null @@ -1,45 +0,0 @@ -package controllers - -import ( - "github.com/aldinokemal/go-whatsapp-web-multidevice/services" - "github.com/aldinokemal/go-whatsapp-web-multidevice/utils" - "github.com/gofiber/fiber/v2" -) - -type AuthController struct { - Service services.AuthService -} - -func NewAuthController(service services.AuthService) AuthController { - return AuthController{Service: service} -} - -func (controller *AuthController) Route(app *fiber.App) { - app.Get("/auth/login", controller.Login) - app.Get("/auth/logout", controller.Logout) -} - -func (controller *AuthController) Login(c *fiber.Ctx) error { - response, err := controller.Service.Login(c) - utils.PanicIfNeeded(err) - - return c.JSON(utils.ResponseData{ - Code: 200, - Message: "Success", - Results: map[string]interface{}{ - "qr_link": "http://localhost:3000/" + response.ImagePath, - "qr_duration": response.Duration, - }, - }) -} - -func (controller *AuthController) Logout(c *fiber.Ctx) error { - err := controller.Service.Logout(c) - utils.PanicIfNeeded(err) - - return c.JSON(utils.ResponseData{ - Code: 200, - Message: "Success logout", - Results: nil, - }) -} diff --git a/main.go b/main.go index b5f284d..0afd23c 100644 --- a/main.go +++ b/main.go @@ -25,14 +25,14 @@ func main() { cli := utils.InitWaCLI(db) // Service - authService := services.NewAuthService(cli) + AppService := services.NewAppService(cli) sendService := services.NewSendService(cli) // Controller - authController := controllers.NewAuthController(authService) + AppController := controllers.NewAppController(AppService) sendController := controllers.NewSendController(sendService) - authController.Route(app) + AppController.Route(app) sendController.Route(app) app.Get("/", func(ctx *fiber.Ctx) error { return ctx.JSON(map[string]interface{}{"Status": "Ok"}) diff --git a/services/auth_service.go b/services/app_service.go similarity index 77% rename from services/auth_service.go rename to services/app_service.go index 436dd47..044217b 100644 --- a/services/auth_service.go +++ b/services/app_service.go @@ -5,7 +5,8 @@ import ( "github.com/gofiber/fiber/v2" ) -type AuthService interface { +type AppService interface { Login(c *fiber.Ctx) (response structs.LoginResponse, err error) Logout(c *fiber.Ctx) (err error) + Reconnect(c *fiber.Ctx) (err error) } diff --git a/services/auth_service_impl.go b/services/app_service_impl.go similarity index 86% rename from services/auth_service_impl.go rename to services/app_service_impl.go index c5de32b..48b2da7 100644 --- a/services/auth_service_impl.go +++ b/services/app_service_impl.go @@ -15,17 +15,17 @@ import ( "time" ) -type authServiceImpl struct { +type AppServiceImpl struct { WaCli *whatsmeow.Client } -func NewAuthService(waCli *whatsmeow.Client) AuthService { - return &authServiceImpl{ +func NewAppService(waCli *whatsmeow.Client) AppService { + return &AppServiceImpl{ WaCli: waCli, } } -func (service authServiceImpl) Login(c *fiber.Ctx) (response structs.LoginResponse, err error) { +func (service AppServiceImpl) Login(c *fiber.Ctx) (response structs.LoginResponse, err error) { if service.WaCli == nil { return response, errors.New("wa cli nil cok") } @@ -82,7 +82,7 @@ func (service authServiceImpl) Login(c *fiber.Ctx) (response structs.LoginRespon return response, nil } -func (service authServiceImpl) Logout(c *fiber.Ctx) (err error) { +func (service AppServiceImpl) Logout(c *fiber.Ctx) (err error) { // delete history files, err := filepath.Glob("./history-*") if err != nil { @@ -111,3 +111,8 @@ func (service authServiceImpl) Logout(c *fiber.Ctx) (err error) { err = service.WaCli.Logout() return } + +func (service AppServiceImpl) Reconnect(c *fiber.Ctx) (err error) { + service.WaCli.Disconnect() + return service.WaCli.Connect() +}