1
0
Fork 0
mirror of synced 2024-10-02 10:16:27 +13:00

review work

This commit is contained in:
Prateek Banga 2023-10-17 22:53:26 +05:30
parent 4ccffb6649
commit ffeb3f8fcf
6 changed files with 146 additions and 125 deletions

View file

@ -1,5 +1,6 @@
<?php
use Appwrite\Event\Delete;
use Appwrite\Event\Messaging;
use Appwrite\Extend\Exception;
use Appwrite\Permission;
@ -582,11 +583,9 @@ App::get('/v1/messaging/providers')
if ($cursor) {
$providerId = $cursor->getValue();
$cursorDocument = Authorization::skip(fn () => $dbForProject->findOne('providers', [
Query::equal('$id', [$providerId]),
]));
$cursorDocument = Authorization::skip(fn () => $dbForProject->getDocument('providers', $providerId));
if ($cursorDocument === false || $cursorDocument->isEmpty()) {
if ($cursorDocument->isEmpty()) {
throw new Exception(Exception::GENERAL_CURSOR_NOT_FOUND, "Provider '{$providerId}' for the 'cursor' value not found.");
}
@ -1242,8 +1241,8 @@ App::post('/v1/messaging/topics')
}
$response
->setStatusCode(Response::STATUS_CODE_CREATED)
->dynamic($topic, Response::MODEL_TOPIC);
->setStatusCode(Response::STATUS_CODE_CREATED)
->dynamic($topic, Response::MODEL_TOPIC);
});
App::get('/v1/messaging/topics')
@ -1269,12 +1268,9 @@ App::get('/v1/messaging/topics')
if ($cursor) {
$topicId = $cursor->getValue();
$cursorDocument = Authorization::skip(fn () => $dbForProject->find('topics', [
Query::equal('$id', [$topicId]),
Query::limit(1),
]));
$cursorDocument = Authorization::skip(fn () => $dbForProject->getDocument('topics', $topicId));
if (empty($cursorDocument) || $cursorDocument[0]->isEmpty()) {
if ($cursorDocument->isEmpty()) {
throw new Exception(Exception::GENERAL_CURSOR_NOT_FOUND, "Topic '{$topicId}' for the 'cursor' value not found.");
}
@ -1330,7 +1326,7 @@ App::patch('/v1/messaging/topics/:topicId')
->label('sdk.response.model', Response::MODEL_TOPIC)
->param('topicId', '', new UID(), 'Topic ID.')
->param('name', '', new Text(128), 'Topic Name.', true)
->param('description', null, new Text(2048), 'Topic Description.', true)
->param('description', '', new Text(2048), 'Topic Description.', true)
->inject('dbForProject')
->inject('response')
->action(function (string $topicId, string $name, string $description, Database $dbForProject, Response $response) {
@ -1340,11 +1336,11 @@ App::patch('/v1/messaging/topics/:topicId')
throw new Exception(Exception::TOPIC_NOT_FOUND);
}
if ($name) {
if (!empty($name)) {
$topic->setAttribute('name', $name);
}
if ($description) {
if (!empty($description)) {
$topic->setAttribute('description', $description);
}
@ -1369,15 +1365,20 @@ App::delete('/v1/messaging/topics/:topicId')
->label('sdk.response.model', Response::MODEL_NONE)
->param('topicId', '', new UID(), 'Topic ID.')
->inject('dbForProject')
->inject('deletes')
->inject('response')
->action(function (string $topicId, Database $dbForProject, Response $response) {
->action(function (string $topicId, Database $dbForProject, Delete $deletes, Response $response) {
$topic = $dbForProject->getDocument('topics', $topicId);
if ($topic->isEmpty()) {
throw new Exception(Exception::TOPIC_NOT_FOUND);
}
$topic = $dbForProject->deleteDocument('topics', $topicId);
$dbForProject->deleteDocument('topics', $topicId);
$deletes
->setType(DELETE_TYPE_SUBSCRIBERS)
->setDocument($topic);
$response
->setStatusCode(Response::STATUS_CODE_NOCONTENT)
@ -1437,8 +1438,8 @@ App::post('/v1/messaging/topics/:topicId/subscribers')
}
$response
->setStatusCode(Response::STATUS_CODE_CREATED)
->dynamic($subscriber, Response::MODEL_SUBSCRIBER);
->setStatusCode(Response::STATUS_CODE_CREATED)
->dynamic($subscriber, Response::MODEL_SUBSCRIBER);
});
App::get('/v1/messaging/topics/:topicId/subscribers')
@ -1563,7 +1564,7 @@ App::post('/v1/messaging/messages/email')
->param('content', '', new Text(64230), 'Email Content.')
->param('status', 'processing', new WhiteList(['draft', 'processing']), 'Message Status.', true)
->param('html', false, new Boolean(), 'Is content of type HTML', true)
->param('deliveryTime', null, new DatetimeValidator(), 'Delivery time for message.', true)
->param('deliveryTime', null, new DatetimeValidator(false), 'Delivery time for message.', true)
->inject('dbForProject')
->inject('project')
->inject('messaging')
@ -1634,11 +1635,9 @@ App::get('/v1/messaging/messages')
if ($cursor) {
$messageId = $cursor->getValue();
$cursorDocument = Authorization::skip(fn () => $dbForProject->findOne('messages', [
Query::equal('$id', [$messageId]),
]));
$cursorDocument = Authorization::skip(fn () => $dbForProject->getDocument('messages', $messageId));
if ($cursorDocument === false || $cursorDocument->isEmpty()) {
if ($cursorDocument->isEmpty()) {
throw new Exception(Exception::GENERAL_CURSOR_NOT_FOUND, "Message '{$messageId}' for the 'cursor' value not found.");
}

View file

@ -169,6 +169,7 @@ const DELETE_TYPE_SESSIONS = 'sessions';
const DELETE_TYPE_CACHE_BY_TIMESTAMP = 'cacheByTimeStamp';
const DELETE_TYPE_CACHE_BY_RESOURCE = 'cacheByResource';
const DELETE_TYPE_SCHEDULES = 'schedules';
const DELETE_TYPE_SUBSCRIBERS = 'subscribers';
// Compression type
const COMPRESSION_TYPE_NONE = 'none';
const COMPRESSION_TYPE_GZIP = 'gzip';

View file

@ -127,6 +127,10 @@ class DeletesV1 extends Worker
case DELETE_TYPE_SCHEDULES:
$this->deleteSchedules($this->args['datetime']);
break;
case DELETE_TYPE_SUBSCRIBERS:
$topic = new Document($this->args['document'] ?? []);
$this->deleteSubscribers($project, $topic);
break;
default:
Console::error('No delete operation for type: ' . $type);
break;
@ -170,6 +174,24 @@ class DeletesV1 extends Worker
);
}
/**
* @param Document $project
* @param Document $topic
* @throws Exception
*/
protected function deleteSubscribers(Document $project, Document $topic)
{
if ($topic->isEmpty()) {
Console::error('Failed to delete subscribers. Topic not found');
return;
}
$dbForProject = $this->getProjectDB($project);
$this->deleteByGroup('subscribers', [
Query::equal('topicInternalId', [$topic->getInternalId()])
], $dbForProject);
}
/**
* @param Document $project
* @param string $resource

View file

@ -11,7 +11,8 @@ class Messages extends Base
'deliveredTo',
'deliveryErrors',
'status',
'description'
'description',
'data'
];
/**

View file

@ -10,8 +10,6 @@ class Providers extends Base
'type',
'default',
'enabled',
'credentials',
'options'
];
/**

View file

@ -270,8 +270,8 @@ class MessagingTest extends Scope
];
$query = $this->getQuery(self::$CREATE_SENDGRID_PROVIDER);
$graphQLPayload = [
'query' => $query,
'variables' => $providerParam['sendgrid'],
'query' => $query,
'variables' => $providerParam['sendgrid'],
];
$response = $this->client->call(Client::METHOD_POST, '/graphql', \array_merge([
'content-type' => 'application/json',
@ -283,13 +283,13 @@ class MessagingTest extends Scope
$query = $this->getQuery(self::$CREATE_TOPIC);
$graphQLPayload = [
'query' => $query,
'variables' => [
'providerId' => $providerId,
'topicId' => ID::unique(),
'name' => 'topic1',
'description' => 'Active users',
],
'query' => $query,
'variables' => [
'providerId' => $providerId,
'topicId' => ID::unique(),
'name' => 'topic1',
'description' => 'Active users',
],
];
$response = $this->client->call(Client::METHOD_POST, '/graphql', \array_merge([
'content-type' => 'application/json',
@ -312,12 +312,12 @@ class MessagingTest extends Scope
$topicId = $topic['_id'];
$query = $this->getQuery(self::$UPDATE_TOPIC);
$graphQLPayload = [
'query' => $query,
'variables' => [
'topicId' => $topicId,
'name' => 'topic2',
'description' => 'Inactive users',
],
'query' => $query,
'variables' => [
'topicId' => $topicId,
'name' => 'topic2',
'description' => 'Inactive users',
],
];
$response = $this->client->call(Client::METHOD_POST, '/graphql', \array_merge([
'content-type' => 'application/json',
@ -339,7 +339,7 @@ class MessagingTest extends Scope
{
$query = $this->getQuery(self::$LIST_TOPICS);
$graphQLPayload = [
'query' => $query,
'query' => $query,
];
$response = $this->client->call(Client::METHOD_POST, '/graphql', \array_merge([
'content-type' => 'application/json',
@ -358,10 +358,10 @@ class MessagingTest extends Scope
{
$query = $this->getQuery(self::$GET_TOPIC);
$graphQLPayload = [
'query' => $query,
'variables' => [
'topicId' => $topicId,
],
'query' => $query,
'variables' => [
'topicId' => $topicId,
],
];
$response = $this->client->call(Client::METHOD_POST, '/graphql', \array_merge([
'content-type' => 'application/json',
@ -385,13 +385,13 @@ class MessagingTest extends Scope
$query = $this->getQuery(self::$CREATE_USER_TARGET);
$graphQLPayload = [
'query' => $query,
'variables' => [
'targetId' => ID::unique(),
'userId' => $userId,
'providerId' => $topic['providerId'],
'identifier' => 'token',
],
'query' => $query,
'variables' => [
'targetId' => ID::unique(),
'userId' => $userId,
'providerId' => $topic['providerId'],
'identifier' => 'token',
],
];
$response = $this->client->call(Client::METHOD_POST, '/graphql', \array_merge([
'content-type' => 'application/json',
@ -407,12 +407,12 @@ class MessagingTest extends Scope
$query = $this->getQuery(self::$CREATE_SUBSCRIBER);
$graphQLPayload = [
'query' => $query,
'variables' => [
'subscriberId' => ID::unique(),
'topicId' => $topicId,
'targetId' => $targetId,
],
'query' => $query,
'variables' => [
'subscriberId' => ID::unique(),
'topicId' => $topicId,
'targetId' => $targetId,
],
];
$response = $this->client->call(Client::METHOD_POST, '/graphql', \array_merge([
'content-type' => 'application/json',
@ -431,10 +431,10 @@ class MessagingTest extends Scope
{
$query = $this->getQuery(self::$LIST_SUBSCRIBERS);
$graphQLPayload = [
'query' => $query,
'variables' => [
'topicId' => $topicId,
],
'query' => $query,
'variables' => [
'topicId' => $topicId,
],
];
$response = $this->client->call(Client::METHOD_POST, '/graphql', \array_merge([
'content-type' => 'application/json',
@ -456,11 +456,11 @@ class MessagingTest extends Scope
$query = $this->getQuery(self::$GET_SUBSCRIBER);
$graphQLPayload = [
'query' => $query,
'variables' => [
'topicId' => $topicId,
'subscriberId' => $subscriberId,
],
'query' => $query,
'variables' => [
'topicId' => $topicId,
'subscriberId' => $subscriberId,
],
];
$response = $this->client->call(Client::METHOD_POST, '/graphql', \array_merge([
@ -483,11 +483,11 @@ class MessagingTest extends Scope
$query = $this->getQuery(self::$DELETE_SUBSCRIBER);
$graphQLPayload = [
'query' => $query,
'variables' => [
'topicId' => $topicId,
'subscriberId' => $subscriberId,
],
'query' => $query,
'variables' => [
'topicId' => $topicId,
'subscriberId' => $subscriberId,
],
];
$response = $this->client->call(Client::METHOD_POST, '/graphql', \array_merge([
@ -504,10 +504,10 @@ class MessagingTest extends Scope
{
$query = $this->getQuery(self::$DELETE_TOPIC);
$graphQLPayload = [
'query' => $query,
'variables' => [
'topicId' => $topicId,
],
'query' => $query,
'variables' => [
'topicId' => $topicId,
],
];
$response = $this->client->call(Client::METHOD_POST, '/graphql', \array_merge([
'content-type' => 'application/json',
@ -531,15 +531,15 @@ class MessagingTest extends Scope
$query = $this->getQuery(self::$CREATE_MAILGUN_PROVIDER);
$graphQLPayload = [
'query' => $query,
'variables' => [
'providerId' => ID::unique(),
'name' => 'Mailgun1',
'apiKey' => $apiKey,
'domain' => $domain,
'from' => $from,
'isEuRegion' => $isEuRegion,
],
'query' => $query,
'variables' => [
'providerId' => ID::unique(),
'name' => 'Mailgun1',
'apiKey' => $apiKey,
'domain' => $domain,
'from' => $from,
'isEuRegion' => $isEuRegion,
],
];
$provider = $this->client->call(Client::METHOD_POST, '/graphql', \array_merge([
'content-type' => 'application/json',
@ -553,13 +553,13 @@ class MessagingTest extends Scope
$query = $this->getQuery(self::$CREATE_TOPIC);
$graphQLPayload = [
'query' => $query,
'variables' => [
'providerId' => $providerId,
'topicId' => ID::unique(),
'name' => 'topic1',
'description' => 'Active users',
],
'query' => $query,
'variables' => [
'providerId' => $providerId,
'topicId' => ID::unique(),
'name' => 'topic1',
'description' => 'Active users',
],
];
$topic = $this->client->call(Client::METHOD_POST, '/graphql', \array_merge([
'content-type' => 'application/json',
@ -571,13 +571,13 @@ class MessagingTest extends Scope
$query = $this->getQuery(self::$CREATE_USER);
$graphQLPayload = [
'query' => $query,
'variables' => [
'userId' => ID::custom('test-user'),
'email' => $to,
'password' => 'password',
'name' => 'Messaging User',
]
'query' => $query,
'variables' => [
'userId' => ID::custom('test-user'),
'email' => $to,
'password' => 'password',
'name' => 'Messaging User',
]
];
$user = $this->client->call(Client::METHOD_POST, '/graphql', \array_merge([
'content-type' => 'application/json',
@ -589,13 +589,13 @@ class MessagingTest extends Scope
$query = $this->getQuery(self::$CREATE_USER_TARGET);
$graphQLPayload = [
'query' => $query,
'variables' => [
'targetId' => ID::unique(),
'userId' => $user['body']['data']['usersCreate']['_id'],
'providerId' => $providerId,
'identifier' => $to,
],
'query' => $query,
'variables' => [
'targetId' => ID::unique(),
'userId' => $user['body']['data']['usersCreate']['_id'],
'providerId' => $providerId,
'identifier' => $to,
],
];
$target = $this->client->call(Client::METHOD_POST, '/graphql', \array_merge([
'content-type' => 'application/json',
@ -607,12 +607,12 @@ class MessagingTest extends Scope
$query = $this->getQuery(self::$CREATE_SUBSCRIBER);
$graphQLPayload = [
'query' => $query,
'variables' => [
'subscriberId' => ID::unique(),
'topicId' => $topic['body']['data']['messagingCreateTopic']['_id'],
'targetId' => $target['body']['data']['usersCreateTarget']['_id'],
],
'query' => $query,
'variables' => [
'subscriberId' => ID::unique(),
'topicId' => $topic['body']['data']['messagingCreateTopic']['_id'],
'targetId' => $target['body']['data']['usersCreateTarget']['_id'],
],
];
$subscriber = $this->client->call(Client::METHOD_POST, '/graphql', \array_merge([
'content-type' => 'application/json',
@ -623,14 +623,14 @@ class MessagingTest extends Scope
$query = $this->getQuery(self::$CREATE_EMAIL);
$graphQLPayload = [
'query' => $query,
'variables' => [
'messageId' => ID::unique(),
'providerId' => $providerId,
'to' => [$topic['body']['data']['messagingCreateTopic']['_id']],
'subject' => 'Khali beats Undertaker',
'content' => 'https://www.youtube.com/watch?v=dQw4w9WgXcQ',
],
'query' => $query,
'variables' => [
'messageId' => ID::unique(),
'providerId' => $providerId,
'to' => [$topic['body']['data']['messagingCreateTopic']['_id']],
'subject' => 'Khali beats Undertaker',
'content' => 'https://www.youtube.com/watch?v=dQw4w9WgXcQ',
],
];
$email = $this->client->call(Client::METHOD_POST, '/graphql', \array_merge([
'content-type' => 'application/json',
@ -644,10 +644,10 @@ class MessagingTest extends Scope
$query = $this->getQuery(self::$GET_MESSAGE);
$graphQLPayload = [
'query' => $query,
'variables' => [
'messageId' => $email['body']['data']['messagingCreateEmail']['_id'],
],
'query' => $query,
'variables' => [
'messageId' => $email['body']['data']['messagingCreateEmail']['_id'],
],
];
$message = $this->client->call(Client::METHOD_POST, '/graphql', \array_merge([
'content-type' => 'application/json',