6 changed files with 223 additions and 4 deletions
-
59controllers/user_controller.go
-
10main.go
-
11services/user_service.go
-
79services/user_service_impl.go
-
45structs/send_struct.go
-
23validations/send_validation.go
@ -0,0 +1,59 @@ |
|||||
|
package controllers |
||||
|
|
||||
|
import ( |
||||
|
"github.com/aldinokemal/go-whatsapp-web-multidevice/services" |
||||
|
"github.com/aldinokemal/go-whatsapp-web-multidevice/structs" |
||||
|
"github.com/aldinokemal/go-whatsapp-web-multidevice/utils" |
||||
|
"github.com/aldinokemal/go-whatsapp-web-multidevice/validations" |
||||
|
"github.com/gofiber/fiber/v2" |
||||
|
) |
||||
|
|
||||
|
type UserController struct { |
||||
|
Service services.UserService |
||||
|
} |
||||
|
|
||||
|
func NewUserController(service services.UserService) UserController { |
||||
|
return UserController{Service: service} |
||||
|
} |
||||
|
|
||||
|
func (controller *UserController) Route(app *fiber.App) { |
||||
|
app.Get("/user/info", controller.UserInfo) |
||||
|
app.Get("/user/avatar", controller.UserAvatar) |
||||
|
} |
||||
|
|
||||
|
func (controller *UserController) UserInfo(c *fiber.Ctx) error { |
||||
|
var request structs.UserInfoRequest |
||||
|
err := c.QueryParser(&request) |
||||
|
utils.PanicIfNeeded(err) |
||||
|
|
||||
|
// add validation send message
|
||||
|
validations.ValidateUserInfo(request) |
||||
|
|
||||
|
request.PhoneNumber = request.PhoneNumber + "@s.whatsapp.net" |
||||
|
response, err := controller.Service.UserInfo(c, request) |
||||
|
utils.PanicIfNeeded(err) |
||||
|
|
||||
|
return c.JSON(utils.ResponseData{ |
||||
|
Code: 200, |
||||
|
Message: "Success", |
||||
|
Results: response, |
||||
|
}) |
||||
|
} |
||||
|
func (controller *UserController) UserAvatar(c *fiber.Ctx) error { |
||||
|
var request structs.UserAvatarRequest |
||||
|
err := c.QueryParser(&request) |
||||
|
utils.PanicIfNeeded(err) |
||||
|
|
||||
|
// add validation send message
|
||||
|
validations.ValidateUserAvatar(request) |
||||
|
|
||||
|
request.PhoneNumber = request.PhoneNumber + "@s.whatsapp.net" |
||||
|
response, err := controller.Service.UserAvatar(c, request) |
||||
|
utils.PanicIfNeeded(err) |
||||
|
|
||||
|
return c.JSON(utils.ResponseData{ |
||||
|
Code: 200, |
||||
|
Message: "Success", |
||||
|
Results: response, |
||||
|
}) |
||||
|
} |
||||
@ -0,0 +1,11 @@ |
|||||
|
package services |
||||
|
|
||||
|
import ( |
||||
|
"github.com/aldinokemal/go-whatsapp-web-multidevice/structs" |
||||
|
"github.com/gofiber/fiber/v2" |
||||
|
) |
||||
|
|
||||
|
type UserService interface { |
||||
|
UserInfo(c *fiber.Ctx, request structs.UserInfoRequest) (response structs.UserInfoResponse, err error) |
||||
|
UserAvatar(c *fiber.Ctx, request structs.UserAvatarRequest) (response structs.UserAvatarResponse, err error) |
||||
|
} |
||||
@ -0,0 +1,79 @@ |
|||||
|
package services |
||||
|
|
||||
|
import ( |
||||
|
"errors" |
||||
|
"fmt" |
||||
|
"github.com/aldinokemal/go-whatsapp-web-multidevice/structs" |
||||
|
"github.com/aldinokemal/go-whatsapp-web-multidevice/utils" |
||||
|
"github.com/gofiber/fiber/v2" |
||||
|
"go.mau.fi/whatsmeow" |
||||
|
"go.mau.fi/whatsmeow/types" |
||||
|
) |
||||
|
|
||||
|
type UserServiceImpl struct { |
||||
|
WaCli *whatsmeow.Client |
||||
|
} |
||||
|
|
||||
|
func NewUserService(waCli *whatsmeow.Client) UserService { |
||||
|
return &UserServiceImpl{ |
||||
|
WaCli: waCli, |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
func (service UserServiceImpl) UserInfo(c *fiber.Ctx, request structs.UserInfoRequest) (response structs.UserInfoResponse, err error) { |
||||
|
var jids []types.JID |
||||
|
jid, ok := utils.ParseJID(request.PhoneNumber) |
||||
|
if !ok { |
||||
|
return response, errors.New("invalid JID " + request.PhoneNumber) |
||||
|
} |
||||
|
|
||||
|
jids = append(jids, jid) |
||||
|
resp, err := service.WaCli.GetUserInfo(jids) |
||||
|
if err != nil { |
||||
|
return response, err |
||||
|
} |
||||
|
|
||||
|
for _, userInfo := range resp { |
||||
|
var device []structs.UserInfoResponseDataDevice |
||||
|
for _, j := range userInfo.Devices { |
||||
|
device = append(device, structs.UserInfoResponseDataDevice{ |
||||
|
User: j.User, |
||||
|
Agent: j.Agent, |
||||
|
Device: j.Device, |
||||
|
Server: j.Server, |
||||
|
AD: j.AD, |
||||
|
}) |
||||
|
} |
||||
|
|
||||
|
data := structs.UserInfoResponseData{ |
||||
|
Status: userInfo.Status, |
||||
|
PictureID: userInfo.PictureID, |
||||
|
Devices: device, |
||||
|
} |
||||
|
if userInfo.VerifiedName != nil { |
||||
|
data.VerifiedName = fmt.Sprintf("%v", *userInfo.VerifiedName) |
||||
|
} |
||||
|
response.Data = append(response.Data, data) |
||||
|
} |
||||
|
|
||||
|
return response, nil |
||||
|
} |
||||
|
|
||||
|
func (service UserServiceImpl) UserAvatar(c *fiber.Ctx, request structs.UserAvatarRequest) (response structs.UserAvatarResponse, err error) { |
||||
|
jid, ok := utils.ParseJID(request.PhoneNumber) |
||||
|
if !ok { |
||||
|
return response, errors.New("invalid JID " + request.PhoneNumber) |
||||
|
} |
||||
|
pic, err := service.WaCli.GetProfilePictureInfo(jid, false) |
||||
|
if err != nil { |
||||
|
return response, err |
||||
|
} else if pic == nil { |
||||
|
return response, errors.New("no avatar found") |
||||
|
} else { |
||||
|
response.URL = pic.URL |
||||
|
response.ID = pic.ID |
||||
|
response.Type = pic.Type |
||||
|
|
||||
|
return response, nil |
||||
|
} |
||||
|
} |
||||
Write
Preview
Loading…
Cancel
Save
Reference in new issue