2024-11-25 19:13:21 +07:00

76 lines
2.1 KiB
Go

package devices
import (
"fmt"
"github.com/android-sms-gateway/client-go/smsgateway"
"github.com/android-sms-gateway/server/internal/sms-gateway/handlers/base"
"github.com/android-sms-gateway/server/internal/sms-gateway/models"
"github.com/android-sms-gateway/server/internal/sms-gateway/modules/auth"
"github.com/android-sms-gateway/server/internal/sms-gateway/modules/devices"
"github.com/android-sms-gateway/server/pkg/types"
"github.com/capcom6/go-helpers/slices"
"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,
}
}