adds target object in subscriber model

This commit is contained in:
prateek banga
2023-11-23 14:35:16 +05:30
parent d9826cdce8
commit 858175fe00
4 changed files with 30 additions and 70 deletions
-36
View File
@@ -1722,28 +1722,6 @@ $commonCollections = [
'$id' => ID::custom('subscribers'),
'name' => 'Subscribers',
'attributes' => [
[
'$id' => ID::custom('userId'),
'type' => Database::VAR_STRING,
'format' => '',
'size' => Database::LENGTH_KEY,
'signed' => true,
'required' => true,
'default' => null,
'array' => false,
'filters' => [],
],
[
'$id' => ID::custom('userInternalId'),
'type' => Database::VAR_STRING,
'format' => '',
'size' => Database::LENGTH_KEY,
'signed' => true,
'required' => true,
'default' => null,
'array' => false,
'filters' => [],
],
[
'$id' => ID::custom('targetId'),
'type' => Database::VAR_STRING,
@@ -1790,20 +1768,6 @@ $commonCollections = [
],
],
'indexes' => [
[
'$id' => ID::custom('_key_userId'),
'type' => Database::INDEX_KEY,
'attributes' => ['userId'],
'lengths' => [],
'orders' => [],
],
[
'$id' => ID::custom('_key_userInternalId'),
'type' => Database::INDEX_KEY,
'attributes' => ['userInternalId'],
'lengths' => [],
'orders' => [],
],
[
'$id' => ID::custom('_key_targetId'),
'type' => Database::INDEX_KEY,
+8 -10
View File
@@ -1946,10 +1946,8 @@ App::post('/v1/messaging/topics/:topicId/subscribers')
'$id' => $subscriberId,
'$permissions' => [
Permission::read(Role::user($user->getId())),
Permission::delete(Role::user($target->getAttribute('userId'))),
Permission::delete(Role::user($user->getId())),
],
'userId' => $user->getId(),
'userInternalId' => $user->getInternalId(),
'topicId' => $topicId,
'topicInternalId' => $topic->getInternalId(),
'targetId' => $targetId,
@@ -1967,7 +1965,9 @@ App::post('/v1/messaging/topics/:topicId/subscribers')
->setParam('topicId', $topic->getId())
->setParam('subscriberId', $subscriber->getId());
$subscriber->setAttribute('userName', $user->getAttribute('name'));
$subscriber
->setAttribute('target', $target)
->setAttribute('userName', $user->getAttribute('name'));
$response
->setStatusCode(Response::STATUS_CODE_CREATED)
@@ -2019,12 +2019,11 @@ App::get('/v1/messaging/topics/:topicId/subscribers')
$subscribers = batch(\array_map(function (Document $subscriber) use ($dbForProject) {
return function () use ($subscriber, $dbForProject) {
$user = Authorization::skip(fn () => $dbForProject->getDocument('users', $subscriber->getAttribute('userId')));
$target = Authorization::skip(fn () => $dbForProject->getDocument('targets', $subscriber->getAttribute('targetId')));
$user = Authorization::skip(fn () => $dbForProject->getDocument('users', $target->getAttribute('userId')));
return $subscriber
->setAttribute('identifier', $target->getAttribute('identifier'))
->setAttribute('providerType', $target->getAttribute('providerType'))
->setAttribute('target', $target)
->setAttribute('userName', $user->getAttribute('name'));
};
}, $subscribers));
@@ -2148,12 +2147,11 @@ App::get('/v1/messaging/topics/:topicId/subscribers/:subscriberId')
throw new Exception(Exception::SUBSCRIBER_NOT_FOUND);
}
$user = Authorization::skip(fn () => $dbForProject->getDocument('users', $subscriber->getAttribute('userId')));
$target = Authorization::skip(fn () => $dbForProject->getDocument('targets', $subscriber->getAttribute('targetId')));
$user = Authorization::skip(fn () => $dbForProject->getDocument('users', $target->getAttribute('userId')));
$subscriber
->setAttribute('identifier', $target->getAttribute('identifier'))
->setAttribute('providerType', $target->getAttribute('providerType'))
->setAttribute('target', $target)
->setAttribute('userName', $user->getAttribute('name'));
$response
@@ -34,23 +34,20 @@ class Subscriber extends Model
'default' => '',
'example' => '259125845563242502',
])
->addRule('providerType', [
'type' => self::TYPE_STRING,
'description' => 'Target\'s provider type.',
'default' => '',
'example' => 'email',
])
->addRule('identifier', [
'type' => self::TYPE_STRING,
'description' => 'Target identifier.',
'default' => '',
'example' => 'random-email@mail.org',
])
->addRule('userId', [
'type' => self::TYPE_STRING,
'description' => 'User ID.',
'default' => '',
'example' => '5e5ea5c16897e',
->addRule('target', [
'type' => Response::MODEL_TARGET,
'description' => 'Target.',
'default' => [],
'example' => [
'$id' => '259125845563242502',
'$createdAt' => self::TYPE_DATETIME_EXAMPLE,
'$updatedAt' => self::TYPE_DATETIME_EXAMPLE,
'providerType' => 'email',
'providerId' => '259125845563242502',
'name' => 'ageon-app-email',
'identifier' => 'random-mail@email.org',
'userId' => '5e5ea5c16897e',
],
])
->addRule('userName', [
'type' => self::TYPE_STRING,
@@ -333,7 +333,8 @@ trait MessagingBase
]);
$this->assertEquals(201, $response['headers']['status-code']);
$this->assertEquals($target['body']['userId'], $response['body']['userId']);
$this->assertEquals($target['body']['userId'], $response['body']['target']['userId']);
$this->assertEquals($target['body']['providerType'], $response['body']['target']['providerType']);
$topic = $this->client->call(Client::METHOD_GET, '/messaging/topics/' . $topic['$id'], [
'content-type' => 'application/json',
@@ -370,9 +371,9 @@ trait MessagingBase
$this->assertEquals(200, $response['headers']['status-code']);
$this->assertEquals($data['topicId'], $response['body']['topicId']);
$this->assertEquals($data['targetId'], $response['body']['targetId']);
$this->assertEquals($data['userId'], $response['body']['userId']);
$this->assertEquals($data['providerType'], $response['body']['providerType']);
$this->assertEquals($data['identifier'], $response['body']['identifier']);
$this->assertEquals($data['userId'], $response['body']['target']['userId']);
$this->assertEquals($data['providerType'], $response['body']['target']['providerType']);
$this->assertEquals($data['identifier'], $response['body']['target']['identifier']);
}
/**
@@ -388,9 +389,9 @@ trait MessagingBase
$this->assertEquals(200, $response['headers']['status-code']);
$this->assertEquals(1, $response['body']['total']);
$this->assertEquals($data['userId'], $response['body']['subscribers'][0]['userId']);
$this->assertEquals($data['providerType'], $response['body']['subscribers'][0]['providerType']);
$this->assertEquals($data['identifier'], $response['body']['subscribers'][0]['identifier']);
$this->assertEquals($data['userId'], $response['body']['subscribers'][0]['target']['userId']);
$this->assertEquals($data['providerType'], $response['body']['subscribers'][0]['target']['providerType']);
$this->assertEquals($data['identifier'], $response['body']['subscribers'][0]['target']['identifier']);
$this->assertEquals(\count($response['body']['subscribers']), $response['body']['total']);
return $data;