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