server/src/app/Http/Controllers/Api/DateStatsController.php
changeset 424 feb0d3e0fef9
parent 407 2dba812c7ef2
child 425 f99435a7006e
--- a/server/src/app/Http/Controllers/Api/DateStatsController.php	Mon Nov 14 17:23:43 2016 +0100
+++ b/server/src/app/Http/Controllers/Api/DateStatsController.php	Tue Nov 15 17:42:57 2016 +0100
@@ -12,23 +12,8 @@
 
 class DateStatsController extends Controller
 {
-    /**
-     * Display the specified resource.
-     *
-     * @return \Illuminate\Http\Response
-     */
-    public function index(Request $request)
-    {
-
-
-        $filterManager = new CorpusFilterManager();
-        $filters = $filterManager->prepareFilters($request);
-        unset($filters['dates']);
-        $qFilterParts = $filterManager->buildESFilters($filters);
-
-        $query = $filterManager->buildQuery($qFilterParts);
-
-        $esQuery = [
+    private function getStatQuery($query) {
+        return [
             'index' => config('elasticsearch.index'),
             'body' => [
                 "size" => 0,
@@ -60,6 +45,70 @@
                 ]
             ]
         ];
+    }
+
+    private function getMinMaxQuery($query) {
+        return [
+            'index' => config('elasticsearch.index'),
+            'body' => [
+                "size" => 0,
+                "query" => $query,
+                "aggs" => [
+                    "datestats" => [
+                        "nested"=> [
+                            "path" => "creation_years"
+                        ],
+                        "aggs" => [
+                            "minyear" => [
+                                "min" => [ "field"=> "creation_years.year" ]
+                            ],
+                            "maxyear" => [
+                                "max" => [ "field"=> "creation_years.year" ]
+                            ]
+                        ]
+                    ]
+                ]
+            ]
+        ];
+    }
+
+    private function getDocQuery(Request $request) {
+        $filterManager = new CorpusFilterManager();
+        $filters = $filterManager->prepareFilters($request);
+        unset($filters['dates']);
+        $qFilterParts = $filterManager->buildESFilters($filters);
+
+        return $filterManager->buildQuery($qFilterParts);
+    }
+
+    /**
+     * Display the min max date stats
+     */
+    public function minmax(Request $request) {
+        $query = $this->getDocQuery($request);
+
+        $esQuery = $this->getMinMaxQuery($query);
+        $esRes = Es::search($esQuery);
+
+        $datestats = [];
+
+        $max = intval($esRes['aggregations']['datestats']['maxyear']['value']);
+        $min = intval($esRes['aggregations']['datestats']['maxyear']['value']);
+
+        return response()->json(['dateminmax' => [ $min, $max ] ]);
+    }
+
+    /**
+     * Display the dates stats
+     *
+     * @return \Illuminate\Http\Response
+     */
+    public function index(Request $request)
+    {
+
+        $query = $this->getDocQuery($request);
+
+        $esQuery = $this->getStatQuery($query);
         $esRes = Es::search($esQuery);
 
         $datestats = [];