Completed
Push — master ( 1cd5c1...a859d8 )
by vistart
12:32
created

BaseMongoMessageQuery::initiators()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 8
Code Lines 5

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 5
CRAP Score 2

Importance

Changes 0
Metric Value
dl 0
loc 8
ccs 5
cts 5
cp 1
rs 9.4285
c 0
b 0
f 0
cc 2
eloc 5
nc 2
nop 1
crap 2
1
<?php
2
3
/**
4
 *   _   __ __ _____ _____ ___  ____  _____
5
 *  | | / // // ___//_  _//   ||  __||_   _|
6
 *  | |/ // /(__  )  / / / /| || |     | |
7
 *  |___//_//____/  /_/ /_/ |_||_|     |_|
8
 * @link https://vistart.me/
9
 * @copyright Copyright (c) 2016 - 2017 vistart
10
 * @license https://vistart.me/license/
11
 */
12
13
namespace rhosocial\base\models\queries;
14
15
use rhosocial\base\models\models\BaseMongoEntityModel;
16
use rhosocial\base\models\traits\MessageQueryTrait;
17
18
/**
19
 * @version 1.0
20
 * @author vistart <[email protected]>
21
 */
22
class BaseMongoMessageQuery extends BaseMongoBlameableQuery
23
{
24
    use MessageQueryTrait;
25
26
    /**
27
     * Get the opposite relation.
28
     * @param BaseUserModel|string $user initiator
29
     * @param BaseUserModel|string $other recipient.
30
     * @param Connection $database
31
     * @return mixed It's type depends on {$model->class}.
32
     */
33 1
    public function opposite($user, $other, $database = null)
34
    {
35 1
        $model = $this->noInitModel;
36 1
        return $this->andWhere(
37 1
            [$model->createdByAttribute => BaseMongoEntityModel::compositeGUIDs($other),
38 1
        $model->otherGuidAttribute => BaseMongoEntityModel::compositeGUIDs($user)])->orderByCreatedAt(SORT_DESC)
39 1
                ->one($database);
40
    }
41
42
    /**
43
     * Get all the opposites.
44
     * @param string $user initator.
45
     * @param array $others all recipients.
46
     * @param Connection $database
47
     * @return array instances.
48
     */
49 1
    public function opposites($user, $others = [], $database = null)
50
    {
51 1
        $model = $this->noInitModel;
52 1
        $query = $this->andWhere([$model->otherGuidAttribute => BaseMongoEntityModel::compositeGUIDs($user)]);
53
        /* @var $query static */
54 1
        if (!empty($others)) {
55 1
            $query = $query->andWhere([$model->createdByAttribute => BaseMongoEntityModel::compositeGUIDs($others)]);
56
        }
57 1
        return $query->all($database);
58
    }
59
60
    /**
61
     * Specify initiators.
62
     * @param string|array $users the guid of initiator if string, or guid array
63
     * of initiators if array.
64
     * @return static $this
65
     */
66 1
    public function initiators($users = [])
67
    {
68 1
        if (empty($users)) {
69 1
            return $this;
70
        }
71 1
        $model = $this->noInitModel;
72 1
        return $this->andWhere([$model->createdByAttribute => BaseMongoEntityModel::compositeGUIDs($users)]);
73
    }
74
75
    /**
76
     * Specify recipients.
77
     * @param string|array $users the guid of recipient if string, or guid array
78
     * of recipients if array.
79
     * @return static $this
80
     */
81 3
    public function recipients($users = [])
82
    {
83 3
        if (empty($users)) {
84 1
            return $this;
85
        }
86 3
        $model = $this->noInitModel;
87 3
        return $this->andWhere([$model->otherGuidAttribute => BaseMongoEntityModel::compositeGUIDs($users)]);
88
    }
89
}