@@ -18,13 +18,23 @@ type EvaluateUseCase struct {
1818 moderation service.Moderation
1919 rateLimiter ports.RateLimiter
2020 eventProducer ports.EventProducer
21+ worker ports.Worker
2122 telegram config.Telegram
2223 cooldown time.Duration
2324 logger * slog.Logger
2425}
2526
26- func NewEvaluateUseCase (evaluator ports.Evaluator , moderation service.Moderation , rateLimiter ports.RateLimiter , eventProducer ports.EventProducer , config config.Config , logger * slog.Logger ) * EvaluateUseCase {
27- return & EvaluateUseCase {evaluator : evaluator , moderation : moderation , rateLimiter : rateLimiter , eventProducer : eventProducer , telegram : config .Telegram , cooldown : 2 * time .Second , logger : logger }
27+ func NewEvaluateUseCase (evaluator ports.Evaluator , moderation service.Moderation , rateLimiter ports.RateLimiter , eventProducer ports.EventProducer , worker ports.Worker , config config.Config , logger * slog.Logger ) * EvaluateUseCase {
28+ return & EvaluateUseCase {
29+ evaluator : evaluator ,
30+ moderation : moderation ,
31+ rateLimiter : rateLimiter ,
32+ eventProducer : eventProducer ,
33+ worker : worker ,
34+ telegram : config .Telegram ,
35+ cooldown : 60 * time .Second ,
36+ logger : logger ,
37+ }
2838
2939}
3040
@@ -38,11 +48,23 @@ func (e *EvaluateUseCase) Handle(ctx context.Context, in entities.EvalInput) err
3848
3949 return errors .New ("cooling down—try again in a moment" )
4050 }
51+
52+ e .worker .Submit (func () {
53+ e .process (in )
54+ })
55+
56+ return nil
57+ }
58+
59+ func (e * EvaluateUseCase ) process (in entities.EvalInput ) {
60+ ctx , cancelFunc := context .WithTimeout (context .Background (), e .cooldown )
61+ defer cancelFunc ()
62+
4163 // moderation
4264 allowed := e .moderation .Allowed (ctx , in )
4365 if ! allowed {
4466 e .logger .Warn ("message skipped" )
45- return errors . New ( "message skipped" )
67+ return
4668 }
4769 out , err := e .evaluator .Evaluate (ctx , in )
4870 if err != nil || out .Summary == "" {
@@ -51,12 +73,10 @@ func (e *EvaluateUseCase) Handle(ctx context.Context, in entities.EvalInput) err
5173
5274 e .sendMsg (ctx , in , "i couldn’t evaluate that right now" )
5375
54- return errors . New ( "i couldn’t evaluate that right now" )
76+ return
5577 }
5678
5779 e .sendMsg (ctx , in , out .Summary )
58-
59- return nil
6080}
6181
6282func (e * EvaluateUseCase ) sendMsg (ctx context.Context , in entities.EvalInput , replyMsg string ) {
0 commit comments