(ctx context.Context, params *PhoneFCMTokenParams)
| 255 | } |
| 256 | |
| 257 | func (service *PhoneService) createPhone(ctx context.Context, params *PhoneFCMTokenParams) (*entities.Phone, error) { |
| 258 | ctx, span, ctxLogger := service.tracer.StartWithLogger(ctx, service.logger) |
| 259 | defer span.End() |
| 260 | |
| 261 | phone := &entities.Phone{ |
| 262 | ID: uuid.New(), |
| 263 | UserID: params.UserID, |
| 264 | FcmToken: params.FcmToken, |
| 265 | // Android has a limit of 30 SMS messages per minute without user permission, to be safe let's use 10 messages per minute |
| 266 | // https://android.googlesource.com/platform/frameworks/opt/telephony/+/master/src/java/com/android/internal/telephony/SmsUsageMonitor.java#80 |
| 267 | MessagesPerMinute: 10, |
| 268 | MessageExpirationSeconds: 10 * 60, // 10 minutes |
| 269 | MaxSendAttempts: 2, |
| 270 | SIM: params.SIM, |
| 271 | MissedCallAutoReply: nil, |
| 272 | MessageSendScheduleID: params.MessageSendScheduleID, |
| 273 | PhoneNumber: phonenumbers.Format(params.PhoneNumber, phonenumbers.E164), |
| 274 | CreatedAt: time.Now().UTC(), |
| 275 | UpdatedAt: time.Now().UTC(), |
| 276 | } |
| 277 | |
| 278 | if err := service.repository.Save(ctx, phone); err != nil { |
| 279 | msg := fmt.Sprintf("cannot create phone with id [%s] and number [%s]", phone.ID, phone.PhoneNumber) |
| 280 | return nil, service.tracer.WrapErrorSpan(span, stacktrace.Propagate(err, msg)) |
| 281 | } |
| 282 | |
| 283 | ctxLogger.Info(fmt.Sprintf("phone updated with id [%s] in the phone repository for user [%s]", phone.ID, phone.UserID)) |
| 284 | return phone, service.dispatchPhoneUpdatedEvent(ctx, phone, params) |
| 285 | } |
| 286 | |
| 287 | func (service *PhoneService) createPhoneUpdatedEvent(source string, payload events.PhoneUpdatedPayload) (cloudevents.Event, error) { |
| 288 | return service.createEvent(events.EventTypePhoneUpdated, source, payload) |
no test coverage detected