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)
| 353 | // @Failure 500 {object} responses.InternalServerError |
| 354 | // @Router /messages/receive [post] |
| 355 | func (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. |
nothing calls this directly
no test coverage detected