1
0
Fork 0
mirror of synced 2024-06-13 16:24:47 +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_AUTH_KEY=
_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,
'signed' => true,
'required' => false,
'default' => null,
'default' => [],
'array' => false,
'filters' => ['json'],
],

View file

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

View file

@ -262,6 +262,7 @@ App::post('/v1/messaging/providers/sendgrid')
'type' => 'email',
'default' => $default,
'enabled' => $enabled,
'options' => [],
'search' => $providerId . ' ' . $name . ' ' . 'sendgrid' . ' ' . 'email',
'credentials' => [
'apiKey' => $apiKey,
@ -361,11 +362,12 @@ App::post('/v1/messaging/providers/msg91')
->param('name', '', new Text(128), 'Provider name.')
->param('default', false, new Boolean(), 'Set as default provider.', 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('authKey', '', new Text(0), 'Msg91 Auth Key.')
->inject('dbForProject')
->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;
$provider = new Document([
'$id' => $providerId,
@ -379,6 +381,9 @@ App::post('/v1/messaging/providers/msg91')
'senderId' => $senderId,
'authKey' => $authKey,
],
'options' => [
'from' => $from,
]
]);
// 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('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('description', '', new Text(256), 'Description for Message.')
->param('description', '', new Text(256), 'Description for Message.', true)
->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)
->inject('dbForProject')
->inject('project')
->inject('messaging')
->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;
$provider = $dbForProject->getDocument('providers', $providerId);
@ -1268,16 +1272,15 @@ App::post('/v1/messaging/messages/email')
'data' => [
'subject' => $subject,
'content' => $content,
'from' => $from,
'html' => $html,
'description' => $description,
],
'status' => 'processing',
'search' => $subject . ' ' . $from,
'search' => $messageId . ' ' . $description . ' ' . $subject,
]));
$messaging
->setMessage($message)
->setMessageId($message->getId())
->setProject($project)
->trigger();

View file

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

View file

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

View file

@ -7,7 +7,7 @@ use Utopia\Database\Document;
class Messaging extends Event
{
protected ?Document $message = null;
protected ?string $messageId = null;
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
*/
public function setMessage(Document $message): self
public function setMessageId(string $messageId): self
{
$this->message = $message;
$this->messageId = $messageId;
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, [
'project' => $this->project,
'user' => $this->user,
'message' => $this->message,
'messageId' => $this->messageId,
]);
}
}

View file

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

View file

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

View file

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

View file

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