Skip to content

Commit 6b721cf

Browse files
committed
Remove phone upsert transaction
1 parent 212a183 commit 6b721cf

File tree

5 files changed

+36
-53
lines changed

5 files changed

+36
-53
lines changed

android/app/src/main/java/com/httpsms/MainActivity.kt

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ class MainActivity : AppCompatActivity() {
5353
Timber.d( "on activity resume")
5454
redirectToLogin()
5555
refreshToken(this)
56+
requestPermissions(this)
5657
}
5758

5859
private fun registerReceivers(context: Context) {
@@ -191,18 +192,20 @@ class MainActivity : AppCompatActivity() {
191192
if (ActivityCompat.checkSelfPermission(
192193
this,
193194
Manifest.permission.READ_SMS
194-
) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(
195+
) != PackageManager.PERMISSION_GRANTED || ActivityCompat.checkSelfPermission(
195196
this,
196197
READ_PHONE_NUMBERS
197-
) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(
198+
) != PackageManager.PERMISSION_GRANTED || ActivityCompat.checkSelfPermission(
198199
this,
199200
Manifest.permission.READ_PHONE_STATE
200201
) != PackageManager.PERMISSION_GRANTED
201202
) {
203+
Timber.d("cannot get owner because permissions are not granted")
202204
return Settings.getOwnerOrDefault(this)
203205
}
204206

205207
if (telephonyManager.line1Number != null) {
208+
Timber.d("line 1 number fetched [${telephonyManager.line1Number}]")
206209
Settings.setOwnerAsync(context, telephonyManager.line1Number)
207210
}
208211

@@ -214,11 +217,10 @@ class MainActivity : AppCompatActivity() {
214217
return
215218
}
216219

217-
Timber.e("requesting permissions")
218-
220+
Timber.d("requesting permissions")
219221
val requestPermissionLauncher = registerForActivityResult(ActivityResultContracts.RequestMultiplePermissions()) { permissions ->
220222
permissions.entries.forEach {
221-
Timber.e("${it.key} = ${it.value}")
223+
Timber.d("${it.key} = ${it.value}")
222224
setOwner(getPhoneNumber(context))
223225
}
224226
}
@@ -233,6 +235,6 @@ class MainActivity : AppCompatActivity() {
233235
)
234236
)
235237

236-
Timber.e("creating luncher")
238+
Timber.d("creating permissions launcher")
237239
}
238240
}

android/app/src/main/java/com/httpsms/Settings.kt

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -137,17 +137,6 @@ object Settings {
137137
.apply()
138138
}
139139

140-
fun getReceiverRegistered(context: Context): Boolean{
141-
Timber.d(Settings::getReceiverRegistered.name)
142-
143-
val receiverRegistered = PreferenceManager
144-
.getDefaultSharedPreferences(context)
145-
.getBoolean(this.SETTINGS_RECEIVER_REGISTERED,false)
146-
147-
Timber.d("SETTINGS_RECEIVER_REGISTERED: [$receiverRegistered]")
148-
return receiverRegistered
149-
}
150-
151140
fun setReceiverRegistered(context: Context, registered: Boolean) {
152141
Timber.d(Settings::setReceiverRegistered.name)
153142

api/pkg/repositories/gorm_phone_repository.go

Lines changed: 4 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ import (
77

88
"github.com/NdoleStudio/http-sms-manager/pkg/entities"
99
"github.com/NdoleStudio/http-sms-manager/pkg/telemetry"
10-
"github.com/cockroachdb/cockroach-go/v2/crdb/crdbgorm"
1110
"github.com/palantir/stacktrace"
1211
"gorm.io/gorm"
1312
)
@@ -32,37 +31,13 @@ func NewGormPhoneRepository(
3231
}
3332
}
3433

35-
func (repository *gormPhoneRepository) Upsert(ctx context.Context, phone *entities.Phone) error {
34+
// Save a new entities.Phone
35+
func (repository *gormPhoneRepository) Save(ctx context.Context, phone *entities.Phone) error {
3636
ctx, span := repository.tracer.Start(ctx)
3737
defer span.End()
3838

39-
err := crdbgorm.ExecuteTx(ctx, repository.db, nil, func(tx *gorm.DB) error {
40-
existingPhone := new(entities.Phone)
41-
42-
err := tx.WithContext(ctx).Model(&phone).
43-
Where("user_id = ?", phone.UserID).
44-
Where("phone_number = ?", phone.PhoneNumber).
45-
First(existingPhone).
46-
Error
47-
48-
if err == nil {
49-
existingPhone.FcmToken = phone.FcmToken
50-
if err = tx.Save(existingPhone).Error; err != nil {
51-
return stacktrace.Propagate(err, fmt.Sprintf("cannot update exiting phone [%s]", existingPhone.ID))
52-
}
53-
*phone = *existingPhone
54-
return nil
55-
}
56-
57-
if !errors.Is(err, gorm.ErrRecordNotFound) {
58-
msg := fmt.Sprintf("cannot find phone with user_Id [%s] and phone_number [%s]", phone.UserID, phone.PhoneNumber)
59-
return stacktrace.Propagate(err, msg)
60-
}
61-
62-
return tx.Create(phone).Error
63-
})
64-
if err != nil {
65-
msg := fmt.Sprintf("cannot upsert phone with params [%+#v]", err)
39+
if err := repository.db.WithContext(ctx).Save(phone).Error; err != nil {
40+
msg := fmt.Sprintf("cannot save phone with ID [%s]", phone.ID)
6641
return repository.tracer.WrapErrorSpan(span, stacktrace.Propagate(err, msg))
6742
}
6843

api/pkg/repositories/phone_repository.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@ import (
88

99
// PhoneRepository loads and persists an entities.Phone
1010
type PhoneRepository interface {
11-
// Upsert a new entities.Phone
12-
Upsert(ctx context.Context, phone *entities.Phone) error
11+
// Save Upsert a new entities.Phone
12+
Save(ctx context.Context, phone *entities.Phone) error
1313

1414
// Index entities.Phone of a user
1515
Index(ctx context.Context, userID entities.UserID, params IndexParams) (*[]entities.Phone, error)

api/pkg/services/phone_service.go

Lines changed: 22 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,8 @@ import (
55
"fmt"
66
"time"
77

8-
"github.com/nyaruka/phonenumbers"
9-
108
"github.com/google/uuid"
9+
"github.com/nyaruka/phonenumbers"
1110

1211
"github.com/NdoleStudio/http-sms-manager/pkg/repositories"
1312
"github.com/palantir/stacktrace"
@@ -67,6 +66,25 @@ func (service *PhoneService) Upsert(ctx context.Context, params PhoneUpsertParam
6766

6867
ctxLogger := service.tracer.CtxLogger(service.logger, span)
6968

69+
phone, err := service.repository.Load(ctx, params.UserID, phonenumbers.Format(&params.PhoneNumber, phonenumbers.E164))
70+
if stacktrace.GetCode(err) == repositories.ErrCodeNotFound {
71+
return service.createPhone(ctx, params)
72+
}
73+
74+
phone.FcmToken = &params.FcmToken
75+
if err = service.repository.Save(ctx, phone); err != nil {
76+
msg := fmt.Sprintf("cannot update phone with id [%s] and number [%s]", phone.ID, phone.PhoneNumber)
77+
return nil, service.tracer.WrapErrorSpan(span, stacktrace.Propagate(err, msg))
78+
}
79+
80+
ctxLogger.Info(fmt.Sprintf("phone saved with id [%s] in the userRepository", phone.ID))
81+
return phone, nil
82+
}
83+
84+
func (service *PhoneService) createPhone(ctx context.Context, params PhoneUpsertParams) (*entities.Phone, error) {
85+
ctx, span := service.tracer.Start(ctx)
86+
defer span.End()
87+
7088
phone := &entities.Phone{
7189
ID: uuid.New(),
7290
UserID: params.UserID,
@@ -76,11 +94,10 @@ func (service *PhoneService) Upsert(ctx context.Context, params PhoneUpsertParam
7694
UpdatedAt: time.Now().UTC(),
7795
}
7896

79-
if err := service.repository.Upsert(ctx, phone); err != nil {
80-
msg := fmt.Sprintf("cannot save phone with id [%s]", phone.ID)
97+
if err := service.repository.Save(ctx, phone); err != nil {
98+
msg := fmt.Sprintf("cannot create phone with id [%s] and number [%s]", phone.ID, phone.PhoneNumber)
8199
return nil, service.tracer.WrapErrorSpan(span, stacktrace.Propagate(err, msg))
82100
}
83101

84-
ctxLogger.Info(fmt.Sprintf("phone saved with id [%s] in the userRepository", phone.ID))
85102
return phone, nil
86103
}

0 commit comments

Comments
 (0)