diff --git a/api/requests.http b/api/requests.http index 83a82d9..2d922d2 100644 --- a/api/requests.http +++ b/api/requests.http @@ -42,11 +42,11 @@ Content-Type: application/json [ { - "id": "ZoK8jU8y74cZRnZH1xNIH", + "id": "-rnEaUz7KObDdokPrzKpM", "state": "Delivered", "recipients": [ { - "phoneNumber": "79504241345", + "phoneNumber": "{{phone}}", "state": "Delivered" } ] diff --git a/internal/sms-gateway/app.go b/internal/sms-gateway/app.go index b434f25..f7af1bc 100644 --- a/internal/sms-gateway/app.go +++ b/internal/sms-gateway/app.go @@ -11,6 +11,7 @@ import ( "github.com/capcom6/sms-gateway/internal/sms-gateway/models" "github.com/capcom6/sms-gateway/internal/sms-gateway/repositories" "github.com/capcom6/sms-gateway/internal/sms-gateway/services" + "github.com/capcom6/sms-gateway/internal/sms-gateway/tasks" "go.uber.org/fx" "go.uber.org/fx/fxevent" "go.uber.org/zap" @@ -29,6 +30,7 @@ var Module = fx.Module( repositories.Module, models.Module, db.Module, + tasks.Module, ) func Run() { @@ -40,16 +42,5 @@ func Run() { logOption.UseLogLevel(zapcore.DebugLevel) return &logOption }), - // fx.Invoke( - // func(lc fx.Lifecycle, logger *zap.Logger, messagesSvc *services.MessagesService) { - // lc.Append( - // fx.Hook{ - // OnStart: func(ctx context.Context) error { - // return messagesSvc.HashProcessed() - // }, - // }, - // ) - // }, - // ), ).Run() } diff --git a/internal/sms-gateway/tasks/hashing.go b/internal/sms-gateway/tasks/hashing.go index 9b29ce4..c5b60ef 100644 --- a/internal/sms-gateway/tasks/hashing.go +++ b/internal/sms-gateway/tasks/hashing.go @@ -1 +1,45 @@ package tasks + +import ( + "context" + "time" + + "github.com/capcom6/sms-gateway/internal/sms-gateway/services" + "go.uber.org/fx" + "go.uber.org/zap" +) + +type HashingTaskParams struct { + fx.In + + MessagesSvc *services.MessagesService + Logger *zap.Logger +} + +type HashingTask struct { + MessagesSvc *services.MessagesService + Logger *zap.Logger +} + +func (t *HashingTask) Run(ctx context.Context) { + t.Logger.Info("Starting hashing task...") + for { + select { + case <-ctx.Done(): + t.Logger.Info("Stopping hashing task...") + return + case <-time.After(15 * time.Minute): + t.Logger.Debug("Hashing messages...") + if err := t.MessagesSvc.HashProcessed(); err != nil { + t.Logger.Error("Failed to hash processed messages", zap.Error(err)) + } + } + } +} + +func NewHashingTask(params HashingTaskParams) *HashingTask { + return &HashingTask{ + MessagesSvc: params.MessagesSvc, + Logger: params.Logger, + } +} diff --git a/internal/sms-gateway/tasks/module.go b/internal/sms-gateway/tasks/module.go new file mode 100644 index 0000000..c0df981 --- /dev/null +++ b/internal/sms-gateway/tasks/module.go @@ -0,0 +1,37 @@ +package tasks + +import ( + "context" + + "go.uber.org/fx" + "go.uber.org/zap" +) + +var Module = fx.Module( + "tasks", + fx.Decorate(func(log *zap.Logger) *zap.Logger { + return log.Named("tasks") + }), + fx.Provide( + NewHashingTask, + fx.Private, + ), + fx.Invoke( + func(lc fx.Lifecycle, task *HashingTask) error { + ctx, cancel := context.WithCancel(context.Background()) + + lc.Append(fx.Hook{ + OnStart: func(_ context.Context) error { + go task.Run(ctx) + return nil + }, + OnStop: func(_ context.Context) error { + cancel() + return nil + }, + }) + + return nil + }, + ), +)