package rest import ( domainMessage "github.com/aldinokemal/go-whatsapp-web-multidevice/domains/message" "github.com/aldinokemal/go-whatsapp-web-multidevice/infrastructure/whatsapp" "github.com/aldinokemal/go-whatsapp-web-multidevice/pkg/utils" "github.com/gofiber/fiber/v2" ) type Message struct { Service domainMessage.IMessageUsecase } func InitRestMessage(app fiber.Router, service domainMessage.IMessageUsecase) Message { rest := Message{Service: service} // Message action endpoints app.Post("/message/:message_id/reaction", rest.ReactMessage) app.Post("/message/:message_id/revoke", rest.RevokeMessage) app.Post("/message/:message_id/delete", rest.DeleteMessage) app.Post("/message/:message_id/update", rest.UpdateMessage) app.Post("/message/:message_id/read", rest.MarkAsRead) app.Post("/message/:message_id/star", rest.StarMessage) app.Post("/message/:message_id/unstar", rest.UnstarMessage) app.Get("/message/:message_id/download", rest.DownloadMedia) return rest } func (controller *Message) RevokeMessage(c *fiber.Ctx) error { var request domainMessage.RevokeRequest err := c.BodyParser(&request) utils.PanicIfNeeded(err) request.MessageID = c.Params("message_id") utils.SanitizePhone(&request.Phone) response, err := controller.Service.RevokeMessage(whatsapp.ContextWithDevice(c.UserContext(), getDeviceFromCtx(c)), request) utils.PanicIfNeeded(err) return c.JSON(utils.ResponseData{ Status: 200, Code: "SUCCESS", Message: response.Status, Results: response, }) } func (controller *Message) DeleteMessage(c *fiber.Ctx) error { var request domainMessage.DeleteRequest err := c.BodyParser(&request) utils.PanicIfNeeded(err) request.MessageID = c.Params("message_id") utils.SanitizePhone(&request.Phone) err = controller.Service.DeleteMessage(whatsapp.ContextWithDevice(c.UserContext(), getDeviceFromCtx(c)), request) utils.PanicIfNeeded(err) return c.JSON(utils.ResponseData{ Status: 200, Code: "SUCCESS", Message: "Message deleted successfully", Results: nil, }) } func (controller *Message) UpdateMessage(c *fiber.Ctx) error { var request domainMessage.UpdateMessageRequest err := c.BodyParser(&request) utils.PanicIfNeeded(err) request.MessageID = c.Params("message_id") utils.SanitizePhone(&request.Phone) response, err := controller.Service.UpdateMessage(whatsapp.ContextWithDevice(c.UserContext(), getDeviceFromCtx(c)), request) utils.PanicIfNeeded(err) return c.JSON(utils.ResponseData{ Status: 200, Code: "SUCCESS", Message: response.Status, Results: response, }) } func (controller *Message) ReactMessage(c *fiber.Ctx) error { var request domainMessage.ReactionRequest err := c.BodyParser(&request) utils.PanicIfNeeded(err) request.MessageID = c.Params("message_id") utils.SanitizePhone(&request.Phone) response, err := controller.Service.ReactMessage(whatsapp.ContextWithDevice(c.UserContext(), getDeviceFromCtx(c)), request) utils.PanicIfNeeded(err) return c.JSON(utils.ResponseData{ Status: 200, Code: "SUCCESS", Message: response.Status, Results: response, }) } func (controller *Message) MarkAsRead(c *fiber.Ctx) error { var request domainMessage.MarkAsReadRequest err := c.BodyParser(&request) utils.PanicIfNeeded(err) request.MessageID = c.Params("message_id") utils.SanitizePhone(&request.Phone) response, err := controller.Service.MarkAsRead(whatsapp.ContextWithDevice(c.UserContext(), getDeviceFromCtx(c)), request) utils.PanicIfNeeded(err) return c.JSON(utils.ResponseData{ Status: 200, Code: "SUCCESS", Message: response.Status, Results: response, }) } func (controller *Message) StarMessage(c *fiber.Ctx) error { var request domainMessage.StarRequest err := c.BodyParser(&request) utils.PanicIfNeeded(err) request.MessageID = c.Params("message_id") utils.SanitizePhone(&request.Phone) request.IsStarred = true err = controller.Service.StarMessage(whatsapp.ContextWithDevice(c.UserContext(), getDeviceFromCtx(c)), request) utils.PanicIfNeeded(err) return c.JSON(utils.ResponseData{ Status: 200, Code: "SUCCESS", Message: "Starred message successfully", Results: nil, }) } func (controller *Message) UnstarMessage(c *fiber.Ctx) error { var request domainMessage.StarRequest err := c.BodyParser(&request) utils.PanicIfNeeded(err) request.MessageID = c.Params("message_id") utils.SanitizePhone(&request.Phone) request.IsStarred = false err = controller.Service.StarMessage(whatsapp.ContextWithDevice(c.UserContext(), getDeviceFromCtx(c)), request) utils.PanicIfNeeded(err) return c.JSON(utils.ResponseData{ Status: 200, Code: "SUCCESS", Message: "Unstarred message successfully", Results: nil, }) } func (controller *Message) DownloadMedia(c *fiber.Ctx) error { var request domainMessage.DownloadMediaRequest request.MessageID = c.Params("message_id") request.Phone = c.Query("phone") utils.SanitizePhone(&request.Phone) ctx := c.UserContext() if device, ok := c.Locals("device").(*whatsapp.DeviceInstance); ok { ctx = whatsapp.ContextWithDevice(ctx, device) } response, err := controller.Service.DownloadMedia(ctx, request) utils.PanicIfNeeded(err) return c.JSON(utils.ResponseData{ Status: 200, Code: "SUCCESS", Message: response.Status, Results: response, }) }