Completed
Pull Request — develop (#586)
by
unknown
62:36
created

AnalyticsManager::parseObjectDates()   B

Complexity

Conditions 5
Paths 2

Size

Total Lines 14
Code Lines 10

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 30

Importance

Changes 1
Bugs 0 Features 0
Metric Value
dl 0
loc 14
ccs 0
cts 14
cp 0
rs 8.8571
c 1
b 0
f 0
cc 5
eloc 10
nc 2
nop 1
crap 30
1
<?php
2
/**
3
 * Database manager and query manager
4
 */
5
6
namespace Graviton\AnalyticsBundle\Manager;
7
8
use Doctrine\ODM\MongoDB\DocumentManager;
9
use Doctrine\ODM\MongoDB\Mapping\Annotations\String;
10
use Graviton\AnalyticsBundle\Model\AnalyticModel;
11
12
/**
13
 * Manager for data layer single responsibility
14
 *
15
 * @author   List of contributors <https://github.com/libgraviton/graviton/graphs/contributors>
16
 * @license  http://opensource.org/licenses/gpl-license.php GNU Public License
17
 * @link     http://swisscom.ch
18
 */
19
class AnalyticsManager
20
{
21
    /** @var DocumentManager */
22
    protected $documentManager;
23
24
    /** @var string */
25
    protected $databaseName;
26
27
    /**
28
     * AnalyticsManager constructor.
29
     * @param DocumentManager $documentManager Db manager and query control
30
     * @param String          $databaseName    Db string name
31
     */
32
    public function __construct(
33
        DocumentManager $documentManager,
34
        $databaseName
35
    ) {
36
        $this->documentManager = $documentManager;
37
        $this->databaseName = $databaseName;
38
    }
39
40
    /**
41
     * Query db based on definition
42
     * Another option is to use: $collection->createAggregationBuilder();
43
     *
44
     * @param AnalyticModel $model Definition
45
     * @return array|object
46
     */
47
    public function getData(AnalyticModel $model)
48
    {
49
        $conn = $this->documentManager->getConnection();
50
        $collection = $conn->selectCollection($this->databaseName, $model->getCollection());
51
52
        // Build aggregation pipeline
53
        $pipeline = $model->getPipeline();
54
55
        $iterator = $collection->aggregate($pipeline);
56
        if ('object' === $model->getType()) {
57
            return $iterator->getSingleResult();
58
        }
59
        return $iterator->toArray();
60
    }
61
}
62