From 1d53adfaeaf7c55532009277ac862db09c1dcd57 Mon Sep 17 00:00:00 2001 From: Aldino Kemal Date: Sun, 20 Nov 2022 09:26:35 +0700 Subject: [PATCH] fix: context parsing --- src/controllers/app_controller.go | 6 +-- src/controllers/send_controller.go | 10 ++-- src/controllers/user_controller.go | 8 +-- src/domains/app/app.go | 54 ++----------------- src/domains/send/send.go | 12 ++--- src/domains/user/user.go | 10 ++-- src/services/app_service.go | 7 ++- src/services/send_service.go | 28 +++++----- .../{user_service_impl.go => user_service.go} | 10 ++-- 9 files changed, 49 insertions(+), 96 deletions(-) rename src/services/{user_service_impl.go => user_service.go} (81%) diff --git a/src/controllers/app_controller.go b/src/controllers/app_controller.go index 08d25b6..5381095 100644 --- a/src/controllers/app_controller.go +++ b/src/controllers/app_controller.go @@ -22,7 +22,7 @@ func (controller *AppController) Route(app *fiber.App) { } func (controller *AppController) Login(c *fiber.Ctx) error { - response, err := controller.Service.Login(c) + response, err := controller.Service.Login(c.Context()) utils.PanicIfNeeded(err) return c.JSON(utils.ResponseData{ @@ -36,7 +36,7 @@ func (controller *AppController) Login(c *fiber.Ctx) error { } func (controller *AppController) Logout(c *fiber.Ctx) error { - err := controller.Service.Logout(c) + err := controller.Service.Logout(c.Context()) utils.PanicIfNeeded(err) return c.JSON(utils.ResponseData{ @@ -47,7 +47,7 @@ func (controller *AppController) Logout(c *fiber.Ctx) error { } func (controller *AppController) Reconnect(c *fiber.Ctx) error { - err := controller.Service.Reconnect(c) + err := controller.Service.Reconnect(c.Context()) utils.PanicIfNeeded(err) return c.JSON(utils.ResponseData{ diff --git a/src/controllers/send_controller.go b/src/controllers/send_controller.go index 7537c95..a5f03cf 100644 --- a/src/controllers/send_controller.go +++ b/src/controllers/send_controller.go @@ -37,7 +37,7 @@ func (controller *SendController) SendText(c *fiber.Ctx) error { request.Phone = request.Phone + "@s.whatsapp.net" } - response, err := controller.Service.SendText(c, request) + response, err := controller.Service.SendText(c.Context(), request) utils.PanicIfNeeded(err) return c.JSON(utils.ResponseData{ @@ -68,7 +68,7 @@ func (controller *SendController) SendImage(c *fiber.Ctx) error { request.Phone = request.Phone + "@s.whatsapp.net" } - response, err := controller.Service.SendImage(c, request) + response, err := controller.Service.SendImage(c.Context(), request) utils.PanicIfNeeded(err) return c.JSON(utils.ResponseData{ @@ -97,7 +97,7 @@ func (controller *SendController) SendFile(c *fiber.Ctx) error { request.Phone = request.Phone + "@s.whatsapp.net" } - response, err := controller.Service.SendFile(c, request) + response, err := controller.Service.SendFile(c.Context(), request) utils.PanicIfNeeded(err) return c.JSON(utils.ResponseData{ @@ -126,7 +126,7 @@ func (controller *SendController) SendVideo(c *fiber.Ctx) error { request.Phone = request.Phone + "@s.whatsapp.net" } - response, err := controller.Service.SendVideo(c, request) + response, err := controller.Service.SendVideo(c.Context(), request) utils.PanicIfNeeded(err) return c.JSON(utils.ResponseData{ @@ -150,7 +150,7 @@ func (controller *SendController) SendContact(c *fiber.Ctx) error { request.Phone = request.Phone + "@s.whatsapp.net" } - response, err := controller.Service.SendContact(c, request) + response, err := controller.Service.SendContact(c.Context(), request) utils.PanicIfNeeded(err) return c.JSON(utils.ResponseData{ diff --git a/src/controllers/user_controller.go b/src/controllers/user_controller.go index 0489682..787bc6e 100644 --- a/src/controllers/user_controller.go +++ b/src/controllers/user_controller.go @@ -31,7 +31,7 @@ func (controller *UserController) UserInfo(c *fiber.Ctx) error { validations.ValidateUserInfo(request) request.Phone = request.Phone + "@s.whatsapp.net" - response, err := controller.Service.Info(c, request) + response, err := controller.Service.Info(c.Context(), request) utils.PanicIfNeeded(err) return c.JSON(utils.ResponseData{ @@ -50,7 +50,7 @@ func (controller *UserController) UserAvatar(c *fiber.Ctx) error { validations.ValidateUserAvatar(request) request.Phone = request.Phone + "@s.whatsapp.net" - response, err := controller.Service.Avatar(c, request) + response, err := controller.Service.Avatar(c.Context(), request) utils.PanicIfNeeded(err) return c.JSON(utils.ResponseData{ @@ -61,7 +61,7 @@ func (controller *UserController) UserAvatar(c *fiber.Ctx) error { } func (controller *UserController) UserMyPrivacySetting(c *fiber.Ctx) error { - response, err := controller.Service.MyPrivacySetting(c) + response, err := controller.Service.MyPrivacySetting(c.Context()) utils.PanicIfNeeded(err) return c.JSON(utils.ResponseData{ @@ -72,7 +72,7 @@ func (controller *UserController) UserMyPrivacySetting(c *fiber.Ctx) error { } func (controller *UserController) UserMyListGroups(c *fiber.Ctx) error { - response, err := controller.Service.MyListGroups(c) + response, err := controller.Service.MyListGroups(c.Context()) utils.PanicIfNeeded(err) return c.JSON(utils.ResponseData{ diff --git a/src/domains/app/app.go b/src/domains/app/app.go index a945bcc..324d227 100644 --- a/src/domains/app/app.go +++ b/src/domains/app/app.go @@ -1,57 +1,11 @@ package app import ( - "github.com/gofiber/fiber/v2" - "go.mau.fi/whatsmeow/types" + "context" ) type IAppService interface { - Login(c *fiber.Ctx) (response LoginResponse, err error) - Logout(c *fiber.Ctx) (err error) - Reconnect(c *fiber.Ctx) (err error) -} - -type UserInfoRequest struct { - Phone string `json:"phone" query:"phone"` -} - -type UserInfoResponseDataDevice struct { - User string - Agent uint8 - Device string - Server string - AD bool -} - -type UserInfoResponseData struct { - VerifiedName string `json:"verified_name"` - Status string `json:"status"` - PictureID string `json:"picture_id"` - Devices []UserInfoResponseDataDevice `json:"devices"` -} - -type UserInfoResponse struct { - Data []UserInfoResponseData `json:"data"` -} - -type UserAvatarRequest struct { - Phone string `json:"phone" query:"phone"` -} - -type UserAvatarResponse struct { - URL string `json:"url"` - ID string `json:"id"` - Type string `json:"type"` -} - -type UserMyPrivacySettingResponse struct { - GroupAdd string `json:"group_add"` - LastSeen string `json:"last_seen"` - Status string `json:"status"` - Profile string `json:"profile"` - ReadReceipts string `json:"read_receipts"` -} - -type UserMyListGroupsResponse struct { - Data []types.GroupInfo `json:"data"` + Login(ctx context.Context) (response LoginResponse, err error) + Logout(ctx context.Context) (err error) + Reconnect(ctx context.Context) (err error) } diff --git a/src/domains/send/send.go b/src/domains/send/send.go index a8f9139..8e6b8ef 100644 --- a/src/domains/send/send.go +++ b/src/domains/send/send.go @@ -1,7 +1,7 @@ package send import ( - "github.com/gofiber/fiber/v2" + "context" ) type Type string @@ -10,9 +10,9 @@ const TypeUser Type = "user" const TypeGroup Type = "group" type ISendService interface { - SendText(c *fiber.Ctx, request MessageRequest) (response MessageResponse, err error) - SendImage(c *fiber.Ctx, request ImageRequest) (response ImageResponse, err error) - SendFile(c *fiber.Ctx, request FileRequest) (response FileResponse, err error) - SendVideo(c *fiber.Ctx, request VideoRequest) (response VideoResponse, err error) - SendContact(c *fiber.Ctx, request ContactRequest) (response ContactResponse, err error) + SendText(ctx context.Context, request MessageRequest) (response MessageResponse, err error) + SendImage(ctx context.Context, request ImageRequest) (response ImageResponse, err error) + SendFile(ctx context.Context, request FileRequest) (response FileResponse, err error) + SendVideo(ctx context.Context, request VideoRequest) (response VideoResponse, err error) + SendContact(ctx context.Context, request ContactRequest) (response ContactResponse, err error) } diff --git a/src/domains/user/user.go b/src/domains/user/user.go index 54fcaac..dabca89 100644 --- a/src/domains/user/user.go +++ b/src/domains/user/user.go @@ -1,12 +1,12 @@ package user import ( - "github.com/gofiber/fiber/v2" + "context" ) type IUserService interface { - Info(c *fiber.Ctx, request InfoRequest) (response InfoResponse, err error) - Avatar(c *fiber.Ctx, request AvatarRequest) (response AvatarResponse, err error) - MyListGroups(c *fiber.Ctx) (response MyListGroupsResponse, err error) - MyPrivacySetting(c *fiber.Ctx) (response MyPrivacySettingResponse, err error) + Info(ctx context.Context, request InfoRequest) (response InfoResponse, err error) + Avatar(ctx context.Context, request AvatarRequest) (response AvatarResponse, err error) + MyListGroups(ctx context.Context) (response MyListGroupsResponse, err error) + MyPrivacySetting(ctx context.Context) (response MyPrivacySettingResponse, err error) } diff --git a/src/services/app_service.go b/src/services/app_service.go index 45dda35..d77d1ff 100644 --- a/src/services/app_service.go +++ b/src/services/app_service.go @@ -6,7 +6,6 @@ import ( "fmt" "github.com/aldinokemal/go-whatsapp-web-multidevice/config" domainApp "github.com/aldinokemal/go-whatsapp-web-multidevice/domains/app" - "github.com/gofiber/fiber/v2" fiberUtils "github.com/gofiber/fiber/v2/utils" "github.com/skip2/go-qrcode" "go.mau.fi/whatsmeow" @@ -25,7 +24,7 @@ func NewAppService(waCli *whatsmeow.Client) domainApp.IAppService { } } -func (service serviceApp) Login(c *fiber.Ctx) (response domainApp.LoginResponse, err error) { +func (service serviceApp) Login(_ context.Context) (response domainApp.LoginResponse, err error) { if service.WaCli == nil { return response, errors.New("wa cli nil cok") } @@ -82,7 +81,7 @@ func (service serviceApp) Login(c *fiber.Ctx) (response domainApp.LoginResponse, return response, nil } -func (service serviceApp) Logout(c *fiber.Ctx) (err error) { +func (service serviceApp) Logout(_ context.Context) (err error) { // delete history files, err := filepath.Glob("./history-*") if err != nil { @@ -112,7 +111,7 @@ func (service serviceApp) Logout(c *fiber.Ctx) (err error) { return } -func (service serviceApp) Reconnect(c *fiber.Ctx) (err error) { +func (service serviceApp) Reconnect(_ context.Context) (err error) { service.WaCli.Disconnect() return service.WaCli.Connect() } diff --git a/src/services/send_service.go b/src/services/send_service.go index 3b0ae44..d08456f 100644 --- a/src/services/send_service.go +++ b/src/services/send_service.go @@ -7,9 +7,9 @@ import ( "github.com/aldinokemal/go-whatsapp-web-multidevice/config" domainSend "github.com/aldinokemal/go-whatsapp-web-multidevice/domains/send" "github.com/aldinokemal/go-whatsapp-web-multidevice/utils" - "github.com/gofiber/fiber/v2" fiberUtils "github.com/gofiber/fiber/v2/utils" "github.com/h2non/bimg" + "github.com/valyala/fasthttp" "go.mau.fi/whatsmeow" waProto "go.mau.fi/whatsmeow/binary/proto" "google.golang.org/protobuf/proto" @@ -28,7 +28,7 @@ func NewSendService(waCli *whatsmeow.Client) domainSend.ISendService { } } -func (service serviceSend) SendText(c *fiber.Ctx, request domainSend.MessageRequest) (response domainSend.MessageResponse, err error) { +func (service serviceSend) SendText(ctx context.Context, request domainSend.MessageRequest) (response domainSend.MessageResponse, err error) { utils.MustLogin(service.WaCli) recipient, ok := utils.ParseJID(request.Phone) @@ -36,7 +36,7 @@ func (service serviceSend) SendText(c *fiber.Ctx, request domainSend.MessageRequ return response, errors.New("invalid JID " + request.Phone) } msg := &waProto.Message{Conversation: proto.String(request.Message)} - ts, err := service.WaCli.SendMessage(c.Context(), recipient, "", msg) + ts, err := service.WaCli.SendMessage(ctx, recipient, "", msg) if err != nil { return response, err } else { @@ -45,7 +45,7 @@ func (service serviceSend) SendText(c *fiber.Ctx, request domainSend.MessageRequ return response, nil } -func (service serviceSend) SendImage(c *fiber.Ctx, request domainSend.ImageRequest) (response domainSend.ImageResponse, err error) { +func (service serviceSend) SendImage(ctx context.Context, request domainSend.ImageRequest) (response domainSend.ImageResponse, err error) { utils.MustLogin(service.WaCli) var ( @@ -56,7 +56,7 @@ func (service serviceSend) SendImage(c *fiber.Ctx, request domainSend.ImageReque // Save image to server oriImagePath := fmt.Sprintf("%s/%s", config.PathSendItems, request.Image.Filename) - err = c.SaveFile(request.Image, oriImagePath) + err = fasthttp.SaveMultipartFile(request.Image, oriImagePath) if err != nil { return response, err } @@ -123,7 +123,7 @@ func (service serviceSend) SendImage(c *fiber.Ctx, request domainSend.ImageReque FileLength: proto.Uint64(uint64(len(dataWaImage))), ViewOnce: proto.Bool(request.ViewOnce), }} - ts, err := service.WaCli.SendMessage(c.Context(), dataWaRecipient, "", msg) + ts, err := service.WaCli.SendMessage(ctx, dataWaRecipient, "", msg) go func() { errDelete := utils.RemoveFile(0, deletedItems...) if errDelete != nil { @@ -138,11 +138,11 @@ func (service serviceSend) SendImage(c *fiber.Ctx, request domainSend.ImageReque } } -func (service serviceSend) SendFile(c *fiber.Ctx, request domainSend.FileRequest) (response domainSend.FileResponse, err error) { +func (service serviceSend) SendFile(ctx context.Context, request domainSend.FileRequest) (response domainSend.FileResponse, err error) { utils.MustLogin(service.WaCli) oriFilePath := fmt.Sprintf("%s/%s", config.PathSendItems, request.File.Filename) - err = c.SaveFile(request.File, oriFilePath) + err = fasthttp.SaveMultipartFile(request.File, oriFilePath) if err != nil { return response, err } @@ -173,7 +173,7 @@ func (service serviceSend) SendFile(c *fiber.Ctx, request domainSend.FileRequest FileEncSha256: uploadedFile.FileEncSHA256, DirectPath: proto.String(uploadedFile.DirectPath), }} - ts, err := service.WaCli.SendMessage(c.Context(), dataWaRecipient, "", msg) + ts, err := service.WaCli.SendMessage(ctx, dataWaRecipient, "", msg) go func() { errDelete := utils.RemoveFile(0, oriFilePath) if errDelete != nil { @@ -188,7 +188,7 @@ func (service serviceSend) SendFile(c *fiber.Ctx, request domainSend.FileRequest } } -func (service serviceSend) SendVideo(c *fiber.Ctx, request domainSend.VideoRequest) (response domainSend.VideoResponse, err error) { +func (service serviceSend) SendVideo(ctx context.Context, request domainSend.VideoRequest) (response domainSend.VideoResponse, err error) { utils.MustLogin(service.WaCli) var ( @@ -200,7 +200,7 @@ func (service serviceSend) SendVideo(c *fiber.Ctx, request domainSend.VideoReque generateUUID := fiberUtils.UUIDv4() // Save video to server oriVideoPath := fmt.Sprintf("%s/%s", config.PathSendItems, generateUUID+request.Video.Filename) - err = c.SaveFile(request.Video, oriVideoPath) + err = fasthttp.SaveMultipartFile(request.Video, oriVideoPath) if err != nil { return response, err } @@ -272,7 +272,7 @@ func (service serviceSend) SendVideo(c *fiber.Ctx, request domainSend.VideoReque ViewOnce: proto.Bool(request.ViewOnce), JpegThumbnail: dataWaThumbnail, }} - ts, err := service.WaCli.SendMessage(c.Context(), dataWaRecipient, "", msg) + ts, err := service.WaCli.SendMessage(ctx, dataWaRecipient, "", msg) go func() { errDelete := utils.RemoveFile(0, deletedItems...) if errDelete != nil { @@ -287,7 +287,7 @@ func (service serviceSend) SendVideo(c *fiber.Ctx, request domainSend.VideoReque } } -func (service serviceSend) SendContact(c *fiber.Ctx, request domainSend.ContactRequest) (response domainSend.ContactResponse, err error) { +func (service serviceSend) SendContact(ctx context.Context, request domainSend.ContactRequest) (response domainSend.ContactResponse, err error) { utils.MustLogin(service.WaCli) recipient, ok := utils.ParseJID(request.Phone) @@ -300,7 +300,7 @@ func (service serviceSend) SendContact(c *fiber.Ctx, request domainSend.ContactR DisplayName: proto.String(request.ContactName), Vcard: proto.String(msgVCard), }} - ts, err := service.WaCli.SendMessage(c.Context(), recipient, "", msg) + ts, err := service.WaCli.SendMessage(ctx, recipient, "", msg) if err != nil { return response, err } else { diff --git a/src/services/user_service_impl.go b/src/services/user_service.go similarity index 81% rename from src/services/user_service_impl.go rename to src/services/user_service.go index 7adf34f..eb82323 100644 --- a/src/services/user_service_impl.go +++ b/src/services/user_service.go @@ -1,11 +1,11 @@ package services import ( + "context" "errors" "fmt" domainUser "github.com/aldinokemal/go-whatsapp-web-multidevice/domains/user" "github.com/aldinokemal/go-whatsapp-web-multidevice/utils" - "github.com/gofiber/fiber/v2" "go.mau.fi/whatsmeow" "go.mau.fi/whatsmeow/types" ) @@ -20,7 +20,7 @@ func NewUserService(waCli *whatsmeow.Client) domainUser.IUserService { } } -func (service UserServiceImpl) Info(_ *fiber.Ctx, request domainUser.InfoRequest) (response domainUser.InfoResponse, err error) { +func (service UserServiceImpl) Info(_ context.Context, request domainUser.InfoRequest) (response domainUser.InfoResponse, err error) { utils.MustLogin(service.WaCli) var jids []types.JID @@ -61,7 +61,7 @@ func (service UserServiceImpl) Info(_ *fiber.Ctx, request domainUser.InfoRequest return response, nil } -func (service UserServiceImpl) Avatar(c *fiber.Ctx, request domainUser.AvatarRequest) (response domainUser.AvatarResponse, err error) { +func (service UserServiceImpl) Avatar(_ context.Context, request domainUser.AvatarRequest) (response domainUser.AvatarResponse, err error) { utils.MustLogin(service.WaCli) jid, ok := utils.ParseJID(request.Phone) @@ -82,7 +82,7 @@ func (service UserServiceImpl) Avatar(c *fiber.Ctx, request domainUser.AvatarReq } } -func (service UserServiceImpl) MyListGroups(_ *fiber.Ctx) (response domainUser.MyListGroupsResponse, err error) { +func (service UserServiceImpl) MyListGroups(_ context.Context) (response domainUser.MyListGroupsResponse, err error) { utils.MustLogin(service.WaCli) groups, err := service.WaCli.GetJoinedGroups() @@ -98,7 +98,7 @@ func (service UserServiceImpl) MyListGroups(_ *fiber.Ctx) (response domainUser.M return response, nil } -func (service UserServiceImpl) MyPrivacySetting(_ *fiber.Ctx) (response domainUser.MyPrivacySettingResponse, err error) { +func (service UserServiceImpl) MyPrivacySetting(_ context.Context) (response domainUser.MyPrivacySettingResponse, err error) { utils.MustLogin(service.WaCli) resp, err := service.WaCli.TryFetchPrivacySettings(false)