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