From 924b63bfce9f2b76b08e4805f4833f2a575ef784 Mon Sep 17 00:00:00 2001 From: Aldino Kemal Date: Mon, 21 Nov 2022 23:44:40 +0700 Subject: [PATCH] feat: add update message --- src/domains/send/message.go | 12 ++++++++++++ src/domains/send/send.go | 1 + src/internal/rest/send_controller.go | 21 +++++++++++++++++++++ src/services/send_service.go | 20 ++++++++++++++++++++ src/validations/send_validation.go | 16 ++++++++++++++++ 5 files changed, 70 insertions(+) diff --git a/src/domains/send/message.go b/src/domains/send/message.go index 7844dc1..deadd40 100644 --- a/src/domains/send/message.go +++ b/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"` +} diff --git a/src/domains/send/send.go b/src/domains/send/send.go index eb47869..0a282a5 100644 --- a/src/domains/send/send.go +++ b/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) } diff --git a/src/internal/rest/send_controller.go b/src/internal/rest/send_controller.go index 42ce429..bec37d1 100644 --- a/src/internal/rest/send_controller.go +++ b/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, + }) +} diff --git a/src/services/send_service.go b/src/services/send_service.go index 08cdcd0..2c54e47 100644 --- a/src/services/send_service.go +++ b/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 +} diff --git a/src/validations/send_validation.go b/src/validations/send_validation.go index f3f92a6..02c4042 100644 --- a/src/validations/send_validation.go +++ b/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 +}