Users   A
last analyzed

Complexity

Total Complexity 3

Size/Duplication

Total Lines 47
Duplicated Lines 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 25
dl 0
loc 47
rs 10
c 1
b 0
f 0
wmc 3

2 Methods

Rating   Name   Duplication   Size   Complexity  
A me() 0 14 2
A getModelClass() 0 3 1
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Blackmine\Repository\Users;
6
7
use Blackmine\Model\CustomField;
8
use Blackmine\Model\User\Group;
9
use Blackmine\Model\User\Membership;
10
use Blackmine\Model\User\Role;
11
use Blackmine\Model\User\User;
12
use Blackmine\Repository\AbstractRepository;
13
use Blackmine\Repository\RepositoryInterface;
14
use JsonException;
15
use Blackmine\Exception\Api\AbstractApiException;
16
17
/**
18
 * @method User|null  get(mixed $id)
19
 */
20
class Users extends AbstractRepository
21
{
22
    public const API_ROOT = "users";
23
24
    public const USER_RELATION_MEMBERSHIPS = "memberships";
25
    public const USER_RELATION_GROUPS = "groups";
26
    public const USER_RELATION_ROLES = "roles";
27
    public const USER_RELATION_CUSTOM_FIELDS = "custom_fields";
28
29
    public const USER_FILTER_NAME = "name";
30
    public const USER_FILTER_GROUP_ID = "group_id";
31
32
    protected static array $relation_class_map = [
33
        self::USER_RELATION_MEMBERSHIPS => Membership::class,
34
        self::USER_RELATION_GROUPS => Group::class,
35
        self::USER_RELATION_ROLES => Role::class,
36
        self::USER_RELATION_CUSTOM_FIELDS => CustomField::class
37
    ];
38
39
    protected static array $allowed_filters = [
40
        self::USER_FILTER_NAME => RepositoryInterface::SEARCH_PARAM_TYPE_STRING,
41
        self::USER_FILTER_GROUP_ID => RepositoryInterface::SEARCH_PARAM_TYPE_INT
42
    ];
43
44
    public function getModelClass(): string
45
    {
46
        return User::class;
47
    }
48
49
    /**
50
     * @throws JsonException
51
     * @throws AbstractApiException
52
     */
53
    public function me(): ?User
54
    {
55
        $endpoint_url = "my/account." . $this->client->getFormat();
56
        $api_response = $this->client->get($this->constructEndpointUrl($endpoint_url, []));
57
58
        if ($api_response->isSuccess()) {
59
            $model_class = $this->getModelClass();
60
            $model = new $model_class();
61
            $model->fromArray($api_response->getData()[$model->getEntityName()]);
62
63
            return $model;
64
        }
65
66
        throw AbstractApiException::fromApiResponse($api_response);
67
    }
68
}
69