11package handlers
22
33import (
4- "errors"
54 "fmt"
65 "strings"
76
87 "github.com/android-sms-gateway/client-go/smsgateway"
98 "github.com/android-sms-gateway/server/internal/sms-gateway/handlers/base"
109 "github.com/android-sms-gateway/server/internal/sms-gateway/handlers/converters"
1110 "github.com/android-sms-gateway/server/internal/sms-gateway/handlers/events"
11+ "github.com/android-sms-gateway/server/internal/sms-gateway/handlers/messages"
1212 "github.com/android-sms-gateway/server/internal/sms-gateway/handlers/middlewares/deviceauth"
1313 "github.com/android-sms-gateway/server/internal/sms-gateway/handlers/middlewares/userauth"
1414 "github.com/android-sms-gateway/server/internal/sms-gateway/handlers/settings"
1515 "github.com/android-sms-gateway/server/internal/sms-gateway/handlers/webhooks"
1616 "github.com/android-sms-gateway/server/internal/sms-gateway/models"
1717 "github.com/android-sms-gateway/server/internal/sms-gateway/modules/auth"
1818 "github.com/android-sms-gateway/server/internal/sms-gateway/modules/devices"
19- "github.com/android-sms-gateway/server/internal/sms-gateway/modules/messages"
2019 "github.com/capcom6/go-helpers/anys"
21- "github.com/capcom6/go-helpers/slices"
2220 "github.com/go-playground/validator/v10"
2321 "github.com/gofiber/fiber/v2"
2422 "github.com/gofiber/fiber/v2/middleware/keyauth"
@@ -27,13 +25,28 @@ import (
2725 "go.uber.org/zap"
2826)
2927
28+ type mobileHandlerParams struct {
29+ fx.In
30+
31+ Logger * zap.Logger
32+ Validator * validator.Validate
33+
34+ AuthSvc * auth.Service
35+ DevicesSvc * devices.Service
36+
37+ MessagesCtrl * messages.MobileController
38+ WebhooksCtrl * webhooks.MobileController
39+ SettingsCtrl * settings.MobileController
40+ EventsCtrl * events.MobileController
41+ }
42+
3043type mobileHandler struct {
3144 base.Handler
3245
33- authSvc * auth.Service
34- devicesSvc * devices.Service
35- messagesSvc * messages.Service
46+ authSvc * auth.Service
47+ devicesSvc * devices.Service
3648
49+ messagesCtrl * messages.MobileController
3750 webhooksCtrl * webhooks.MobileController
3851 settingsCtrl * settings.MobileController
3952 eventsCtrl * events.MobileController
@@ -151,69 +164,6 @@ func (h *mobileHandler) patchDevice(device models.Device, c *fiber.Ctx) error {
151164 return c .SendStatus (fiber .StatusNoContent )
152165}
153166
154- // @Summary Get messages for sending
155- // @Description Returns list of pending messages
156- // @Security MobileToken
157- // @Tags Device, Messages
158- // @Accept json
159- // @Produce json
160- // @Success 200 {object} smsgateway.MobileGetMessagesResponse "List of pending messages"
161- // @Failure 500 {object} smsgateway.ErrorResponse "Internal server error"
162- // @Router /mobile/v1/message [get]
163- //
164- // Get messages for sending
165- func (h * mobileHandler ) getMessage (device models.Device , c * fiber.Ctx ) error {
166- msgs , err := h .messagesSvc .SelectPending (device .ID )
167- if err != nil {
168- return fmt .Errorf ("can't get messages: %w" , err )
169- }
170-
171- return c .JSON (
172- smsgateway .MobileGetMessagesResponse (
173- slices .Map (
174- msgs ,
175- converters .MessageToMobileDTO ,
176- ),
177- ),
178- )
179- }
180-
181- // @Summary Update message state
182- // @Description Updates message state
183- // @Security MobileToken
184- // @Tags Device, Messages
185- // @Accept json
186- // @Produce json
187- // @Param request body smsgateway.MobilePatchMessageRequest true "List of message state updates"
188- // @Success 204 {object} nil "Successfully updated"
189- // @Failure 400 {object} smsgateway.ErrorResponse "Invalid request"
190- // @Failure 500 {object} smsgateway.ErrorResponse "Internal server error"
191- // @Router /mobile/v1/message [patch]
192- //
193- // Update message state
194- func (h * mobileHandler ) patchMessage (device models.Device , c * fiber.Ctx ) error {
195- var req smsgateway.MobilePatchMessageRequest
196- if err := c .BodyParser (& req ); err != nil {
197- return fiber .NewError (fiber .StatusBadRequest , err .Error ())
198- }
199-
200- for _ , v := range req {
201- messageState := messages.MessageStateIn {
202- ID : v .ID ,
203- State : messages .ProcessingState (v .State ),
204- Recipients : v .Recipients ,
205- States : v .States ,
206- }
207-
208- err := h .messagesSvc .UpdateState (device .ID , messageState )
209- if err != nil && ! errors .Is (err , messages .ErrMessageNotFound ) {
210- h .Logger .Error ("Can't update message status" , zap .Error (err ))
211- }
212- }
213-
214- return c .SendStatus (fiber .StatusNoContent )
215- }
216-
217167// @Summary Get one-time code for device registration
218168// @Description Returns one-time code for device registration
219169// @Security ApiAuth
@@ -303,43 +253,29 @@ func (h *mobileHandler) Register(router fiber.Router) {
303253
304254 router .Patch ("/device" , deviceauth .WithDevice (h .patchDevice ))
305255
306- router .Get ("/message" , deviceauth .WithDevice (h .getMessage ))
307- router .Patch ("/message" , deviceauth .WithDevice (h .patchMessage ))
308-
309256 // Should be under `userauth.NewBasic` protection instead of `deviceauth`
310257 router .Patch ("/user/password" , deviceauth .WithDevice (h .changePassword ))
311258
259+ h .messagesCtrl .Register (router .Group ("/message" ))
260+ h .messagesCtrl .Register (router .Group ("/messages" ))
312261 h .webhooksCtrl .Register (router .Group ("/webhooks" ))
313262 h .settingsCtrl .Register (router .Group ("/settings" ))
314263 h .eventsCtrl .Register (router .Group ("/events" ))
315264}
316265
317- type mobileHandlerParams struct {
318- fx.In
319-
320- Logger * zap.Logger
321- Validator * validator.Validate
322-
323- AuthSvc * auth.Service
324- DevicesSvc * devices.Service
325- MessagesSvc * messages.Service
326-
327- WebhooksCtrl * webhooks.MobileController
328- SettingsCtrl * settings.MobileController
329- EventsCtrl * events.MobileController
330- }
331-
332266func newMobileHandler (params mobileHandlerParams ) * mobileHandler {
333267 idGen , _ := nanoid .Standard (21 )
334268
335269 return & mobileHandler {
336- Handler : base.Handler {Logger : params .Logger , Validator : params .Validator },
337- authSvc : params .AuthSvc ,
270+ Handler : base.Handler {Logger : params .Logger , Validator : params .Validator },
271+ authSvc : params .AuthSvc ,
272+
273+ messagesCtrl : params .MessagesCtrl ,
338274 devicesSvc : params .DevicesSvc ,
339- messagesSvc : params .MessagesSvc ,
340275 webhooksCtrl : params .WebhooksCtrl ,
341276 settingsCtrl : params .SettingsCtrl ,
342277 eventsCtrl : params .EventsCtrl ,
343- idGen : idGen ,
278+
279+ idGen : idGen ,
344280 }
345281}
0 commit comments