UpsertFCMToken the FCM token for an entities.Phone
(ctx context.Context, params *PhoneFCMTokenParams)
| 229 | |
| 230 | // UpsertFCMToken the FCM token for an entities.Phone |
| 231 | func (service *PhoneService) UpsertFCMToken(ctx context.Context, params *PhoneFCMTokenParams) (*entities.Phone, error) { |
| 232 | ctx, span, ctxLogger := service.tracer.StartWithLogger(ctx, service.logger) |
| 233 | defer span.End() |
| 234 | |
| 235 | phone, err := service.repository.Load(ctx, params.UserID, phonenumbers.Format(params.PhoneNumber, phonenumbers.E164)) |
| 236 | if stacktrace.GetCode(err) == repositories.ErrCodeNotFound { |
| 237 | return service.createPhone(ctx, params) |
| 238 | } |
| 239 | |
| 240 | if err != nil { |
| 241 | msg := fmt.Sprintf("cannot upsert FCM token for user with id [%s] and number [%s]", params.UserID, params.PhoneNumber) |
| 242 | return nil, service.tracer.WrapErrorSpan(span, stacktrace.Propagate(err, msg)) |
| 243 | } |
| 244 | |
| 245 | phone.FcmToken = params.FcmToken |
| 246 | phone.SIM = params.SIM |
| 247 | |
| 248 | if err = service.repository.Save(ctx, phone); err != nil { |
| 249 | msg := fmt.Sprintf("cannot update phone with id [%s] and number [%s]", phone.ID, phone.PhoneNumber) |
| 250 | return nil, service.tracer.WrapErrorSpan(span, stacktrace.Propagate(err, msg)) |
| 251 | } |
| 252 | |
| 253 | ctxLogger.Info(fmt.Sprintf("phone updated with id [%s] in the phone repository for user [%s]", phone.ID, phone.UserID)) |
| 254 | return phone, service.dispatchPhoneUpdatedEvent(ctx, phone, params) |
| 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) |