Browse Source

feat: add revoke

pull/31/head
Aldino Kemal 3 years ago
parent
commit
6bd60a5433
  1. 12
      src/domains/send/message.go
  2. 1
      src/domains/send/send.go
  3. 23
      src/internal/rest/send_controller.go
  4. 20
      src/services/send_service.go
  5. 4
      src/utils/whatsapp.go
  6. 15
      src/validations/send_validation.go

12
src/domains/send/message.go

@ -0,0 +1,12 @@
package send
type RevokeRequest struct {
MessageID string `json:"message_id" uri:"message_id"`
Phone string `json:"phone" form:"phone"`
Type Type `json:"type" form:"type"`
}
type RevokeResponse struct {
MessageID string `json:"message_id"`
Status string `json:"status"`
}

1
src/domains/send/send.go

@ -16,4 +16,5 @@ type ISendService interface {
SendVideo(ctx context.Context, request VideoRequest) (response VideoResponse, err error)
SendContact(ctx context.Context, request ContactRequest) (response ContactResponse, err error)
SendLink(ctx context.Context, request LinkRequest) (response LinkResponse, err error)
Revoke(ctx context.Context, request RevokeRequest) (response RevokeResponse, err error)
}

23
src/internal/rest/send_controller.go

@ -1,6 +1,7 @@
package rest
import (
"fmt"
domainSend "github.com/aldinokemal/go-whatsapp-web-multidevice/domains/send"
"github.com/aldinokemal/go-whatsapp-web-multidevice/utils"
"github.com/aldinokemal/go-whatsapp-web-multidevice/validations"
@ -19,7 +20,7 @@ func InitRestSend(app *fiber.App, service domainSend.ISendService) Send {
app.Post("/send/video", rest.SendVideo)
app.Post("/send/contact", rest.SendContact)
app.Post("/send/link", rest.SendLink)
app.Post("/message/:message_id/revoke", rest.RevokeMessage)
return rest
}
@ -183,3 +184,23 @@ func (controller *Send) SendLink(c *fiber.Ctx) error {
Results: response,
})
}
func (controller *Send) RevokeMessage(c *fiber.Ctx) error {
var request domainSend.RevokeRequest
err := c.BodyParser(&request)
utils.PanicIfNeeded(err)
request.MessageID = c.Params("message_id")
err = validations.ValidateRevokeMessage(request)
utils.PanicIfNeeded(err)
fmt.Println(request)
response, err := controller.Service.Revoke(c.UserContext(), request)
utils.PanicIfNeeded(err)
return c.JSON(utils.ResponseData{
Code: 200,
Message: response.Status,
Results: response,
})
}

20
src/services/send_service.go

@ -12,6 +12,7 @@ import (
"github.com/valyala/fasthttp"
"go.mau.fi/whatsmeow"
waProto "go.mau.fi/whatsmeow/binary/proto"
"go.mau.fi/whatsmeow/types"
"google.golang.org/protobuf/proto"
"net/http"
"os"
@ -349,3 +350,22 @@ func (service serviceSend) SendLink(ctx context.Context, request domainSend.Link
response.Status = fmt.Sprintf("Link sent to %s (server timestamp: %s)", request.Phone, ts)
return response, nil
}
func (service serviceSend) Revoke(_ context.Context, request domainSend.RevokeRequest) (response domainSend.RevokeResponse, err error) {
utils.MustLogin(service.WaCli)
recipient, ok := utils.ParseJID(request.Phone)
if !ok {
return response, errors.New("invalid JID " + request.Phone)
}
msgId := whatsmeow.GenerateMessageID()
ts, err := service.WaCli.SendMessage(context.Background(), recipient, msgId, service.WaCli.BuildRevoke(recipient, types.EmptyJID, request.MessageID))
if err != nil {
return response, err
}
response.MessageID = msgId
response.Status = fmt.Sprintf("Revoke success %s (server timestamp: %s)", request.Phone, ts)
return response, nil
}

4
src/utils/whatsapp.go

@ -74,10 +74,10 @@ func ParseJID(arg string) (types.JID, bool) {
} else {
recipient, err := types.ParseJID(arg)
if err != nil {
_ = fmt.Errorf("Invalid JID %s: %v", arg, err)
_ = fmt.Errorf("invalid JID %s: %v", arg, err)
return recipient, false
} else if recipient.User == "" {
_ = fmt.Errorf("Invalid JID %s: no server specified", arg)
_ = fmt.Errorf("invalid JID %s: no server specified", arg)
return recipient, false
}
return recipient, true

15
src/validations/send_validation.go

@ -129,3 +129,18 @@ func ValidateSendLink(request domainSend.LinkRequest) error {
return nil
}
func ValidateRevokeMessage(request domainSend.RevokeRequest) error {
err := validation.ValidateStruct(&request,
validation.Field(&request.Phone, validation.Required, validation.Length(10, 25)),
validation.Field(&request.MessageID, validation.Required, validation.Length(20, 25)),
)
if err != nil {
return utils.ValidationError{
Message: err.Error(),
}
}
return nil
}
Loading…
Cancel
Save