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

Method Upsert

api/pkg/services/phone_service.go:114–153  ·  view source on GitHub ↗

Upsert a new entities.Phone

(ctx context.Context, params *PhoneUpsertParams)

Source from the content-addressed store, hash-verified

112
113// Upsert a new entities.Phone
114func (service *PhoneService) Upsert(ctx context.Context, params *PhoneUpsertParams) (*entities.Phone, error) {
115 ctx, span := service.tracer.Start(ctx)
116 defer span.End()
117
118 ctxLogger := service.tracer.CtxLogger(service.logger, span)
119
120 phone, err := service.repository.Load(ctx, params.UserID, phonenumbers.Format(params.PhoneNumber, phonenumbers.E164))
121 if stacktrace.GetCode(err) == repositories.ErrCodeNotFound {
122 return service.createPhone(ctx, &PhoneFCMTokenParams{
123 Source: params.Source,
124 PhoneNumber: params.PhoneNumber,
125 PhoneAPIKeyID: nil,
126 UserID: params.UserID,
127 FcmToken: params.FcmToken,
128 SIM: params.SIM,
129 MessageSendScheduleID: params.MessageSendScheduleID,
130 })
131 }
132
133 if err != nil {
134 msg := fmt.Sprintf("cannot upsert phone with id [%s] and number [%s]", phone.ID, phone.PhoneNumber)
135 return nil, service.tracer.WrapErrorSpan(span, stacktrace.Propagate(err, msg))
136 }
137
138 if err = service.repository.Save(ctx, service.update(phone, params)); err != nil {
139 msg := fmt.Sprintf("cannot update phone with id [%s] and number [%s]", phone.ID, phone.PhoneNumber)
140 return nil, service.tracer.WrapErrorSpan(span, stacktrace.Propagate(err, msg))
141 }
142
143 ctxLogger.Info(fmt.Sprintf("phone updated with id [%s] in the phone repository for user [%s]", phone.ID, phone.UserID))
144 return phone, service.dispatchPhoneUpdatedEvent(ctx, phone, &PhoneFCMTokenParams{
145 Source: params.Source,
146 PhoneNumber: params.PhoneNumber,
147 PhoneAPIKeyID: nil,
148 UserID: params.UserID,
149 FcmToken: params.FcmToken,
150 SIM: params.SIM,
151 MessageSendScheduleID: params.MessageSendScheduleID,
152 })
153}
154
155func (service *PhoneService) dispatchPhoneUpdatedEvent(ctx context.Context, phone *entities.Phone, input *PhoneFCMTokenParams) error {
156 ctx, span := service.tracer.Start(ctx)

Callers 1

setupPhoneFunction · 0.45

Calls 9

createPhoneMethod · 0.95
updateMethod · 0.95
StartMethod · 0.65
CtxLoggerMethod · 0.65
LoadMethod · 0.65
WrapErrorSpanMethod · 0.65
SaveMethod · 0.65
InfoMethod · 0.65

Tested by 1

setupPhoneFunction · 0.36