File tree Expand file tree Collapse file tree 5 files changed +53
-3
lines changed
sms-gateway/modules/devices Expand file tree Collapse file tree 5 files changed +53
-3
lines changed Original file line number Diff line number Diff line change 88 "github.com/capcom6/go-infra-fx/http"
99 "github.com/capcom6/sms-gateway/internal/sms-gateway/handlers"
1010 "github.com/capcom6/sms-gateway/internal/sms-gateway/modules/auth"
11+ "github.com/capcom6/sms-gateway/internal/sms-gateway/modules/devices"
1112 "github.com/capcom6/sms-gateway/internal/sms-gateway/modules/messages"
1213 "github.com/capcom6/sms-gateway/internal/sms-gateway/modules/push"
1314 "go.uber.org/fx"
@@ -79,4 +80,9 @@ var Module = fx.Module(
7980 ProcessedLifetime : 30 * 24 * time .Hour , //TODO: make it configurable
8081 }
8182 }),
83+ fx .Provide (func (cfg Config ) devices.Config {
84+ return devices.Config {
85+ UnusedLifetime : 365 * 24 * time .Hour , //TODO: make it configurable
86+ }
87+ }),
8288)
Original file line number Diff line number Diff line change 1+ package devices
2+
3+ import "time"
4+
5+ type Config struct {
6+ UnusedLifetime time.Duration
7+ }
Original file line number Diff line number Diff line change 11package devices
22
33import (
4+ "github.com/capcom6/sms-gateway/internal/sms-gateway/modules/cleaner"
45 "go.uber.org/fx"
56 "go.uber.org/zap"
67)
78
9+ type FxResult struct {
10+ fx.Out
11+
12+ Service * Service
13+ AsCleaner cleaner.Cleanable `group:"cleaners"`
14+ }
15+
816var Module = fx .Module (
917 "devices" ,
1018 fx .Decorate (func (log * zap.Logger ) * zap.Logger {
@@ -14,7 +22,11 @@ var Module = fx.Module(
1422 newDevicesRepository ,
1523 fx .Private ,
1624 ),
17- fx .Provide (
18- NewService ,
19- ),
25+ fx .Provide (func (p ServiceParams ) FxResult {
26+ svc := NewService (p )
27+ return FxResult {
28+ Service : svc ,
29+ AsCleaner : svc ,
30+ }
31+ }),
2032)
Original file line number Diff line number Diff line change 11package devices
22
33import (
4+ "context"
45 "errors"
56 "time"
67
@@ -58,6 +59,15 @@ func (r *repository) UpdateLastSeen(id string) error {
5859 return r .db .Model (& models.Device {}).Where ("id" , id ).Update ("last_seen" , time .Now ()).Error
5960}
6061
62+ func (r * repository ) removeUnused (ctx context.Context , since time.Time ) (int64 , error ) {
63+ res := r .db .
64+ WithContext (ctx ).
65+ Where ("updated_at < ?" , since ).
66+ Delete (& models.Device {})
67+
68+ return res .RowsAffected , res .Error
69+ }
70+
6171func newDevicesRepository (db * gorm.DB ) * repository {
6272 return & repository {
6373 db : db ,
Original file line number Diff line number Diff line change 11package devices
22
33import (
4+ "context"
5+ "time"
6+
47 "github.com/capcom6/sms-gateway/internal/sms-gateway/models"
58 "github.com/capcom6/sms-gateway/internal/sms-gateway/modules/db"
69 "go.uber.org/fx"
@@ -10,6 +13,8 @@ import (
1013type ServiceParams struct {
1114 fx.In
1215
16+ Config Config
17+
1318 Devices * repository
1419
1520 IDGen db.IDGen
@@ -18,6 +23,8 @@ type ServiceParams struct {
1823}
1924
2025type Service struct {
26+ config Config
27+
2128 devices * repository
2229
2330 idGen db.IDGen
@@ -49,8 +56,16 @@ func (s *Service) UpdateLastSeen(deviceId string) error {
4956 return s .devices .UpdateLastSeen (deviceId )
5057}
5158
59+ func (s * Service ) Clean (ctx context.Context ) error {
60+ n , err := s .devices .removeUnused (ctx , time .Now ().Add (- s .config .UnusedLifetime ))
61+
62+ s .logger .Info ("Cleaned unused devices" , zap .Int64 ("count" , n ))
63+ return err
64+ }
65+
5266func NewService (params ServiceParams ) * Service {
5367 return & Service {
68+ config : params .Config ,
5469 devices : params .Devices ,
5570 idGen : params .IDGen ,
5671 logger : params .Logger .Named ("service" ),
You can’t perform that action at this time.
0 commit comments