Browse Source

feat: add fetch all connected devices

pull/28/head
Aldino Kemal 3 years ago
parent
commit
364a9aafc6
  1. 2
      src/cmd/root.go
  2. 12
      src/controllers/app_controller.go
  3. 1
      src/domains/app/app.go
  4. 6
      src/domains/app/devices.go
  5. 34
      src/services/app_service.go
  6. 2
      src/utils/whatsapp.go

2
src/cmd/root.go

@ -75,7 +75,7 @@ func runRest(cmd *cobra.Command, args []string) {
cli := utils.InitWaCLI(db)
// Service
appService := services.NewAppService(cli)
appService := services.NewAppService(cli, db)
sendService := services.NewSendService(cli)
userService := services.NewUserService(cli)

12
src/controllers/app_controller.go

@ -19,6 +19,7 @@ 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)
}
func (controller *AppController) Login(c *fiber.Ctx) error {
@ -56,3 +57,14 @@ func (controller *AppController) Reconnect(c *fiber.Ctx) error {
Results: nil,
})
}
func (controller *AppController) Devices(c *fiber.Ctx) error {
devices, err := controller.Service.FetchDevices(c.Context())
utils.PanicIfNeeded(err)
return c.JSON(utils.ResponseData{
Code: 200,
Message: "Fetch device success",
Results: devices,
})
}

1
src/domains/app/app.go

@ -8,4 +8,5 @@ type IAppService interface {
Login(ctx context.Context) (response LoginResponse, err error)
Logout(ctx context.Context) (err error)
Reconnect(ctx context.Context) (err error)
FetchDevices(ctx context.Context) (response []FetchDevicesResponse, err error)
}

6
src/domains/app/devices.go

@ -0,0 +1,6 @@
package app
type FetchDevicesResponse struct {
Name string
Device string
}

34
src/services/app_service.go

@ -9,6 +9,7 @@ import (
fiberUtils "github.com/gofiber/fiber/v2/utils"
"github.com/skip2/go-qrcode"
"go.mau.fi/whatsmeow"
"go.mau.fi/whatsmeow/store/sqlstore"
"os"
"path/filepath"
"time"
@ -16,11 +17,13 @@ import (
type serviceApp struct {
WaCli *whatsmeow.Client
db *sqlstore.Container
}
func NewAppService(waCli *whatsmeow.Client) domainApp.IAppService {
func NewAppService(waCli *whatsmeow.Client, db *sqlstore.Container) domainApp.IAppService {
return &serviceApp{
WaCli: waCli,
db: db,
}
}
@ -85,7 +88,7 @@ func (service serviceApp) Logout(_ context.Context) (err error) {
// delete history
files, err := filepath.Glob("./history-*")
if err != nil {
panic(err)
return err
}
for _, f := range files {
@ -97,7 +100,7 @@ func (service serviceApp) Logout(_ context.Context) (err error) {
// delete qr images
qrImages, err := filepath.Glob("./statics/images/qrcode/scan-*")
if err != nil {
panic(err)
return err
}
for _, f := range qrImages {
@ -115,3 +118,28 @@ func (service serviceApp) Reconnect(_ context.Context) (err error) {
service.WaCli.Disconnect()
return service.WaCli.Connect()
}
func (service serviceApp) FetchDevices(ctx context.Context) (response []domainApp.FetchDevicesResponse, err error) {
if service.WaCli == nil {
return response, errors.New("wa cli nil cok")
}
devices, err := service.db.GetAllDevices()
if err != nil {
return nil, err
}
for _, device := range devices {
var d domainApp.FetchDevicesResponse
d.Device = device.ID.String()
if device.PushName != "" {
d.Name = device.PushName
} else {
d.Name = device.BusinessName
}
response = append(response, d)
}
return response, nil
}

2
src/utils/whatsapp.go

@ -108,6 +108,8 @@ func InitWaCLI(storeContainer *sqlstore.Container) *whatsmeow.Client {
store.DeviceProps.PlatformType = &config.AppPlatform
store.DeviceProps.Os = &osName
cli = whatsmeow.NewClient(device, waLog.Stdout("Client", config.WhatsappLogLevel, true))
cli.EnableAutoReconnect = true
cli.AutoTrustIdentity = true
cli.AddEventHandler(handler)
return cli

Loading…
Cancel
Save