diff --git a/readme.md b/readme.md index b7116f9..2ae175f 100644 --- a/readme.md +++ b/readme.md @@ -111,6 +111,7 @@ API using [openapi-generator](https://openapi-generator.tech/#try) | ✅ | Send Location | POST | /send/location | | ✅ | Revoke Message | POST | /message/:message_id/revoke | | ✅ | React Message | POST | /message/:message_id/react | +| ✅ | Join Group With Link | POST | /group/join-with-link" | ``` ✅ = Available diff --git a/src/cmd/root.go b/src/cmd/root.go index 47aeced..5160280 100644 --- a/src/cmd/root.go +++ b/src/cmd/root.go @@ -99,12 +99,14 @@ func runRest(_ *cobra.Command, _ []string) { sendService := services.NewSendService(cli) userService := services.NewUserService(cli) messageService := services.NewMessageService(cli) + groupService := services.NewGroupService(cli) // Rest rest.InitRestApp(app, appService) rest.InitRestSend(app, sendService) rest.InitRestUser(app, userService) rest.InitRestMessage(app, messageService) + rest.InitRestGroup(app, groupService) app.Get("/", func(c *fiber.Ctx) error { return c.Render("index", fiber.Map{ diff --git a/src/domains/group/group.go b/src/domains/group/group.go new file mode 100644 index 0000000..d0ffc6a --- /dev/null +++ b/src/domains/group/group.go @@ -0,0 +1,15 @@ +package group + +import "context" + +type IGroupService interface { + JoinGroupWithLink(ctx context.Context, request JoinGroupWithLinkRequest) (response JoinGroupWithLinkResponse, err error) +} + +type JoinGroupWithLinkRequest struct { + Link string `json:"link" query:"link"` +} + +type JoinGroupWithLinkResponse struct { + JID string `json:"jid"` +} diff --git a/src/internal/rest/group.go b/src/internal/rest/group.go new file mode 100644 index 0000000..1583bfa --- /dev/null +++ b/src/internal/rest/group.go @@ -0,0 +1,33 @@ +package rest + +import ( + domainGroup "github.com/aldinokemal/go-whatsapp-web-multidevice/domains/group" + "github.com/aldinokemal/go-whatsapp-web-multidevice/pkg/utils" + "github.com/gofiber/fiber/v2" +) + +type Group struct { + Service domainGroup.IGroupService +} + +func InitRestGroup(app *fiber.App, service domainGroup.IGroupService) Group { + rest := Group{Service: service} + app.Post("/group/join-with-link", rest.JoinGroupWithLink) + return rest +} + +func (controller *Group) JoinGroupWithLink(c *fiber.Ctx) error { + var request domainGroup.JoinGroupWithLinkRequest + err := c.BodyParser(&request) + utils.PanicIfNeeded(err) + + response, err := controller.Service.JoinGroupWithLink(c.UserContext(), request) + utils.PanicIfNeeded(err) + + return c.JSON(utils.ResponseData{ + Status: 200, + Code: "SUCCESS", + Message: "Success joined group", + Results: response, + }) +} diff --git a/src/services/group.go b/src/services/group.go new file mode 100644 index 0000000..c0417b2 --- /dev/null +++ b/src/services/group.go @@ -0,0 +1,30 @@ +package services + +import ( + "context" + domainGroup "github.com/aldinokemal/go-whatsapp-web-multidevice/domains/group" + "github.com/aldinokemal/go-whatsapp-web-multidevice/pkg/whatsapp" + "go.mau.fi/whatsmeow" +) + +type groupService struct { + WaCli *whatsmeow.Client +} + +func NewGroupService(waCli *whatsmeow.Client) domainGroup.IGroupService { + return &groupService{ + WaCli: waCli, + } +} + + +func (service groupService) JoinGroupWithLink(_ context.Context, request domainGroup.JoinGroupWithLinkRequest) (response domainGroup.JoinGroupWithLinkResponse, err error) { + whatsapp.MustLogin(service.WaCli) + + jid, err := service.WaCli.JoinGroupWithLink(request.Link) + if err != nil { + return + } + response.JID = jid.String() + return response, nil +}