Skip to content

Commit 87e95ab

Browse files
committed
[devices] add clean method
1 parent ca9b09e commit 87e95ab

File tree

5 files changed

+53
-3
lines changed

5 files changed

+53
-3
lines changed

internal/config/module.go

+6
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import (
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 numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package devices
2+
3+
import "time"
4+
5+
type Config struct {
6+
UnusedLifetime time.Duration
7+
}
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,18 @@
11
package devices
22

33
import (
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+
816
var 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
)

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

+10
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package devices
22

33
import (
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+
6171
func newDevicesRepository(db *gorm.DB) *repository {
6272
return &repository{
6373
db: db,

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

+15
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
package devices
22

33
import (
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 (
1013
type 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

2025
type 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+
5266
func 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"),

0 commit comments

Comments
 (0)