{"id":164,"date":"2021-01-15T14:39:55","date_gmt":"2021-01-15T14:39:55","guid":{"rendered":"https:\/\/intern.quizu.de\/?p=164"},"modified":"2021-01-18T12:56:11","modified_gmt":"2021-01-18T12:56:11","slug":"stats-manager-api","status":"publish","type":"post","link":"https:\/\/intern.quizu.de\/?p=164","title":{"rendered":"Stats Manager + API"},"content":{"rendered":"\n<p>In diesem Beitrag erkl\u00e4re ich wie unser neuer StatsManager im Hintergrund funktioniert und wie dieser per API angesteuert und benutzt werden kann.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Begriffe<\/h2>\n\n\n\n<p>Zuerst ein paar Begriffe kl\u00e4ren:<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Namespace<\/h3>\n\n\n\n<p>F\u00fcr Riddle selbst gibt es drei Namespaces:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>rid (f\u00fcr Riddles)<\/li><li>team<\/li><li>user<\/li><\/ul>\n\n\n\n<p>Diese sind wie &#8222;Schubladen&#8220;. Das hei\u00dft, dass in jeder dieser Schubladen Stats f\u00fcr alle diese Teilbereiche liegen. So kannst du zum Beispiel auch abfragen, wie viele Stats ein Team am Tag bekommen hat indem du im Namespace &#8222;team&#8220; den Tag (z.B. &#8222;2021-15-01&#8220;) queriest.<br>Wenn du den selben Tag im Namespace &#8222;rid&#8220; queriest, bekommst du zur\u00fcck wie viele Stats an diesem Tag f\u00fcr die spezifierte RiddleID reinkamen.<br><br>Die Magie dahinter ist, dass wir uns dadurch viel sparen k\u00f6nnen, da alles schon vorkalkuliert ist. Es ist zum Beispiel nicht n\u00f6tig \u00fcber alle Riddles eines Teams\/Users zu iterieren um dessen Gesamtstats zu bekommen &#8211; das regelt alles bereits der Namespace und summiert diese Stats bereits auf.<br>So w\u00e4re es z.B. auch m\u00f6glich schlau zu kombinieren: Wenn alle Riddle eines Teams bis auf eins summiert werden sollen, k\u00f6nnte man die Team Stats nehmen und die Stats von dem ausgeschlossenen Riddle abziehen.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">EntityID(s)<\/h3>\n\n\n\n<p>In der API gibt es das Param &#8222;entityId&#8220; oder bei mehreren Entities auch &#8222;entityIds&#8220;. Das sind einfach die unique EntityIDs aus der Datenbank. Nat\u00fcrlich muss man dann aufpassen, dass man Namespace und die EntityID richtig matcht. Wenn man Namespace=&#8217;team&#8216; und die EntityID eines Riddles w\u00e4hlt, kann es nat\u00fcrlich nicht funktionieren.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">From &amp; to<\/h3>\n\n\n\n<p>Bei jedem Zugriff auf den StatsManager muss man spezifizieren welchen Zeitraum man ausw\u00e4hlt. Z.B. from =&gt; &#8222;2021-15-01&#8220; und to =&gt; &#8222;2021-18-01&#8220;. Das ist dann 15. bis 18. Januar 2021.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Fetch, Bulk-Fetch &amp; Overview-Fetch<\/h3>\n\n\n\n<p><strong>Fetch liefert ein Dokument<\/strong> mit vielen Details, d.h. z.B. alle individuellen Answers. Diese Art von Fetch sollte genutzt werden wenn man f\u00fcr eine individuelle Entity <strong>ALLE<em> <\/em><\/strong>Infos returnt haben m\u00f6chte.<\/p>\n\n\n\n<p><strong>URL: <\/strong>\/creator\/stats-v2\/fetch\/{namespace}\/{entityId}\/{from}\/{to}<br><br><strong>Beispiel:<\/strong> Alle Stats f\u00fcr Team mit der ID 800 vom 01.01.21 bis zum 31.12.21<br>  &#8211; namespace: team<br>  &#8211; entityId: 800<br>  &#8211; from: 2021-01-01<br>  &#8211; to: 2021-12-31<\/p>\n\n\n\n<p>Bulk-Fetch droppt die Stats die das Stats-Array \u00fcberladen. Wenn mehrere Riddles\/Teams aufsummiert werden, sammeln sich sehr viele individuelle Answers an und der Speicher wird \u00fcberschritten =&gt; diese werden nicht beachtet.<br><strong>Bulk-Fetch<\/strong> <strong>summiert mehrere EntityIDs auf<\/strong>, liefert jedoch nur ein Stats-Array zur\u00fcck (=&gt; aufsummiert).<\/p>\n\n\n\n<p><strong>URL: <\/strong>\/creator\/stats-v2\/bulk-fetch\/{namespace}\/{from}\/{to}<br><strong>Param <\/strong>namespace: Hier bedeutet namespace so viel wie: Wenn &#8218;team&#8216;, dann zeig dem User all die Stats, die f\u00fcr Team-User relevant sind (keine individuellen Riddles); das Gleiche dann mit User<br><br><strong>Beispiel:<\/strong> Alle Stats f\u00fcr einen User in der Statistics Team-\u00dcbersicht<br>&#8211; namespace: team<br>&#8211; from: 2021-01-01<br>&#8211; to: 2021-12-31<br><br>Folgende Kategorien + Stats werden aggregiert:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>public function getCategoriesAndLabels(): array\n    {\n        return &#91;\n            'core_metrics' =&gt; &#91;\n                'view',\n                'start',\n                'finish',\n                'lead',\n                'time',\n            ],\n            'device' =&gt; &#91;\n                'desktop',\n                'mobile',\n                'tablet',\n            ],\n            'social' =&gt; &#91;\n                'fbMessenger',\n                'whatsapp',\n                'facebook',\n                'twitter',\n                'linkedin',\n            ],\n            'form' =&gt; &#91;\n                'skip',\n                'view',\n            ],\n            'region' =&gt; $this-&gt;getAllRegions(),\n        ];\n    }<\/code><\/pre>\n\n\n\n<p>Die dritte Art von Fetch ist &#8222;Overview-Fetch&#8220;. Dieses gliedert den Zeitraum zwischen <strong>from<\/strong> &amp; <strong>to<\/strong> in Tage auf und gibt je ein Stats-Array pro Tag zur\u00fcck. <br>Das ist zum Beispiel sehr hilfreich bei einer Historie oder wenn man die Stats-Werte von jeglichen Entities \u00fcber einen gewissen Zeitraum vergleichen will.<br><br><strong>URL: <\/strong>\/creator\/stats-v2\/overview-fetch\/{namespace}\/{entityId}\/{from}\/{to}<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In diesem Beitrag erkl\u00e4re ich wie unser neuer StatsManager im Hintergrund funktioniert und wie dieser per API angesteuert und benutzt werden kann. Begriffe Zuerst ein&#8230;<\/p>\n<div class=\"more-link-wrapper\"><a class=\"more-link\" href=\"https:\/\/intern.quizu.de\/?p=164\">Weiterlesen<span class=\"screen-reader-text\">Stats Manager + API<\/span><\/a><\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-164","post","type-post","status-publish","format-standard","hentry","category-deployment","entry"],"_links":{"self":[{"href":"https:\/\/intern.quizu.de\/index.php?rest_route=\/wp\/v2\/posts\/164","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/intern.quizu.de\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/intern.quizu.de\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/intern.quizu.de\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/intern.quizu.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=164"}],"version-history":[{"count":7,"href":"https:\/\/intern.quizu.de\/index.php?rest_route=\/wp\/v2\/posts\/164\/revisions"}],"predecessor-version":[{"id":176,"href":"https:\/\/intern.quizu.de\/index.php?rest_route=\/wp\/v2\/posts\/164\/revisions\/176"}],"wp:attachment":[{"href":"https:\/\/intern.quizu.de\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=164"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/intern.quizu.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=164"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/intern.quizu.de\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=164"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}