Skip to content

Commit

Permalink
[api/3rdparty] move /devices group to distinct controller
Browse files Browse the repository at this point in the history
  • Loading branch information
capcom6 committed Aug 5, 2024
1 parent 71950ec commit 9ada820
Show file tree
Hide file tree
Showing 6 changed files with 86 additions and 40 deletions.
2 changes: 1 addition & 1 deletion api/requests.http
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ GET {{baseUrl}}/api/3rdparty/v1/message/2dcIAhcLg81cez7GE_Pdp HTTP/1.1
Authorization: Basic {{credentials}}

###
GET {{baseUrl}}/api/3rdparty/v1/device HTTP/1.1
GET {{baseUrl}}/api/3rdparty/v1/devices HTTP/1.1
Authorization: Basic {{credentials}}

###
Expand Down
43 changes: 6 additions & 37 deletions internal/sms-gateway/handlers/3rdparty.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,13 @@ import (

"github.com/android-sms-gateway/client-go/smsgateway"
"github.com/capcom6/sms-gateway/internal/sms-gateway/handlers/base"
devicesCtrl "github.com/capcom6/sms-gateway/internal/sms-gateway/handlers/devices"
"github.com/capcom6/sms-gateway/internal/sms-gateway/handlers/webhooks"
"github.com/capcom6/sms-gateway/internal/sms-gateway/models"
"github.com/capcom6/sms-gateway/internal/sms-gateway/modules/auth"
"github.com/capcom6/sms-gateway/internal/sms-gateway/modules/devices"
"github.com/capcom6/sms-gateway/internal/sms-gateway/modules/messages"
"github.com/capcom6/sms-gateway/internal/sms-gateway/repositories"
"github.com/capcom6/sms-gateway/pkg/types"
"github.com/go-playground/validator/v10"
"github.com/gofiber/fiber/v2"
"github.com/gofiber/fiber/v2/middleware/basicauth"
Expand All @@ -29,6 +29,7 @@ type ThirdPartyHandlerParams struct {

HealthHandler *healthHandler
WebhooksHandler *webhooks.ThirdPartyController
DevicesHandler *devicesCtrl.ThirdPartyController

AuthSvc *auth.Service
MessagesSvc *messages.Service
Expand All @@ -43,46 +44,13 @@ type thirdPartyHandler struct {

healthHandler *healthHandler
webhooksHandler *webhooks.ThirdPartyController
devicesHandler *devicesCtrl.ThirdPartyController

authSvc *auth.Service
messagesSvc *messages.Service
devicesSvc *devices.Service
}

// @Summary List devices
// @Description Returns list of registered devices
// @Security ApiAuth
// @Tags User
// @Produce json
// @Success 200 {object} []smsgateway.Device "Device list"
// @Failure 400 {object} smsgateway.ErrorResponse "Invalid request"
// @Failure 401 {object} smsgateway.ErrorResponse "Unauthorized"
// @Failure 500 {object} smsgateway.ErrorResponse "Internal server error"
// @Router /3rdparty/v1/device [get]
//
// List devices
func (h *thirdPartyHandler) getDevice(user models.User, c *fiber.Ctx) error {
devices, err := h.devicesSvc.Select(devices.WithUserID(user.ID))
if err != nil {
return fmt.Errorf("can't select devices: %w", err)
}

response := make([]smsgateway.Device, 0, len(devices))

for _, device := range devices {
response = append(response, smsgateway.Device{
ID: device.ID,
Name: types.OrDefault[string](device.Name, ""),
CreatedAt: device.CreatedAt,
UpdatedAt: device.UpdatedAt,
DeletedAt: device.DeletedAt,
LastSeen: device.LastSeen,
})
}

return c.JSON(response)
}

// @Summary Enqueue message
// @Description Enqueues message for sending. If ID is not specified, it will be generated
// @Security ApiAuth
Expand Down Expand Up @@ -196,11 +164,11 @@ func (h *thirdPartyHandler) Register(router fiber.Router) {
return c.Next()
})

router.Get("/device", auth.WithUser(h.getDevice))

router.Post("/message", auth.WithUser(h.postMessage))
router.Get("/message/:id", auth.WithUser(h.getMessage)).Name(route3rdPartyGetMessage)

h.devicesHandler.Register(router.Group("/device")) // TODO: remove after 2025-07-11
h.devicesHandler.Register(router.Group("/devices"))
h.webhooksHandler.Register(router.Group("/webhooks"))
}

Expand All @@ -209,6 +177,7 @@ func newThirdPartyHandler(params ThirdPartyHandlerParams) *thirdPartyHandler {
Handler: base.Handler{Logger: params.Logger.Named("ThirdPartyHandler"), Validator: params.Validator},
healthHandler: params.HealthHandler,
webhooksHandler: params.WebhooksHandler,
devicesHandler: params.DevicesHandler,
authSvc: params.AuthSvc,
messagesSvc: params.MessagesSvc,
devicesSvc: params.DevicesSvc,
Expand Down
75 changes: 75 additions & 0 deletions internal/sms-gateway/handlers/devices/3rdparty.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
package devices

import (
"fmt"

"github.com/android-sms-gateway/client-go/smsgateway"
"github.com/capcom6/go-helpers/slices"
"github.com/capcom6/sms-gateway/internal/sms-gateway/handlers/base"
"github.com/capcom6/sms-gateway/internal/sms-gateway/models"
"github.com/capcom6/sms-gateway/internal/sms-gateway/modules/auth"
"github.com/capcom6/sms-gateway/internal/sms-gateway/modules/devices"
"github.com/capcom6/sms-gateway/pkg/types"
"github.com/gofiber/fiber/v2"
"go.uber.org/fx"
"go.uber.org/zap"
)

type thirdPartyControllerParams struct {
fx.In

DevicesSvc *devices.Service

Logger *zap.Logger
}

type ThirdPartyController struct {
base.Handler

devicesSvc *devices.Service
}

// @Summary List devices
// @Description Returns list of registered devices
// @Security ApiAuth
// @Tags User
// @Produce json
// @Success 200 {object} []smsgateway.Device "Device list"
// @Failure 400 {object} smsgateway.ErrorResponse "Invalid request"
// @Failure 401 {object} smsgateway.ErrorResponse "Unauthorized"
// @Failure 500 {object} smsgateway.ErrorResponse "Internal server error"
// @Router /3rdparty/v1/devices [get]
//
// List devices
func (h *ThirdPartyController) getDevices(user models.User, c *fiber.Ctx) error {
devices, err := h.devicesSvc.Select(devices.WithUserID(user.ID))
if err != nil {
return fmt.Errorf("can't select devices: %w", err)
}

response := slices.Map(devices, func(device models.Device) smsgateway.Device {
return smsgateway.Device{
ID: device.ID,
Name: types.OrDefault(device.Name, ""),
CreatedAt: device.CreatedAt,
UpdatedAt: device.UpdatedAt,
DeletedAt: device.DeletedAt,
LastSeen: device.LastSeen,
}
})

return c.JSON(response)
}

func (h *ThirdPartyController) Register(router fiber.Router) {
router.Get("", auth.WithUser(h.getDevices))
}

func NewThirdPartyController(params thirdPartyControllerParams) *ThirdPartyController {
return &ThirdPartyController{
Handler: base.Handler{
Logger: params.Logger.Named("devices"),
},
devicesSvc: params.DevicesSvc,
}
}
2 changes: 2 additions & 0 deletions internal/sms-gateway/handlers/module.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package handlers

import (
"github.com/capcom6/go-infra-fx/http"
"github.com/capcom6/sms-gateway/internal/sms-gateway/handlers/devices"
"github.com/capcom6/sms-gateway/internal/sms-gateway/handlers/webhooks"
"go.uber.org/fx"
"go.uber.org/zap"
Expand All @@ -22,6 +23,7 @@ var Module = fx.Module(
newHealthHandler,
webhooks.NewThirdPartyController,
webhooks.NewMobileController,
devices.NewThirdPartyController,
fx.Private,
),
)
2 changes: 1 addition & 1 deletion internal/sms-gateway/handlers/webhooks/3rdparty.go
Original file line number Diff line number Diff line change
Expand Up @@ -108,7 +108,7 @@ func (h *ThirdPartyController) Register(router fiber.Router) {
func NewThirdPartyController(params thirdPartyControllerParams) *ThirdPartyController {
return &ThirdPartyController{
Handler: base.Handler{
Logger: params.Logger.Named("controller"),
Logger: params.Logger.Named("webhooks"),
Validator: params.Validator,
},
webhooksSvc: params.WebhooksSvc,
Expand Down
2 changes: 1 addition & 1 deletion internal/sms-gateway/handlers/webhooks/mobile.go
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ func (h *MobileController) Register(router fiber.Router) {
func NewMobileController(params mobileControllerParams) *MobileController {
return &MobileController{
Handler: base.Handler{
Logger: params.Logger.Named("mobile"),
Logger: params.Logger.Named("webhooks"),
},
webhooksSvc: params.WebhooksServices,
}
Expand Down

0 comments on commit 9ada820

Please sign in to comment.