1
0
Fork 0
mirror of synced 2024-06-27 02:31:04 +12:00

updated test cases for msg91 provider, moves worker to use provider from settings

This commit is contained in:
Prateek Banga 2023-09-27 18:58:00 +05:30
parent a0858ccc4e
commit 234f7f003b
12 changed files with 67 additions and 53 deletions

7
.env
View file

@ -100,4 +100,9 @@ _APP_ASSISTANT_OPENAI_API_KEY=
_APP_MESSAGE_SMS_PROVIDER_MSG91_SENDER_ID= _APP_MESSAGE_SMS_PROVIDER_MSG91_SENDER_ID=
_APP_MESSAGE_SMS_PROVIDER_MSG91_AUTH_KEY= _APP_MESSAGE_SMS_PROVIDER_MSG91_AUTH_KEY=
_APP_MESSAGE_SMS_PROVIDER_MSG91_FROM= _APP_MESSAGE_SMS_PROVIDER_MSG91_FROM=
_APP_MESSAGE_SMS_PROVIDER_MSG91_TO= _APP_MESSAGE_SMS_PROVIDER_MSG91_TO=
_APP_MESSAGE_SMS_PROVIDER_MAILGUN_API_KEY=
_APP_MESSAGE_SMS_PROVIDER_MAILGUN_DOMAIN=
_APP_MESSAGE_SMS_PROVIDER_MAILGUN_FROM=
_APP_MESSAGE_SMS_PROVIDER_MAILGUN_RECEIVER_EMAIL=
_APP_MESSAGE_SMS_PROVIDER_MAILGUN_IS_EU_REGION=

View file

@ -1456,7 +1456,7 @@ $commonCollections = [
'size' => 16384, 'size' => 16384,
'signed' => true, 'signed' => true,
'required' => false, 'required' => false,
'default' => null, 'default' => [],
'array' => false, 'array' => false,
'filters' => ['json'], 'filters' => ['json'],
], ],

View file

@ -1343,14 +1343,13 @@ App::post('/v1/account/sessions/phone')
'to' => [$target->getId()], 'to' => [$target->getId()],
'data' => [ 'data' => [
'content' => $message, 'content' => $message,
'from' => $from,
], ],
'providerId' => $provider->getId(), 'providerId' => $provider->getId(),
'providerInternalId' => $provider->getInternalId(), 'providerInternalId' => $provider->getInternalId(),
])); ]));
$messaging $messaging
->setMessage($messageDoc) ->setMessageId($messageDoc->getId())
->setProject($project) ->setProject($project)
->trigger(); ->trigger();
@ -2973,14 +2972,13 @@ App::post('/v1/account/verification/phone')
'to' => [$target->getId()], 'to' => [$target->getId()],
'data' => [ 'data' => [
'content' => $message, 'content' => $message,
'from' => $from,
], ],
'providerId' => $provider->getId(), 'providerId' => $provider->getId(),
'providerInternalId' => $provider->getInternalId(), 'providerInternalId' => $provider->getInternalId(),
])); ]));
$messaging $messaging
->setMessage($messageDoc) ->setMessageId($messageDoc->getId())
->setProject($project) ->setProject($project)
->trigger(); ->trigger();

View file

@ -262,6 +262,7 @@ App::post('/v1/messaging/providers/sendgrid')
'type' => 'email', 'type' => 'email',
'default' => $default, 'default' => $default,
'enabled' => $enabled, 'enabled' => $enabled,
'options' => [],
'search' => $providerId . ' ' . $name . ' ' . 'sendgrid' . ' ' . 'email', 'search' => $providerId . ' ' . $name . ' ' . 'sendgrid' . ' ' . 'email',
'credentials' => [ 'credentials' => [
'apiKey' => $apiKey, 'apiKey' => $apiKey,
@ -361,11 +362,12 @@ App::post('/v1/messaging/providers/msg91')
->param('name', '', new Text(128), 'Provider name.') ->param('name', '', new Text(128), 'Provider name.')
->param('default', false, new Boolean(), 'Set as default provider.', true) ->param('default', false, new Boolean(), 'Set as default provider.', true)
->param('enabled', true, new Boolean(), 'Set as enabled.', true) ->param('enabled', true, new Boolean(), 'Set as enabled.', true)
->param('from', '', new Text(256), 'Sender Number.')
->param('senderId', '', new Text(0), 'Msg91 Sender ID.') ->param('senderId', '', new Text(0), 'Msg91 Sender ID.')
->param('authKey', '', new Text(0), 'Msg91 Auth Key.') ->param('authKey', '', new Text(0), 'Msg91 Auth Key.')
->inject('dbForProject') ->inject('dbForProject')
->inject('response') ->inject('response')
->action(function (string $providerId, string $name, bool $default, bool $enabled, string $senderId, string $authKey, Database $dbForProject, Response $response) { ->action(function (string $providerId, string $name, bool $default, bool $enabled, string $from, string $senderId, string $authKey, Database $dbForProject, Response $response) {
$providerId = $providerId == 'unique()' ? ID::unique() : $providerId; $providerId = $providerId == 'unique()' ? ID::unique() : $providerId;
$provider = new Document([ $provider = new Document([
'$id' => $providerId, '$id' => $providerId,
@ -379,6 +381,9 @@ App::post('/v1/messaging/providers/msg91')
'senderId' => $senderId, 'senderId' => $senderId,
'authKey' => $authKey, 'authKey' => $authKey,
], ],
'options' => [
'from' => $from,
]
]); ]);
// Check if a default provider exists, if not, set this one as default // Check if a default provider exists, if not, set this one as default
@ -1243,15 +1248,14 @@ App::post('/v1/messaging/messages/email')
->param('providerId', '', new Text(128), 'Email Provider ID.') ->param('providerId', '', new Text(128), 'Email Provider ID.')
->param('to', [], new ArrayList(new Text(65535)), 'List of Topic IDs or List of User IDs or List of Target IDs.') ->param('to', [], new ArrayList(new Text(65535)), 'List of Topic IDs or List of User IDs or List of Target IDs.')
->param('subject', '', new Text(128), 'Email Subject.') ->param('subject', '', new Text(128), 'Email Subject.')
->param('description', '', new Text(256), 'Description for Message.') ->param('description', '', new Text(256), 'Description for Message.', true)
->param('content', '', new Text(65407), 'Email Content.') ->param('content', '', new Text(65407), 'Email Content.')
->param('from', '', new Text(128), 'Email from.', true)
->param('html', false, new Boolean(false), 'Is content of type HTML', true) ->param('html', false, new Boolean(false), 'Is content of type HTML', true)
->inject('dbForProject') ->inject('dbForProject')
->inject('project') ->inject('project')
->inject('messaging') ->inject('messaging')
->inject('response') ->inject('response')
->action(function (string $messageId, string $providerId, array $to, string $subject, string $description, string $content, string $from, string $html, Database $dbForProject, Document $project, Messaging $messaging, Response $response) { ->action(function (string $messageId, string $providerId, array $to, string $subject, string $description, string $content, string $html, Database $dbForProject, Document $project, Messaging $messaging, Response $response) {
$messageId = $messageId == 'unique()' ? ID::unique() : $messageId; $messageId = $messageId == 'unique()' ? ID::unique() : $messageId;
$provider = $dbForProject->getDocument('providers', $providerId); $provider = $dbForProject->getDocument('providers', $providerId);
@ -1268,16 +1272,15 @@ App::post('/v1/messaging/messages/email')
'data' => [ 'data' => [
'subject' => $subject, 'subject' => $subject,
'content' => $content, 'content' => $content,
'from' => $from,
'html' => $html, 'html' => $html,
'description' => $description, 'description' => $description,
], ],
'status' => 'processing', 'status' => 'processing',
'search' => $subject . ' ' . $from, 'search' => $messageId . ' ' . $description . ' ' . $subject,
])); ]));
$messaging $messaging
->setMessage($message) ->setMessageId($message->getId())
->setProject($project) ->setProject($project)
->trigger(); ->trigger();

View file

@ -666,7 +666,6 @@ App::post('/v1/teams/:teamId/memberships')
'to' => [$target->getId()], 'to' => [$target->getId()],
'data' => [ 'data' => [
'content' => $message, 'content' => $message,
'from' => $from,
], ],
'providerId' => $provider->getId(), 'providerId' => $provider->getId(),
'providerInternalId' => $provider->getInternalId(), 'providerInternalId' => $provider->getInternalId(),
@ -674,7 +673,7 @@ App::post('/v1/teams/:teamId/memberships')
])); ]));
$messaging $messaging
->setMessage($messageDoc) ->setMessageId($messageDoc->getId())
->setProject($project) ->setProject($project)
->trigger(); ->trigger();
} }

View file

@ -91,7 +91,7 @@ class MessagingV1 extends Worker
$project = new Document($this->args['project']); $project = new Document($this->args['project']);
$this->dbForProject = $this->getProjectDB($project); $this->dbForProject = $this->getProjectDB($project);
$messageRecord = new Document($this->args['message']); $messageRecord = $this->dbForProject->getDocument('messages', $this->args['messageId']);
$providerId = $messageRecord->getAttribute('providerId'); $providerId = $messageRecord->getAttribute('providerId');
$providerRecord = $this->dbForProject->getDocument('providers', $providerId); $providerRecord = $this->dbForProject->getDocument('providers', $providerId);
@ -135,15 +135,14 @@ class MessagingV1 extends Worker
$maxBatchSize = $provider->getMaxMessagesPerRequest(); $maxBatchSize = $provider->getMaxMessagesPerRequest();
$batches = \array_chunk($identifiers, $maxBatchSize); $batches = \array_chunk($identifiers, $maxBatchSize);
$message = $messageRecord->getArrayCopy();
$deliveredTo = 0; $deliveredTo = 0;
foreach ($batches as $batch) { foreach ($batches as $batch) {
$message['to'] = $batch; $messageRecord->setAttribute('to', $batch);
$message = match ($providerRecord->getAttribute('type')) { $message = match ($providerRecord->getAttribute('type')) {
'sms' => $this->buildSMSMessage($message), 'sms' => $this->buildSMSMessage($messageRecord, $providerRecord),
'push' => $this->buildPushMessage($message), 'push' => $this->buildPushMessage($messageRecord),
'email' => $this->buildEmailMessage($message), 'email' => $this->buildEmailMessage($messageRecord, $providerRecord),
default => null default => null
}; };
try { try {
@ -163,7 +162,7 @@ class MessagingV1 extends Worker
} else { } else {
$messageRecord->setAttribute('status', 'sent'); $messageRecord->setAttribute('status', 'sent');
} }
$messageRecord->setAttribute('to', $recipientsId);
$messageRecord->setAttribute('deliveredTo', $deliveredTo); $messageRecord->setAttribute('deliveredTo', $deliveredTo);
$messageRecord->setAttribute('deliveryTime', DateTime::now()); $messageRecord->setAttribute('deliveryTime', DateTime::now());
@ -174,37 +173,37 @@ class MessagingV1 extends Worker
{ {
} }
private function buildEmailMessage($data): Email private function buildEmailMessage($message, $provider): Email
{ {
$from = $data['data']['from']; $from = $provider['options']['from'];
$to = $data['to']; $to = $message['to'];
$subject = $data['data']['subject']; $subject = $message['data']['subject'];
$content = $data['data']['content']; $content = $message['data']['content'];
$html = $data['data']['html']; $html = $message['data']['html'];
return new Email(to: $to, subject: $subject, content: $content, from: $from, html: $html); return new Email(to: $to, subject: $subject, content: $content, from: $from, html: $html);
} }
private function buildSMSMessage($data): SMS private function buildSMSMessage($message, $provider): SMS
{ {
$to = $data['to']; $to = $message['to'];
$content = $data['data']['content']; $content = $message['data']['content'];
$from = $data['data']['from']; $from = $provider['options']['from'];
return new SMS($to, $content, $from); return new SMS($to, $content, $from);
} }
private function buildPushMessage($data): Push private function buildPushMessage($message): Push
{ {
$to = $data['to']; $to = $message['to'];
$title = $data['data']['title']; $title = $message['data']['title'];
$body = $data['data']['body']; $body = $message['data']['body'];
$data = $data['data']['data']; $data = $message['data']['data'];
$action = $data['data']['action']; $action = $message['data']['action'];
$sound = $data['data']['sound']; $sound = $message['data']['sound'];
$icon = $data['data']['icon']; $icon = $message['data']['icon'];
$color = $data['data']['color']; $color = $message['data']['color'];
$tag = $data['data']['tag']; $tag = $message['data']['tag'];
$badge = $data['data']['badge']; $badge = $message['data']['badge'];
return new Push($to, $title, $body, $data, $action, $sound, $icon, $color, $tag, $badge); return new Push($to, $title, $body, $data, $action, $sound, $icon, $color, $tag, $badge);
} }
} }

View file

@ -190,6 +190,11 @@ services:
- _APP_MESSAGE_SMS_PROVIDER_MSG91_AUTH_KEY - _APP_MESSAGE_SMS_PROVIDER_MSG91_AUTH_KEY
- _APP_MESSAGE_SMS_PROVIDER_MSG91_FROM - _APP_MESSAGE_SMS_PROVIDER_MSG91_FROM
- _APP_MESSAGE_SMS_PROVIDER_MSG91_TO - _APP_MESSAGE_SMS_PROVIDER_MSG91_TO
- _APP_MESSAGE_SMS_PROVIDER_MAILGUN_API_KEY
- _APP_MESSAGE_SMS_PROVIDER_MAILGUN_DOMAIN
- _APP_MESSAGE_SMS_PROVIDER_MAILGUN_FROM
- _APP_MESSAGE_SMS_PROVIDER_MAILGUN_RECEIVER_EMAIL
- _APP_MESSAGE_SMS_PROVIDER_MAILGUN_IS_EU_REGION
appwrite-realtime: appwrite-realtime:
entrypoint: realtime entrypoint: realtime

View file

@ -7,7 +7,7 @@ use Utopia\Database\Document;
class Messaging extends Event class Messaging extends Event
{ {
protected ?Document $message = null; protected ?string $messageId = null;
public function __construct() public function __construct()
{ {
@ -17,26 +17,26 @@ class Messaging extends Event
/** /**
* Sets message record for the messaging event. * Sets message ID for the messaging event.
* *
* @param Document $message * @param string $message
* @return self * @return self
*/ */
public function setMessage(Document $message): self public function setMessageId(string $messageId): self
{ {
$this->message = $message; $this->messageId = $messageId;
return $this; return $this;
} }
/** /**
* Returns set message for the messaging event. * Returns set message ID for the messaging event.
* *
* @return Document * @return string
*/ */
public function getMessage(): Document public function getMessageId(): string
{ {
return $this->message; return $this->messageId;
} }
/** /**
@ -50,7 +50,7 @@ class Messaging extends Event
return Resque::enqueue($this->queue, $this->class, [ return Resque::enqueue($this->queue, $this->class, [
'project' => $this->project, 'project' => $this->project,
'user' => $this->user, 'user' => $this->user,
'message' => $this->message, 'messageId' => $this->messageId,
]); ]);
} }
} }

View file

@ -765,6 +765,7 @@ class AccountCustomClientTest extends Scope
'senderId' => $senderId, 'senderId' => $senderId,
'authKey' => $authKey, 'authKey' => $authKey,
'default' => true, 'default' => true,
'from' => $from,
]); ]);
$this->assertEquals(201, $response['headers']['status-code']); $this->assertEquals(201, $response['headers']['status-code']);
/** /**

View file

@ -141,6 +141,7 @@ class AccountTest extends Scope
'name' => 'Sms Provider', 'name' => 'Sms Provider',
'provider' => 'msg91', 'provider' => 'msg91',
'type' => 'sms', 'type' => 'sms',
'from' => $from,
'senderId' => $senderId, 'senderId' => $senderId,
'authKey' => $authKey, 'authKey' => $authKey,
'default' => true, 'default' => true,

View file

@ -1935,6 +1935,7 @@ trait Base
return 'mutation createProviderMsg91( return 'mutation createProviderMsg91(
$providerId: String!, $providerId: String!,
$name: String!, $name: String!,
$from: String!,
$senderId: String!, $senderId: String!,
$authKey: String! $authKey: String!
$default: Boolean, $default: Boolean,
@ -1943,6 +1944,7 @@ trait Base
messagingCreateProviderMsg91( messagingCreateProviderMsg91(
providerId: $providerId, providerId: $providerId,
name: $name, name: $name,
from: $from,
senderId: $senderId, senderId: $senderId,
authKey: $authKey authKey: $authKey
default: $default, default: $default,

View file

@ -44,6 +44,7 @@ trait MessagingBase
'name' => 'Ms91-1', 'name' => 'Ms91-1',
'senderId' => 'my-senderid', 'senderId' => 'my-senderid',
'authKey' => 'my-authkey', 'authKey' => 'my-authkey',
'from' => '+123456789'
], ],
'vonage' => [ 'vonage' => [
'providerId' => 'unique()', 'providerId' => 'unique()',