MCPcopy Index your code
hub / github.com/NdoleStudio/httpsms / PostReceive

Method PostReceive

api/pkg/handlers/message_handler.go:355–392  ·  view source on GitHub ↗

PostReceive receives a new entities.Message @Summary Receive a new SMS message from a mobile phone @Description Add a new message received from a mobile phone @Security ApiKeyAuth @Tags Messages @Accept json @Produce json @Param payload body requests.MessageReceive

(c fiber.Ctx)

Source from the content-addressed store, hash-verified

353// @Failure 500 {object} responses.InternalServerError
354// @Router /messages/receive [post]
355func (h *MessageHandler) PostReceive(c fiber.Ctx) error {
356 ctx, span := h.tracer.StartFromFiberCtx(c)
357 defer span.End()
358
359 ctxLogger := h.tracer.CtxLogger(h.logger, span)
360
361 var request requests.MessageReceive
362 if err := c.Bind().Body(&request); err != nil {
363 msg := fmt.Sprintf("cannot marshall [%s] into %T", c.Body(), request)
364 ctxLogger.Warn(stacktrace.Propagate(err, msg))
365 return h.responseBadRequest(c, err)
366 }
367
368 if errors := h.validator.ValidateMessageReceive(ctx, request.Sanitize()); len(errors) != 0 {
369 msg := fmt.Sprintf("validation errors [%s], while sending payload [%s]", spew.Sdump(errors), c.Body())
370 ctxLogger.Warn(stacktrace.NewError(msg))
371 return h.responseUnprocessableEntity(c, errors, "validation errors while receiving message")
372 }
373
374 if msg := h.billingService.IsEntitled(ctx, h.userIDFomContext(c)); msg != nil {
375 ctxLogger.Warn(stacktrace.NewError(fmt.Sprintf("user with ID [%s] can't receive a message becasuse they have exceeded the limit", h.userIDFomContext(c))))
376 return h.responsePaymentRequired(c, *msg)
377 }
378
379 if !h.authorizePhoneAPIKey(c, request.To) {
380 ctxLogger.Warn(stacktrace.NewError(fmt.Sprintf("user with ID [%s] is not authorized to receive message to phone number [%s]", h.userIDFomContext(c), request.To)))
381 return h.responsePhoneAPIKeyUnauthorized(c, request.To, h.userFromContext(c))
382 }
383
384 message, err := h.service.ReceiveMessage(ctx, request.ToMessageReceiveParams(h.userIDFomContext(c), c.OriginalURL()))
385 if err != nil {
386 msg := fmt.Sprintf("cannot receive message with paylod [%s]", c.Body())
387 ctxLogger.Error(stacktrace.Propagate(err, msg))
388 return h.responseInternalServerError(c)
389 }
390
391 return h.responseOK(c, "message received successfully", message)
392}
393
394// Delete a message
395// @Summary Delete a message from the database.

Callers

nothing calls this directly

Calls 15

SanitizeMethod · 0.95
responseBadRequestMethod · 0.80
userIDFomContextMethod · 0.80
authorizePhoneAPIKeyMethod · 0.80
userFromContextMethod · 0.80
ReceiveMessageMethod · 0.80

Tested by

no test coverage detected