6
6
7
7
use FactorioItemBrowser \Api \Client \Request \Search \SearchQueryRequest ;
8
8
use FactorioItemBrowser \Api \Client \Response \Search \SearchQueryResponse ;
9
+ use FactorioItemBrowser \Api \Database \Entity \Combination ;
9
10
use FactorioItemBrowser \Api \Search \SearchManagerInterface ;
10
11
use FactorioItemBrowser \Api \Server \Response \ClientResponse ;
11
12
use FactorioItemBrowser \Api \Server \Service \SearchDecoratorService ;
13
+ use FactorioItemBrowser \Api \Server \Service \TrackingService ;
14
+ use FactorioItemBrowser \Api \Server \Tracking \Event \SearchEvent ;
12
15
use Psr \Http \Message \ResponseInterface ;
13
16
use Psr \Http \Message \ServerRequestInterface ;
14
17
use Psr \Http \Server \RequestHandlerInterface ;
@@ -24,19 +27,26 @@ class SearchQueryHandler implements RequestHandlerInterface
24
27
{
25
28
private SearchDecoratorService $ searchDecoratorService ;
26
29
private SearchManagerInterface $ searchManager ;
30
+ private TrackingService $ trackingService ;
27
31
28
32
public function __construct (
29
33
SearchDecoratorService $ searchDecoratorService ,
30
- SearchManagerInterface $ searchManager
34
+ SearchManagerInterface $ searchManager ,
35
+ TrackingService $ trackingService ,
31
36
) {
32
37
$ this ->searchDecoratorService = $ searchDecoratorService ;
33
38
$ this ->searchManager = $ searchManager ;
39
+ $ this ->trackingService = $ trackingService ;
34
40
}
35
41
36
42
public function handle (ServerRequestInterface $ request ): ResponseInterface
37
43
{
38
44
/** @var SearchQueryRequest $clientRequest */
39
45
$ clientRequest = $ request ->getParsedBody ();
46
+ /** @var Combination $combination */
47
+ $ combination = $ request ->getAttribute (Combination::class);
48
+
49
+ $ startTime = microtime (true );
40
50
41
51
$ searchQuery = $ this ->searchManager ->parseQuery (
42
52
Uuid::fromString ($ clientRequest ->combinationId ),
@@ -56,6 +66,17 @@ public function handle(ServerRequestInterface $request): ResponseInterface
56
66
$ response = new SearchQueryResponse ();
57
67
$ response ->results = $ decoratedSearchResults ; // @phpstan-ignore-line
58
68
$ response ->totalNumberOfResults = $ searchResults ->count ();
69
+
70
+ $ trackingEvent = new SearchEvent ();
71
+ $ trackingEvent ->combinationId = $ clientRequest ->combinationId ;
72
+ $ trackingEvent ->modCount = $ combination ->getMods ()->count ();
73
+ $ trackingEvent ->locale = $ clientRequest ->locale ;
74
+ $ trackingEvent ->queryString = $ clientRequest ->query ;
75
+ $ trackingEvent ->resultCount = $ response ->totalNumberOfResults ;
76
+ $ trackingEvent ->runtime = microtime (true ) - $ startTime ;
77
+ $ trackingEvent ->cached = $ searchResults ->getIsCached ();
78
+ $ this ->trackingService ->addEvent ($ trackingEvent );
79
+
59
80
return new ClientResponse ($ response );
60
81
}
61
82
}
0 commit comments