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

Method ReceiveMessage

api/pkg/services/message_service.go:334–378  ·  view source on GitHub ↗

ReceiveMessage handles message received by a mobile phone

(ctx context.Context, params *MessageReceiveParams)

Source from the content-addressed store, hash-verified

332
333// ReceiveMessage handles message received by a mobile phone
334func (service *MessageService) ReceiveMessage(ctx context.Context, params *MessageReceiveParams) (*entities.Message, error) {
335 ctx, span := service.tracer.Start(ctx)
336 defer span.End()
337
338 ctxLogger := service.tracer.CtxLogger(service.logger, span)
339
340 messageID := uuid.New()
341
342 ctxLogger.Info(fmt.Sprintf("uploading [%d] attachments for user [%s] message [%s]", len(params.Attachments), params.UserID, messageID))
343 attachmentURLs, err := service.uploadAttachments(ctx, params.UserID, messageID, params.Attachments)
344 if err != nil {
345 msg := fmt.Sprintf("cannot upload attachments for user [%s] message [%s]", params.UserID, messageID)
346 return nil, service.tracer.WrapErrorSpan(span, stacktrace.Propagate(err, msg))
347 }
348
349 eventPayload := events.MessagePhoneReceivedPayload{
350 MessageID: messageID,
351 UserID: params.UserID,
352 Encrypted: params.Encrypted,
353 Owner: phonenumbers.Format(&params.Owner, phonenumbers.E164),
354 Contact: params.Contact,
355 Timestamp: params.Timestamp,
356 Content: params.Content,
357 SIM: params.SIM,
358 Attachments: attachmentURLs,
359 }
360
361 ctxLogger.Info(fmt.Sprintf("creating cloud event for received with ID [%s]", eventPayload.MessageID))
362
363 event, err := service.createMessagePhoneReceivedEvent(params.Source, eventPayload)
364 if err != nil {
365 msg := fmt.Sprintf("cannot create %T from payload with message id [%s]", event, eventPayload.MessageID)
366 return nil, service.tracer.WrapErrorSpan(span, stacktrace.Propagate(err, msg))
367 }
368
369 ctxLogger.Info(fmt.Sprintf("created event [%s] with id [%s] and message id [%s]", event.Type(), event.ID(), eventPayload.MessageID))
370
371 if err = service.eventDispatcher.Dispatch(ctx, event); err != nil {
372 msg := fmt.Sprintf("cannot dispatch event type [%s] and id [%s]", event.Type(), event.ID())
373 return nil, service.tracer.WrapErrorSpan(span, stacktrace.Propagate(err, msg))
374 }
375 ctxLogger.Info(fmt.Sprintf("event [%s] dispatched successfully", event.ID()))
376
377 return service.storeReceivedMessage(ctx, eventPayload)
378}
379
380func (service *MessageService) handleMessageSentEvent(ctx context.Context, params MessageStoreEventParams, message *entities.Message) error {
381 ctx, span := service.tracer.Start(ctx)

Callers 1

PostReceiveMethod · 0.80

Calls 8

uploadAttachmentsMethod · 0.95
storeReceivedMessageMethod · 0.95
StartMethod · 0.65
CtxLoggerMethod · 0.65
InfoMethod · 0.65
WrapErrorSpanMethod · 0.65
DispatchMethod · 0.45

Tested by

no test coverage detected