From d4ebf40d111832d718735b2fe87e5beb85f3f35c Mon Sep 17 00:00:00 2001 From: Aldino Kemal Date: Sun, 20 Nov 2022 11:35:57 +0700 Subject: [PATCH] feat: move controller to transport layer rest --- src/cmd/root.go | 30 ++++++++---------- .../rest/app_rest.go} | 27 ++++++++-------- .../rest}/send_controller.go | 31 +++++++++---------- .../rest}/user_controller.go | 24 ++++++++------ 4 files changed, 56 insertions(+), 56 deletions(-) rename src/{controllers/app_controller.go => internal/rest/app_rest.go} (63%) rename src/{controllers => internal/rest}/send_controller.go (80%) rename src/{controllers => internal/rest}/user_controller.go (73%) diff --git a/src/cmd/root.go b/src/cmd/root.go index 9bcfed2..2dce1a2 100644 --- a/src/cmd/root.go +++ b/src/cmd/root.go @@ -4,7 +4,7 @@ import ( "encoding/base64" "fmt" "github.com/aldinokemal/go-whatsapp-web-multidevice/config" - "github.com/aldinokemal/go-whatsapp-web-multidevice/controllers" + "github.com/aldinokemal/go-whatsapp-web-multidevice/internal/rest" "github.com/aldinokemal/go-whatsapp-web-multidevice/middleware" "github.com/aldinokemal/go-whatsapp-web-multidevice/services" "github.com/aldinokemal/go-whatsapp-web-multidevice/utils" @@ -71,19 +71,6 @@ func runRest(cmd *cobra.Command, args []string) { AllowHeaders: "Origin, Content-Type, Accept", })) - db := utils.InitWaDB() - cli := utils.InitWaCLI(db) - - // Service - appService := services.NewAppService(cli, db) - sendService := services.NewSendService(cli) - userService := services.NewUserService(cli) - - // Controller - appController := controllers.NewAppController(appService) - sendController := controllers.NewSendController(sendService) - userController := controllers.NewUserController(userService) - if config.AppBasicAuthCredential != "" { ba := strings.Split(config.AppBasicAuthCredential, ":") if len(ba) != 2 { @@ -97,9 +84,18 @@ func runRest(cmd *cobra.Command, args []string) { })) } - appController.Route(app) - sendController.Route(app) - userController.Route(app) + db := utils.InitWaDB() + cli := utils.InitWaCLI(db) + + // Service + appService := services.NewAppService(cli, db) + sendService := services.NewSendService(cli) + userService := services.NewUserService(cli) + + // Rest + rest.InitRestApp(app, appService) + rest.InitRestSend(app, sendService) + rest.InitRestUser(app, userService) app.Get("/", func(ctx *fiber.Ctx) error { return ctx.Render("index", fiber.Map{ diff --git a/src/controllers/app_controller.go b/src/internal/rest/app_rest.go similarity index 63% rename from src/controllers/app_controller.go rename to src/internal/rest/app_rest.go index 9bbcf77..4b6301b 100644 --- a/src/controllers/app_controller.go +++ b/src/internal/rest/app_rest.go @@ -1,4 +1,4 @@ -package controllers +package rest import ( "fmt" @@ -7,22 +7,21 @@ import ( "github.com/gofiber/fiber/v2" ) -type AppController struct { +type App struct { Service domainApp.IAppService } -func NewAppController(service domainApp.IAppService) AppController { - return AppController{Service: service} -} +func InitRestApp(app *fiber.App, service domainApp.IAppService) App { + rest := App{Service: service} + app.Get("/app/login", rest.Login) + app.Get("/app/logout", rest.Logout) + app.Get("/app/reconnect", rest.Reconnect) + app.Get("/app/devices", rest.Devices) -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) - app.Get("/app/devices", controller.Devices) + return App{Service: service} } -func (controller *AppController) Login(c *fiber.Ctx) error { +func (controller *App) Login(c *fiber.Ctx) error { response, err := controller.Service.Login(c.Context()) utils.PanicIfNeeded(err) @@ -36,7 +35,7 @@ func (controller *AppController) Login(c *fiber.Ctx) error { }) } -func (controller *AppController) Logout(c *fiber.Ctx) error { +func (controller *App) Logout(c *fiber.Ctx) error { err := controller.Service.Logout(c.Context()) utils.PanicIfNeeded(err) @@ -47,7 +46,7 @@ func (controller *AppController) Logout(c *fiber.Ctx) error { }) } -func (controller *AppController) Reconnect(c *fiber.Ctx) error { +func (controller *App) Reconnect(c *fiber.Ctx) error { err := controller.Service.Reconnect(c.Context()) utils.PanicIfNeeded(err) @@ -58,7 +57,7 @@ func (controller *AppController) Reconnect(c *fiber.Ctx) error { }) } -func (controller *AppController) Devices(c *fiber.Ctx) error { +func (controller *App) Devices(c *fiber.Ctx) error { devices, err := controller.Service.FetchDevices(c.Context()) utils.PanicIfNeeded(err) diff --git a/src/controllers/send_controller.go b/src/internal/rest/send_controller.go similarity index 80% rename from src/controllers/send_controller.go rename to src/internal/rest/send_controller.go index a5f03cf..361d09d 100644 --- a/src/controllers/send_controller.go +++ b/src/internal/rest/send_controller.go @@ -1,4 +1,4 @@ -package controllers +package rest import ( domainSend "github.com/aldinokemal/go-whatsapp-web-multidevice/domains/send" @@ -7,23 +7,22 @@ import ( "github.com/gofiber/fiber/v2" ) -type SendController struct { +type Send struct { Service domainSend.ISendService } -func NewSendController(service domainSend.ISendService) SendController { - return SendController{Service: service} -} +func InitRestSend(app *fiber.App, service domainSend.ISendService) Send { + rest := Send{Service: service} + app.Post("/send/message", rest.SendText) + app.Post("/send/image", rest.SendImage) + app.Post("/send/file", rest.SendFile) + app.Post("/send/video", rest.SendVideo) + app.Post("/send/contact", rest.SendContact) -func (controller *SendController) Route(app *fiber.App) { - app.Post("/send/message", controller.SendText) - app.Post("/send/image", controller.SendImage) - app.Post("/send/file", controller.SendFile) - app.Post("/send/video", controller.SendVideo) - app.Post("/send/contact", controller.SendContact) + return rest } -func (controller *SendController) SendText(c *fiber.Ctx) error { +func (controller *Send) SendText(c *fiber.Ctx) error { var request domainSend.MessageRequest err := c.BodyParser(&request) utils.PanicIfNeeded(err) @@ -47,7 +46,7 @@ func (controller *SendController) SendText(c *fiber.Ctx) error { }) } -func (controller *SendController) SendImage(c *fiber.Ctx) error { +func (controller *Send) SendImage(c *fiber.Ctx) error { var request domainSend.ImageRequest request.Compress = true @@ -78,7 +77,7 @@ func (controller *SendController) SendImage(c *fiber.Ctx) error { }) } -func (controller *SendController) SendFile(c *fiber.Ctx) error { +func (controller *Send) SendFile(c *fiber.Ctx) error { var request domainSend.FileRequest err := c.BodyParser(&request) utils.PanicIfNeeded(err) @@ -107,7 +106,7 @@ func (controller *SendController) SendFile(c *fiber.Ctx) error { }) } -func (controller *SendController) SendVideo(c *fiber.Ctx) error { +func (controller *Send) SendVideo(c *fiber.Ctx) error { var request domainSend.VideoRequest err := c.BodyParser(&request) utils.PanicIfNeeded(err) @@ -136,7 +135,7 @@ func (controller *SendController) SendVideo(c *fiber.Ctx) error { }) } -func (controller *SendController) SendContact(c *fiber.Ctx) error { +func (controller *Send) SendContact(c *fiber.Ctx) error { var request domainSend.ContactRequest err := c.BodyParser(&request) utils.PanicIfNeeded(err) diff --git a/src/controllers/user_controller.go b/src/internal/rest/user_controller.go similarity index 73% rename from src/controllers/user_controller.go rename to src/internal/rest/user_controller.go index 787bc6e..381695a 100644 --- a/src/controllers/user_controller.go +++ b/src/internal/rest/user_controller.go @@ -1,4 +1,4 @@ -package controllers +package rest import ( domainUser "github.com/aldinokemal/go-whatsapp-web-multidevice/domains/user" @@ -7,22 +7,28 @@ import ( "github.com/gofiber/fiber/v2" ) -type UserController struct { +type User struct { Service domainUser.IUserService } -func NewUserController(service domainUser.IUserService) UserController { - return UserController{Service: service} +func InitRestUser(app *fiber.App, service domainUser.IUserService) User { + rest := User{Service: service} + app.Get("/user/info", rest.UserInfo) + app.Get("/user/avatar", rest.UserAvatar) + app.Get("/user/my/privacy", rest.UserMyPrivacySetting) + app.Get("/user/my/groups", rest.UserMyListGroups) + + return rest } -func (controller *UserController) Route(app *fiber.App) { +func (controller *User) Route(app *fiber.App) { app.Get("/user/info", controller.UserInfo) app.Get("/user/avatar", controller.UserAvatar) app.Get("/user/my/privacy", controller.UserMyPrivacySetting) app.Get("/user/my/groups", controller.UserMyListGroups) } -func (controller *UserController) UserInfo(c *fiber.Ctx) error { +func (controller *User) UserInfo(c *fiber.Ctx) error { var request domainUser.InfoRequest err := c.QueryParser(&request) utils.PanicIfNeeded(err) @@ -41,7 +47,7 @@ func (controller *UserController) UserInfo(c *fiber.Ctx) error { }) } -func (controller *UserController) UserAvatar(c *fiber.Ctx) error { +func (controller *User) UserAvatar(c *fiber.Ctx) error { var request domainUser.AvatarRequest err := c.QueryParser(&request) utils.PanicIfNeeded(err) @@ -60,7 +66,7 @@ func (controller *UserController) UserAvatar(c *fiber.Ctx) error { }) } -func (controller *UserController) UserMyPrivacySetting(c *fiber.Ctx) error { +func (controller *User) UserMyPrivacySetting(c *fiber.Ctx) error { response, err := controller.Service.MyPrivacySetting(c.Context()) utils.PanicIfNeeded(err) @@ -71,7 +77,7 @@ func (controller *UserController) UserMyPrivacySetting(c *fiber.Ctx) error { }) } -func (controller *UserController) UserMyListGroups(c *fiber.Ctx) error { +func (controller *User) UserMyListGroups(c *fiber.Ctx) error { response, err := controller.Service.MyListGroups(c.Context()) utils.PanicIfNeeded(err)