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) cli := utils.InitWaCLI(db)
// Service // Service
appService := services.NewAppService(cli)
appService := services.NewAppService(cli, db)
sendService := services.NewSendService(cli) sendService := services.NewSendService(cli)
userService := services.NewUserService(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/login", controller.Login)
app.Get("/app/logout", controller.Logout) app.Get("/app/logout", controller.Logout)
app.Get("/app/reconnect", controller.Reconnect) app.Get("/app/reconnect", controller.Reconnect)
app.Get("/app/devices", controller.Devices)
} }
func (controller *AppController) Login(c *fiber.Ctx) error { func (controller *AppController) Login(c *fiber.Ctx) error {
@ -56,3 +57,14 @@ func (controller *AppController) Reconnect(c *fiber.Ctx) error {
Results: nil, 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) Login(ctx context.Context) (response LoginResponse, err error)
Logout(ctx context.Context) (err error) Logout(ctx context.Context) (err error)
Reconnect(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" fiberUtils "github.com/gofiber/fiber/v2/utils"
"github.com/skip2/go-qrcode" "github.com/skip2/go-qrcode"
"go.mau.fi/whatsmeow" "go.mau.fi/whatsmeow"
"go.mau.fi/whatsmeow/store/sqlstore"
"os" "os"
"path/filepath" "path/filepath"
"time" "time"
@ -16,11 +17,13 @@ import (
type serviceApp struct { type serviceApp struct {
WaCli *whatsmeow.Client 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{ return &serviceApp{
WaCli: waCli, WaCli: waCli,
db: db,
} }
} }
@ -85,7 +88,7 @@ func (service serviceApp) Logout(_ context.Context) (err error) {
// delete history // delete history
files, err := filepath.Glob("./history-*") files, err := filepath.Glob("./history-*")
if err != nil { if err != nil {
panic(err)
return err
} }
for _, f := range files { for _, f := range files {
@ -97,7 +100,7 @@ func (service serviceApp) Logout(_ context.Context) (err error) {
// delete qr images // delete qr images
qrImages, err := filepath.Glob("./statics/images/qrcode/scan-*") qrImages, err := filepath.Glob("./statics/images/qrcode/scan-*")
if err != nil { if err != nil {
panic(err)
return err
} }
for _, f := range qrImages { for _, f := range qrImages {
@ -115,3 +118,28 @@ func (service serviceApp) Reconnect(_ context.Context) (err error) {
service.WaCli.Disconnect() service.WaCli.Disconnect()
return service.WaCli.Connect() 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.PlatformType = &config.AppPlatform
store.DeviceProps.Os = &osName store.DeviceProps.Os = &osName
cli = whatsmeow.NewClient(device, waLog.Stdout("Client", config.WhatsappLogLevel, true)) cli = whatsmeow.NewClient(device, waLog.Stdout("Client", config.WhatsappLogLevel, true))
cli.EnableAutoReconnect = true
cli.AutoTrustIdentity = true
cli.AddEventHandler(handler) cli.AddEventHandler(handler)
return cli return cli

Loading…
Cancel
Save