@@ -38,7 +38,8 @@ type Service struct {
38
38
users * repositories.UsersRepository
39
39
usersCache * cache.Cache [models.User ]
40
40
41
- devicesSvc * devices.Service
41
+ devicesSvc * devices.Service
42
+ devicesCache * cache.Cache [models.Device ]
42
43
43
44
logger * zap.Logger
44
45
@@ -55,7 +56,8 @@ func New(params Params) *Service {
55
56
logger : params .Logger .Named ("Service" ),
56
57
idgen : idgen ,
57
58
58
- usersCache : cache.New [models.User ](cache.Config {TTL : 1 * time .Hour }),
59
+ usersCache : cache.New [models.User ](cache.Config {TTL : 1 * time .Hour }),
60
+ devicesCache : cache.New [models.Device ](cache.Config {TTL : 10 * time .Minute }),
59
61
}
60
62
}
61
63
@@ -106,14 +108,28 @@ func (s *Service) AuthorizeRegistration(token string) error {
106
108
}
107
109
108
110
func (s * Service ) AuthorizeDevice (token string ) (models.Device , error ) {
109
- device , err := s .devicesSvc .Get (devices .WithToken (token ))
111
+ hash := sha256 .Sum256 ([]byte (token ))
112
+ cacheKey := hex .EncodeToString (hash [:])
113
+
114
+ device , err := s .devicesCache .Get (cacheKey )
110
115
if err != nil {
111
- return device , err
116
+ device , err = s .devicesSvc .Get (devices .WithToken (token ))
117
+ if err != nil {
118
+ return device , fmt .Errorf ("can't get device: %w" , err )
119
+ }
120
+
121
+ if err := s .devicesCache .Set (cacheKey , device ); err != nil {
122
+ s .logger .Error ("can't cache device" , zap .Error (err ))
123
+ }
112
124
}
113
125
114
- if err := s .devicesSvc .UpdateLastSeen (device .ID ); err != nil {
115
- s .logger .Error ("can't update last seen" , zap .Error (err ))
116
- }
126
+ go func (id string ) {
127
+ if err := s .devicesSvc .UpdateLastSeen (id ); err != nil {
128
+ s .logger .Error ("can't update last seen" , zap .Error (err ))
129
+ }
130
+ }(device .ID )
131
+
132
+ device .LastSeen = time .Now ()
117
133
118
134
return device , nil
119
135
}
0 commit comments