Browse Source

feat: add update message

pull/32/head
Aldino Kemal 3 years ago
parent
commit
924b63bfce
  1. 12
      src/domains/send/message.go
  2. 1
      src/domains/send/send.go
  3. 21
      src/internal/rest/send_controller.go
  4. 20
      src/services/send_service.go
  5. 16
      src/validations/send_validation.go

12
src/domains/send/message.go

@ -10,3 +10,15 @@ type RevokeResponse struct {
MessageID string `json:"message_id"`
Status string `json:"status"`
}
type UpdateMessageRequest struct {
MessageID string `json:"message_id" uri:"message_id"`
Message string `json:"message" form:"message"`
Phone string `json:"phone" form:"phone"`
Type Type `json:"type" form:"type"`
}
type UpdateMessageResponse struct {
MessageID string `json:"message_id"`
Status string `json:"status"`
}

1
src/domains/send/send.go

@ -17,4 +17,5 @@ type ISendService interface {
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)
UpdateMessage(ctx context.Context, request UpdateMessageRequest) (response UpdateMessageResponse, err error)
}

21
src/internal/rest/send_controller.go

@ -21,6 +21,7 @@ func InitRestSend(app *fiber.App, service domainSend.ISendService) Send {
app.Post("/send/contact", rest.SendContact)
app.Post("/send/link", rest.SendLink)
app.Post("/message/:message_id/revoke", rest.RevokeMessage)
app.Post("/message/:message_id/update", rest.UpdateMessage)
return rest
}
@ -204,3 +205,23 @@ func (controller *Send) RevokeMessage(c *fiber.Ctx) error {
Results: response,
})
}
func (controller *Send) UpdateMessage(c *fiber.Ctx) error {
var request domainSend.UpdateMessageRequest
err := c.BodyParser(&request)
utils.PanicIfNeeded(err)
request.MessageID = c.Params("message_id")
err = validations.ValidateUpdateMessage(request)
utils.PanicIfNeeded(err)
fmt.Println(request)
response, err := controller.Service.UpdateMessage(c.UserContext(), request)
utils.PanicIfNeeded(err)
return c.JSON(utils.ResponseData{
Code: 200,
Message: response.Status,
Results: response,
})
}

20
src/services/send_service.go

@ -369,3 +369,23 @@ func (service serviceSend) Revoke(_ context.Context, request domainSend.RevokeRe
response.Status = fmt.Sprintf("Revoke success %s (server timestamp: %s)", request.Phone, ts)
return response, nil
}
func (service serviceSend) UpdateMessage(ctx context.Context, request domainSend.UpdateMessageRequest) (response domainSend.UpdateMessageResponse, 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()
msg := &waProto.Message{Conversation: proto.String(request.Message)}
ts, err := service.WaCli.SendMessage(context.Background(), recipient, msgId, service.WaCli.BuildEdit(recipient, request.MessageID, msg))
if err != nil {
return response, err
}
response.MessageID = msgId
response.Status = fmt.Sprintf("Update message success %s (server timestamp: %s)", request.Phone, ts)
return response, nil
}

16
src/validations/send_validation.go

@ -144,3 +144,19 @@ func ValidateRevokeMessage(request domainSend.RevokeRequest) error {
return nil
}
func ValidateUpdateMessage(request domainSend.UpdateMessageRequest) 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)),
validation.Field(&request.Message, validation.Required, validation.Length(1, 1000)),
)
if err != nil {
return utils.ValidationError{
Message: err.Error(),
}
}
return nil
}
Loading…
Cancel
Save