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,87 +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- // @Param order query string false "Message processing order: lifo (default) or fifo" Enums(lifo,fifo)
161- // @Success 200 {object} smsgateway.MobileGetMessagesResponse "List of pending messages"
162- // @Failure 400 {object} smsgateway.ErrorResponse "Bad request"
163- // @Failure 500 {object} smsgateway.ErrorResponse "Internal server error"
164- // @Router /mobile/v1/message [get]
165- //
166- // Get messages for sending
167- func (h * mobileHandler ) getMessage (device models.Device , c * fiber.Ctx ) error {
168- // Get and validate order parameter
169- orderParam := c .Query ("order" )
170- order := "lifo" // Default to LIFO
171-
172- if orderParam != "" {
173- orderParam = strings .ToLower (orderParam )
174- switch orderParam {
175- case "lifo" :
176- order = "lifo"
177- case "fifo" :
178- order = "fifo"
179- default :
180- return fiber .NewError (fiber .StatusBadRequest , "Invalid order parameter. Must be 'lifo' or 'fifo'" )
181- }
182- }
183-
184- msgs , err := h .messagesSvc .SelectPending (device .ID , messages .MessagesOrder (order ))
185- if err != nil {
186- return fmt .Errorf ("can't get messages: %w" , err )
187- }
188-
189- return c .JSON (
190- smsgateway .MobileGetMessagesResponse (
191- slices .Map (
192- msgs ,
193- converters .MessageToMobileDTO ,
194- ),
195- ),
196- )
197- }
198-
199- // @Summary Update message state
200- // @Description Updates message state
201- // @Security MobileToken
202- // @Tags Device, Messages
203- // @Accept json
204- // @Produce json
205- // @Param request body smsgateway.MobilePatchMessageRequest true "List of message state updates"
206- // @Success 204 {object} nil "Successfully updated"
207- // @Failure 400 {object} smsgateway.ErrorResponse "Invalid request"
208- // @Failure 500 {object} smsgateway.ErrorResponse "Internal server error"
209- // @Router /mobile/v1/message [patch]
210- //
211- // Update message state
212- func (h * mobileHandler ) patchMessage (device models.Device , c * fiber.Ctx ) error {
213- var req smsgateway.MobilePatchMessageRequest
214- if err := c .BodyParser (& req ); err != nil {
215- return fiber .NewError (fiber .StatusBadRequest , err .Error ())
216- }
217-
218- for _ , v := range req {
219- messageState := messages.MessageStateIn {
220- ID : v .ID ,
221- State : messages .ProcessingState (v .State ),
222- Recipients : v .Recipients ,
223- States : v .States ,
224- }
225-
226- err := h .messagesSvc .UpdateState (device .ID , messageState )
227- if err != nil && ! errors .Is (err , messages .ErrMessageNotFound ) {
228- h .Logger .Error ("Can't update message status" , zap .Error (err ))
229- }
230- }
231-
232- return c .SendStatus (fiber .StatusNoContent )
233- }
234-
235167// @Summary Get one-time code for device registration
236168// @Description Returns one-time code for device registration
237169// @Security ApiAuth
@@ -321,43 +253,29 @@ func (h *mobileHandler) Register(router fiber.Router) {
321253
322254 router .Patch ("/device" , deviceauth .WithDevice (h .patchDevice ))
323255
324- router .Get ("/message" , deviceauth .WithDevice (h .getMessage ))
325- router .Patch ("/message" , deviceauth .WithDevice (h .patchMessage ))
326-
327256 // Should be under `userauth.NewBasic` protection instead of `deviceauth`
328257 router .Patch ("/user/password" , deviceauth .WithDevice (h .changePassword ))
329258
259+ h .messagesCtrl .Register (router .Group ("/message" ))
260+ h .messagesCtrl .Register (router .Group ("/messages" ))
330261 h .webhooksCtrl .Register (router .Group ("/webhooks" ))
331262 h .settingsCtrl .Register (router .Group ("/settings" ))
332263 h .eventsCtrl .Register (router .Group ("/events" ))
333264}
334265
335- type mobileHandlerParams struct {
336- fx.In
337-
338- Logger * zap.Logger
339- Validator * validator.Validate
340-
341- AuthSvc * auth.Service
342- DevicesSvc * devices.Service
343- MessagesSvc * messages.Service
344-
345- WebhooksCtrl * webhooks.MobileController
346- SettingsCtrl * settings.MobileController
347- EventsCtrl * events.MobileController
348- }
349-
350266func newMobileHandler (params mobileHandlerParams ) * mobileHandler {
351267 idGen , _ := nanoid .Standard (21 )
352268
353269 return & mobileHandler {
354- Handler : base.Handler {Logger : params .Logger , Validator : params .Validator },
355- authSvc : params .AuthSvc ,
270+ Handler : base.Handler {Logger : params .Logger , Validator : params .Validator },
271+ authSvc : params .AuthSvc ,
272+
273+ messagesCtrl : params .MessagesCtrl ,
356274 devicesSvc : params .DevicesSvc ,
357- messagesSvc : params .MessagesSvc ,
358275 webhooksCtrl : params .WebhooksCtrl ,
359276 settingsCtrl : params .SettingsCtrl ,
360277 eventsCtrl : params .EventsCtrl ,
361- idGen : idGen ,
278+
279+ idGen : idGen ,
362280 }
363281}
0 commit comments