Skip to content

Commit e4dce05

Browse files
committed
[devices] minor fixes to last seen update
1 parent d4bb873 commit e4dce05

File tree

2 files changed

+25
-13
lines changed

2 files changed

+25
-13
lines changed

internal/sms-gateway/modules/devices/repository.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ func (r *repository) Insert(device *models.Device) error {
6868
}
6969

7070
func (r *repository) UpdatePushToken(id, token string) error {
71-
return r.db.Model(&models.Device{}).Where("id", id).Update("push_token", token).Error
71+
return r.db.Model(&models.Device{}).Where("id = ?", id).Update("push_token", token).Error
7272
}
7373

7474
func (r *repository) SetLastSeen(ctx context.Context, id string, lastSeen time.Time) error {
@@ -78,7 +78,7 @@ func (r *repository) SetLastSeen(ctx context.Context, id string, lastSeen time.T
7878
res := r.db.WithContext(ctx).
7979
Model(&models.Device{}).
8080
Where("id = ? AND last_seen < ?", id, lastSeen).
81-
Update("last_seen", lastSeen)
81+
UpdateColumn("last_seen", lastSeen)
8282
if res.Error != nil {
8383
return res.Error
8484
}
@@ -99,7 +99,7 @@ func (r *repository) Remove(filter ...SelectFilter) error {
9999
func (r *repository) removeUnused(ctx context.Context, since time.Time) (int64, error) {
100100
res := r.db.
101101
WithContext(ctx).
102-
Where("updated_at < ?", since).
102+
Where("last_seen < ?", since).
103103
Delete(&models.Device{})
104104

105105
return res.RowsAffected, res.Error

internal/sms-gateway/modules/devices/service.go

Lines changed: 22 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"context"
55
"crypto/sha256"
66
"encoding/hex"
7+
"errors"
78
"fmt"
89
"time"
910

@@ -105,17 +106,21 @@ func (s *Service) SetLastSeen(ctx context.Context, batch map[string]time.Time) e
105106
return nil
106107
}
107108

108-
for deviceId, lastSeen := range batch {
109-
if ctx.Err() != nil {
110-
break
109+
var multiErr error
110+
for deviceID, lastSeen := range batch {
111+
if err := ctx.Err(); err != nil {
112+
return errors.Join(err, multiErr)
111113
}
112-
113-
if err := s.devices.SetLastSeen(ctx, deviceId, lastSeen); err != nil {
114-
s.logger.Error("can't set last seen", zap.String("device_id", deviceId), zap.Error(err))
114+
if err := s.devices.SetLastSeen(ctx, deviceID, lastSeen); err != nil {
115+
multiErr = errors.Join(multiErr, fmt.Errorf("device %s: %w", deviceID, err))
116+
s.logger.Error("can't set last seen",
117+
zap.String("device_id", deviceID),
118+
zap.Time("last_seen", lastSeen),
119+
zap.Error(err),
120+
)
115121
}
116122
}
117-
118-
return ctx.Err()
123+
return multiErr
119124
}
120125

121126
// Remove removes devices for a specific user that match the provided filters.
@@ -128,8 +133,15 @@ func (s *Service) Remove(userID string, filter ...SelectFilter) error {
128133
return err
129134
}
130135

131-
if err := s.tokensCache.Delete(device.AuthToken); err != nil {
132-
s.logger.Error("can't invalidate token cache", zap.Error(err))
136+
hash := sha256.Sum256([]byte(device.AuthToken))
137+
cacheKey := hex.EncodeToString(hash[:])
138+
139+
if err := s.tokensCache.Delete(cacheKey); err != nil {
140+
s.logger.Error("can't invalidate token cache",
141+
zap.String("device_id", device.ID),
142+
zap.String("cache_key", cacheKey),
143+
zap.Error(err),
144+
)
133145
}
134146

135147
return s.devices.Remove(filter...)

0 commit comments

Comments
 (0)