review changes
This commit is contained in:
parent
d842191cc6
commit
a92390dda2
8 changed files with 278 additions and 118 deletions
|
@ -1600,6 +1600,17 @@ $commonCollections = [
|
||||||
'array' => false,
|
'array' => false,
|
||||||
'filters' => ['datetime'],
|
'filters' => ['datetime'],
|
||||||
],
|
],
|
||||||
|
[
|
||||||
|
'$id' => ID::custom('deliveredAt'),
|
||||||
|
'type' => Database::VAR_DATETIME,
|
||||||
|
'format' => '',
|
||||||
|
'size' => 0,
|
||||||
|
'signed' => false,
|
||||||
|
'required' => false,
|
||||||
|
'default' => null,
|
||||||
|
'array' => false,
|
||||||
|
'filters' => ['datetime'],
|
||||||
|
],
|
||||||
[
|
[
|
||||||
'$id' => ID::custom('deliveryErrors'),
|
'$id' => ID::custom('deliveryErrors'),
|
||||||
'type' => Database::VAR_STRING,
|
'type' => Database::VAR_STRING,
|
||||||
|
@ -1941,6 +1952,13 @@ $commonCollections = [
|
||||||
'attributes' => ['identifier'],
|
'attributes' => ['identifier'],
|
||||||
'lengths' => [],
|
'lengths' => [],
|
||||||
'orders' => [],
|
'orders' => [],
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'$id' => ID::custom('_key_identifier_providerId'),
|
||||||
|
'type' => Database::INDEX_UNIQUE,
|
||||||
|
'attributes' => ['providerId', 'identifier'],
|
||||||
|
'lengths' => [],
|
||||||
|
'orders' => [],
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
],
|
],
|
||||||
|
|
|
@ -258,6 +258,9 @@ return [
|
||||||
'create' => [
|
'create' => [
|
||||||
'$description' => 'This event triggers when a message is created.',
|
'$description' => 'This event triggers when a message is created.',
|
||||||
],
|
],
|
||||||
|
'update' => [
|
||||||
|
'$description' => 'This event triggers when a message is updated.',
|
||||||
|
],
|
||||||
'topics' => [
|
'topics' => [
|
||||||
'$model' => Response::MODEL_TOPIC,
|
'$model' => Response::MODEL_TOPIC,
|
||||||
'$resource' => true,
|
'$resource' => true,
|
||||||
|
|
|
@ -589,7 +589,7 @@ App::get('/v1/messaging/providers')
|
||||||
throw new Exception(Exception::GENERAL_CURSOR_NOT_FOUND, "Provider '{$providerId}' for the 'cursor' value not found.");
|
throw new Exception(Exception::GENERAL_CURSOR_NOT_FOUND, "Provider '{$providerId}' for the 'cursor' value not found.");
|
||||||
}
|
}
|
||||||
|
|
||||||
$cursor->setValue($cursorDocument[0]);
|
$cursor->setValue($cursorDocument);
|
||||||
}
|
}
|
||||||
|
|
||||||
$filterQueries = Query::groupByType($queries)['filters'];
|
$filterQueries = Query::groupByType($queries)['filters'];
|
||||||
|
@ -623,7 +623,7 @@ App::get('/v1/messaging/providers/:providerId')
|
||||||
$response->dynamic($provider, Response::MODEL_PROVIDER);
|
$response->dynamic($provider, Response::MODEL_PROVIDER);
|
||||||
});
|
});
|
||||||
|
|
||||||
App::patch('/v1/messaging/providers/mailgun/:id')
|
App::patch('/v1/messaging/providers/mailgun/:providerId')
|
||||||
->desc('Update Mailgun Provider')
|
->desc('Update Mailgun Provider')
|
||||||
->groups(['api', 'messaging'])
|
->groups(['api', 'messaging'])
|
||||||
->label('audits.event', 'providers.update')
|
->label('audits.event', 'providers.update')
|
||||||
|
@ -636,7 +636,7 @@ App::patch('/v1/messaging/providers/mailgun/:id')
|
||||||
->label('sdk.response.code', Response::STATUS_CODE_OK)
|
->label('sdk.response.code', Response::STATUS_CODE_OK)
|
||||||
->label('sdk.response.type', Response::CONTENT_TYPE_JSON)
|
->label('sdk.response.type', Response::CONTENT_TYPE_JSON)
|
||||||
->label('sdk.response.model', Response::MODEL_PROVIDER)
|
->label('sdk.response.model', Response::MODEL_PROVIDER)
|
||||||
->param('id', '', new UID(), 'Provider ID.')
|
->param('providerId', '', new UID(), 'Provider ID.')
|
||||||
->param('name', '', new Text(128), 'Provider name.', true)
|
->param('name', '', new Text(128), 'Provider name.', true)
|
||||||
->param('enabled', null, new Boolean(), 'Set as enabled.', true)
|
->param('enabled', null, new Boolean(), 'Set as enabled.', true)
|
||||||
->param('isEuRegion', null, new Boolean(), 'Set as eu region.', true)
|
->param('isEuRegion', null, new Boolean(), 'Set as eu region.', true)
|
||||||
|
@ -645,8 +645,8 @@ App::patch('/v1/messaging/providers/mailgun/:id')
|
||||||
->param('domain', '', new Text(0), 'Mailgun Domain.', true)
|
->param('domain', '', new Text(0), 'Mailgun Domain.', true)
|
||||||
->inject('dbForProject')
|
->inject('dbForProject')
|
||||||
->inject('response')
|
->inject('response')
|
||||||
->action(function (string $id, string $name, ?bool $enabled, ?bool $isEuRegion, string $from, string $apiKey, string $domain, Database $dbForProject, Response $response) {
|
->action(function (string $providerId, string $name, ?bool $enabled, ?bool $isEuRegion, string $from, string $apiKey, string $domain, Database $dbForProject, Response $response) {
|
||||||
$provider = $dbForProject->getDocument('providers', $id);
|
$provider = $dbForProject->getDocument('providers', $providerId);
|
||||||
|
|
||||||
if ($provider->isEmpty()) {
|
if ($provider->isEmpty()) {
|
||||||
throw new Exception(Exception::PROVIDER_NOT_FOUND);
|
throw new Exception(Exception::PROVIDER_NOT_FOUND);
|
||||||
|
@ -694,7 +694,7 @@ App::patch('/v1/messaging/providers/mailgun/:id')
|
||||||
->dynamic($provider, Response::MODEL_PROVIDER);
|
->dynamic($provider, Response::MODEL_PROVIDER);
|
||||||
});
|
});
|
||||||
|
|
||||||
App::patch('/v1/messaging/providers/sendgrid/:id')
|
App::patch('/v1/messaging/providers/sendgrid/:providerId')
|
||||||
->desc('Update Sendgrid Provider')
|
->desc('Update Sendgrid Provider')
|
||||||
->groups(['api', 'messaging'])
|
->groups(['api', 'messaging'])
|
||||||
->label('audits.event', 'providers.update')
|
->label('audits.event', 'providers.update')
|
||||||
|
@ -707,14 +707,14 @@ App::patch('/v1/messaging/providers/sendgrid/:id')
|
||||||
->label('sdk.response.code', Response::STATUS_CODE_OK)
|
->label('sdk.response.code', Response::STATUS_CODE_OK)
|
||||||
->label('sdk.response.type', Response::CONTENT_TYPE_JSON)
|
->label('sdk.response.type', Response::CONTENT_TYPE_JSON)
|
||||||
->label('sdk.response.model', Response::MODEL_PROVIDER)
|
->label('sdk.response.model', Response::MODEL_PROVIDER)
|
||||||
->param('id', '', new UID(), 'Provider ID.')
|
->param('providerId', '', new UID(), 'Provider ID.')
|
||||||
->param('name', '', new Text(128), 'Provider name.', true)
|
->param('name', '', new Text(128), 'Provider name.', true)
|
||||||
->param('enabled', null, new Boolean(), 'Set as enabled.', true)
|
->param('enabled', null, new Boolean(), 'Set as enabled.', true)
|
||||||
->param('apiKey', '', new Text(0), 'Sendgrid API key.', true)
|
->param('apiKey', '', new Text(0), 'Sendgrid API key.', true)
|
||||||
->inject('dbForProject')
|
->inject('dbForProject')
|
||||||
->inject('response')
|
->inject('response')
|
||||||
->action(function (string $id, string $name, ?bool $enabled, string $apiKey, Database $dbForProject, Response $response) {
|
->action(function (string $providerId, string $name, ?bool $enabled, string $apiKey, Database $dbForProject, Response $response) {
|
||||||
$provider = $dbForProject->getDocument('providers', $id);
|
$provider = $dbForProject->getDocument('providers', $providerId);
|
||||||
|
|
||||||
if ($provider->isEmpty()) {
|
if ($provider->isEmpty()) {
|
||||||
throw new Exception(Exception::PROVIDER_NOT_FOUND);
|
throw new Exception(Exception::PROVIDER_NOT_FOUND);
|
||||||
|
@ -746,7 +746,7 @@ App::patch('/v1/messaging/providers/sendgrid/:id')
|
||||||
->dynamic($provider, Response::MODEL_PROVIDER);
|
->dynamic($provider, Response::MODEL_PROVIDER);
|
||||||
});
|
});
|
||||||
|
|
||||||
App::patch('/v1/messaging/providers/msg91/:id')
|
App::patch('/v1/messaging/providers/msg91/:providerId')
|
||||||
->desc('Update Msg91 Provider')
|
->desc('Update Msg91 Provider')
|
||||||
->groups(['api', 'messaging'])
|
->groups(['api', 'messaging'])
|
||||||
->label('audits.event', 'providers.update')
|
->label('audits.event', 'providers.update')
|
||||||
|
@ -759,15 +759,15 @@ App::patch('/v1/messaging/providers/msg91/:id')
|
||||||
->label('sdk.response.code', Response::STATUS_CODE_OK)
|
->label('sdk.response.code', Response::STATUS_CODE_OK)
|
||||||
->label('sdk.response.type', Response::CONTENT_TYPE_JSON)
|
->label('sdk.response.type', Response::CONTENT_TYPE_JSON)
|
||||||
->label('sdk.response.model', Response::MODEL_PROVIDER)
|
->label('sdk.response.model', Response::MODEL_PROVIDER)
|
||||||
->param('id', '', new UID(), 'Provider ID.')
|
->param('providerId', '', new UID(), 'Provider ID.')
|
||||||
->param('name', '', new Text(128), 'Provider name.', true)
|
->param('name', '', new Text(128), 'Provider name.', true)
|
||||||
->param('enabled', null, new Boolean(), 'Set as enabled.', true)
|
->param('enabled', null, new Boolean(), 'Set as enabled.', true)
|
||||||
->param('senderId', '', new Text(0), 'Msg91 Sender ID.', true)
|
->param('senderId', '', new Text(0), 'Msg91 Sender ID.', true)
|
||||||
->param('authKey', '', new Text(0), 'Msg91 Auth Key.', true)
|
->param('authKey', '', new Text(0), 'Msg91 Auth Key.', true)
|
||||||
->inject('dbForProject')
|
->inject('dbForProject')
|
||||||
->inject('response')
|
->inject('response')
|
||||||
->action(function (string $id, string $name, ?bool $enabled, string $senderId, string $authKey, Database $dbForProject, Response $response) {
|
->action(function (string $providerId, string $name, ?bool $enabled, string $senderId, string $authKey, Database $dbForProject, Response $response) {
|
||||||
$provider = $dbForProject->getDocument('providers', $id);
|
$provider = $dbForProject->getDocument('providers', $providerId);
|
||||||
|
|
||||||
if ($provider->isEmpty()) {
|
if ($provider->isEmpty()) {
|
||||||
throw new Exception(Exception::PROVIDER_NOT_FOUND);
|
throw new Exception(Exception::PROVIDER_NOT_FOUND);
|
||||||
|
@ -805,7 +805,7 @@ App::patch('/v1/messaging/providers/msg91/:id')
|
||||||
->dynamic($provider, Response::MODEL_PROVIDER);
|
->dynamic($provider, Response::MODEL_PROVIDER);
|
||||||
});
|
});
|
||||||
|
|
||||||
App::patch('/v1/messaging/providers/telesign/:id')
|
App::patch('/v1/messaging/providers/telesign/:providerId')
|
||||||
->desc('Update Telesign Provider')
|
->desc('Update Telesign Provider')
|
||||||
->groups(['api', 'messaging'])
|
->groups(['api', 'messaging'])
|
||||||
->label('audits.event', 'providers.update')
|
->label('audits.event', 'providers.update')
|
||||||
|
@ -818,15 +818,15 @@ App::patch('/v1/messaging/providers/telesign/:id')
|
||||||
->label('sdk.response.code', Response::STATUS_CODE_OK)
|
->label('sdk.response.code', Response::STATUS_CODE_OK)
|
||||||
->label('sdk.response.type', Response::CONTENT_TYPE_JSON)
|
->label('sdk.response.type', Response::CONTENT_TYPE_JSON)
|
||||||
->label('sdk.response.model', Response::MODEL_PROVIDER)
|
->label('sdk.response.model', Response::MODEL_PROVIDER)
|
||||||
->param('id', '', new UID(), 'Provider ID.')
|
->param('providerId', '', new UID(), 'Provider ID.')
|
||||||
->param('name', '', new Text(128), 'Provider name.', true)
|
->param('name', '', new Text(128), 'Provider name.', true)
|
||||||
->param('enabled', null, new Boolean(), 'Set as enabled.', true)
|
->param('enabled', null, new Boolean(), 'Set as enabled.', true)
|
||||||
->param('username', '', new Text(0), 'Telesign username.', true)
|
->param('username', '', new Text(0), 'Telesign username.', true)
|
||||||
->param('password', '', new Text(0), 'Telesign password.', true)
|
->param('password', '', new Text(0), 'Telesign password.', true)
|
||||||
->inject('dbForProject')
|
->inject('dbForProject')
|
||||||
->inject('response')
|
->inject('response')
|
||||||
->action(function (string $id, string $name, ?bool $enabled, string $username, string $password, Database $dbForProject, Response $response) {
|
->action(function (string $providerId, string $name, ?bool $enabled, string $username, string $password, Database $dbForProject, Response $response) {
|
||||||
$provider = $dbForProject->getDocument('providers', $id);
|
$provider = $dbForProject->getDocument('providers', $providerId);
|
||||||
|
|
||||||
if ($provider->isEmpty()) {
|
if ($provider->isEmpty()) {
|
||||||
throw new Exception(Exception::PROVIDER_NOT_FOUND);
|
throw new Exception(Exception::PROVIDER_NOT_FOUND);
|
||||||
|
@ -864,7 +864,7 @@ App::patch('/v1/messaging/providers/telesign/:id')
|
||||||
->dynamic($provider, Response::MODEL_PROVIDER);
|
->dynamic($provider, Response::MODEL_PROVIDER);
|
||||||
});
|
});
|
||||||
|
|
||||||
App::patch('/v1/messaging/providers/textmagic/:id')
|
App::patch('/v1/messaging/providers/textmagic/:providerId')
|
||||||
->desc('Update Textmagic Provider')
|
->desc('Update Textmagic Provider')
|
||||||
->groups(['api', 'messaging'])
|
->groups(['api', 'messaging'])
|
||||||
->label('audits.event', 'providers.update')
|
->label('audits.event', 'providers.update')
|
||||||
|
@ -877,15 +877,15 @@ App::patch('/v1/messaging/providers/textmagic/:id')
|
||||||
->label('sdk.response.code', Response::STATUS_CODE_OK)
|
->label('sdk.response.code', Response::STATUS_CODE_OK)
|
||||||
->label('sdk.response.type', Response::CONTENT_TYPE_JSON)
|
->label('sdk.response.type', Response::CONTENT_TYPE_JSON)
|
||||||
->label('sdk.response.model', Response::MODEL_PROVIDER)
|
->label('sdk.response.model', Response::MODEL_PROVIDER)
|
||||||
->param('id', '', new UID(), 'Provider ID.')
|
->param('providerId', '', new UID(), 'Provider ID.')
|
||||||
->param('name', '', new Text(128), 'Provider name.', true)
|
->param('name', '', new Text(128), 'Provider name.', true)
|
||||||
->param('enabled', null, new Boolean(), 'Set as enabled.', true)
|
->param('enabled', null, new Boolean(), 'Set as enabled.', true)
|
||||||
->param('username', '', new Text(0), 'Textmagic username.', true)
|
->param('username', '', new Text(0), 'Textmagic username.', true)
|
||||||
->param('apiKey', '', new Text(0), 'Textmagic apiKey.', true)
|
->param('apiKey', '', new Text(0), 'Textmagic apiKey.', true)
|
||||||
->inject('dbForProject')
|
->inject('dbForProject')
|
||||||
->inject('response')
|
->inject('response')
|
||||||
->action(function (string $id, string $name, ?bool $enabled, string $username, string $apiKey, Database $dbForProject, Response $response) {
|
->action(function (string $providerId, string $name, ?bool $enabled, string $username, string $apiKey, Database $dbForProject, Response $response) {
|
||||||
$provider = $dbForProject->getDocument('providers', $id);
|
$provider = $dbForProject->getDocument('providers', $providerId);
|
||||||
|
|
||||||
if ($provider->isEmpty()) {
|
if ($provider->isEmpty()) {
|
||||||
throw new Exception(Exception::PROVIDER_NOT_FOUND);
|
throw new Exception(Exception::PROVIDER_NOT_FOUND);
|
||||||
|
@ -923,7 +923,7 @@ App::patch('/v1/messaging/providers/textmagic/:id')
|
||||||
->dynamic($provider, Response::MODEL_PROVIDER);
|
->dynamic($provider, Response::MODEL_PROVIDER);
|
||||||
});
|
});
|
||||||
|
|
||||||
App::patch('/v1/messaging/providers/twilio/:id')
|
App::patch('/v1/messaging/providers/twilio/:providerId')
|
||||||
->desc('Update Twilio Provider')
|
->desc('Update Twilio Provider')
|
||||||
->groups(['api', 'messaging'])
|
->groups(['api', 'messaging'])
|
||||||
->label('audits.event', 'providers.update')
|
->label('audits.event', 'providers.update')
|
||||||
|
@ -936,15 +936,15 @@ App::patch('/v1/messaging/providers/twilio/:id')
|
||||||
->label('sdk.response.code', Response::STATUS_CODE_OK)
|
->label('sdk.response.code', Response::STATUS_CODE_OK)
|
||||||
->label('sdk.response.type', Response::CONTENT_TYPE_JSON)
|
->label('sdk.response.type', Response::CONTENT_TYPE_JSON)
|
||||||
->label('sdk.response.model', Response::MODEL_PROVIDER)
|
->label('sdk.response.model', Response::MODEL_PROVIDER)
|
||||||
->param('id', '', new UID(), 'Provider ID.')
|
->param('providerId', '', new UID(), 'Provider ID.')
|
||||||
->param('name', '', new Text(128), 'Provider name.', true)
|
->param('name', '', new Text(128), 'Provider name.', true)
|
||||||
->param('enabled', null, new Boolean(), 'Set as enabled.', true)
|
->param('enabled', null, new Boolean(), 'Set as enabled.', true)
|
||||||
->param('accountSid', null, new Text(0), 'Twilio account secret ID.', true)
|
->param('accountSid', null, new Text(0), 'Twilio account secret ID.', true)
|
||||||
->param('authToken', null, new Text(0), 'Twilio authentication token.', true)
|
->param('authToken', null, new Text(0), 'Twilio authentication token.', true)
|
||||||
->inject('dbForProject')
|
->inject('dbForProject')
|
||||||
->inject('response')
|
->inject('response')
|
||||||
->action(function (string $id, string $name, ?bool $enabled, string $accountSid, string $authToken, Database $dbForProject, Response $response) {
|
->action(function (string $providerId, string $name, ?bool $enabled, string $accountSid, string $authToken, Database $dbForProject, Response $response) {
|
||||||
$provider = $dbForProject->getDocument('providers', $id);
|
$provider = $dbForProject->getDocument('providers', $providerId);
|
||||||
|
|
||||||
if ($provider->isEmpty()) {
|
if ($provider->isEmpty()) {
|
||||||
throw new Exception(Exception::PROVIDER_NOT_FOUND);
|
throw new Exception(Exception::PROVIDER_NOT_FOUND);
|
||||||
|
@ -982,7 +982,7 @@ App::patch('/v1/messaging/providers/twilio/:id')
|
||||||
->dynamic($provider, Response::MODEL_PROVIDER);
|
->dynamic($provider, Response::MODEL_PROVIDER);
|
||||||
});
|
});
|
||||||
|
|
||||||
App::patch('/v1/messaging/providers/vonage/:id')
|
App::patch('/v1/messaging/providers/vonage/:providerId')
|
||||||
->desc('Update Vonage Provider')
|
->desc('Update Vonage Provider')
|
||||||
->groups(['api', 'messaging'])
|
->groups(['api', 'messaging'])
|
||||||
->label('audits.event', 'providers.update')
|
->label('audits.event', 'providers.update')
|
||||||
|
@ -995,15 +995,15 @@ App::patch('/v1/messaging/providers/vonage/:id')
|
||||||
->label('sdk.response.code', Response::STATUS_CODE_OK)
|
->label('sdk.response.code', Response::STATUS_CODE_OK)
|
||||||
->label('sdk.response.type', Response::CONTENT_TYPE_JSON)
|
->label('sdk.response.type', Response::CONTENT_TYPE_JSON)
|
||||||
->label('sdk.response.model', Response::MODEL_PROVIDER)
|
->label('sdk.response.model', Response::MODEL_PROVIDER)
|
||||||
->param('id', '', new UID(), 'Provider ID.')
|
->param('providerId', '', new UID(), 'Provider ID.')
|
||||||
->param('name', '', new Text(128), 'Provider name.', true)
|
->param('name', '', new Text(128), 'Provider name.', true)
|
||||||
->param('enabled', null, new Boolean(), 'Set as enabled.', true)
|
->param('enabled', null, new Boolean(), 'Set as enabled.', true)
|
||||||
->param('apiKey', '', new Text(0), 'Vonage API key.', true)
|
->param('apiKey', '', new Text(0), 'Vonage API key.', true)
|
||||||
->param('apiSecret', '', new Text(0), 'Vonage API secret.', true)
|
->param('apiSecret', '', new Text(0), 'Vonage API secret.', true)
|
||||||
->inject('dbForProject')
|
->inject('dbForProject')
|
||||||
->inject('response')
|
->inject('response')
|
||||||
->action(function (string $id, string $name, ?bool $enabled, string $apiKey, string $apiSecret, Database $dbForProject, Response $response) {
|
->action(function (string $providerId, string $name, ?bool $enabled, string $apiKey, string $apiSecret, Database $dbForProject, Response $response) {
|
||||||
$provider = $dbForProject->getDocument('providers', $id);
|
$provider = $dbForProject->getDocument('providers', $providerId);
|
||||||
|
|
||||||
if ($provider->isEmpty()) {
|
if ($provider->isEmpty()) {
|
||||||
throw new Exception(Exception::PROVIDER_NOT_FOUND);
|
throw new Exception(Exception::PROVIDER_NOT_FOUND);
|
||||||
|
@ -1041,7 +1041,7 @@ App::patch('/v1/messaging/providers/vonage/:id')
|
||||||
->dynamic($provider, Response::MODEL_PROVIDER);
|
->dynamic($provider, Response::MODEL_PROVIDER);
|
||||||
});
|
});
|
||||||
|
|
||||||
App::patch('/v1/messaging/providers/fcm/:id')
|
App::patch('/v1/messaging/providers/fcm/:providerId')
|
||||||
->desc('Update FCM Provider')
|
->desc('Update FCM Provider')
|
||||||
->groups(['api', 'messaging'])
|
->groups(['api', 'messaging'])
|
||||||
->label('audits.event', 'providers.update')
|
->label('audits.event', 'providers.update')
|
||||||
|
@ -1054,14 +1054,14 @@ App::patch('/v1/messaging/providers/fcm/:id')
|
||||||
->label('sdk.response.code', Response::STATUS_CODE_OK)
|
->label('sdk.response.code', Response::STATUS_CODE_OK)
|
||||||
->label('sdk.response.type', Response::CONTENT_TYPE_JSON)
|
->label('sdk.response.type', Response::CONTENT_TYPE_JSON)
|
||||||
->label('sdk.response.model', Response::MODEL_PROVIDER)
|
->label('sdk.response.model', Response::MODEL_PROVIDER)
|
||||||
->param('id', '', new UID(), 'Provider ID.')
|
->param('providerId', '', new UID(), 'Provider ID.')
|
||||||
->param('name', '', new Text(128), 'Provider name.', true)
|
->param('name', '', new Text(128), 'Provider name.', true)
|
||||||
->param('enabled', null, new Boolean(), 'Set as enabled.', true)
|
->param('enabled', null, new Boolean(), 'Set as enabled.', true)
|
||||||
->param('serverKey', '', new Text(0), 'FCM Server Key.', true)
|
->param('serverKey', '', new Text(0), 'FCM Server Key.', true)
|
||||||
->inject('dbForProject')
|
->inject('dbForProject')
|
||||||
->inject('response')
|
->inject('response')
|
||||||
->action(function (string $id, string $name, ?bool $enabled, string $serverKey, Database $dbForProject, Response $response) {
|
->action(function (string $providerId, string $name, ?bool $enabled, string $serverKey, Database $dbForProject, Response $response) {
|
||||||
$provider = $dbForProject->getDocument('providers', $id);
|
$provider = $dbForProject->getDocument('providers', $providerId);
|
||||||
|
|
||||||
if ($provider->isEmpty()) {
|
if ($provider->isEmpty()) {
|
||||||
throw new Exception(Exception::PROVIDER_NOT_FOUND);
|
throw new Exception(Exception::PROVIDER_NOT_FOUND);
|
||||||
|
@ -1092,7 +1092,7 @@ App::patch('/v1/messaging/providers/fcm/:id')
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
App::patch('/v1/messaging/providers/apns/:id')
|
App::patch('/v1/messaging/providers/apns/:providerId')
|
||||||
->desc('Update APNS Provider')
|
->desc('Update APNS Provider')
|
||||||
->groups(['api', 'messaging'])
|
->groups(['api', 'messaging'])
|
||||||
->label('audits.event', 'providers.update')
|
->label('audits.event', 'providers.update')
|
||||||
|
@ -1105,7 +1105,7 @@ App::patch('/v1/messaging/providers/apns/:id')
|
||||||
->label('sdk.response.code', Response::STATUS_CODE_OK)
|
->label('sdk.response.code', Response::STATUS_CODE_OK)
|
||||||
->label('sdk.response.type', Response::CONTENT_TYPE_JSON)
|
->label('sdk.response.type', Response::CONTENT_TYPE_JSON)
|
||||||
->label('sdk.response.model', Response::MODEL_PROVIDER)
|
->label('sdk.response.model', Response::MODEL_PROVIDER)
|
||||||
->param('id', '', new UID(), 'Provider ID.')
|
->param('providerId', '', new UID(), 'Provider ID.')
|
||||||
->param('name', '', new Text(128), 'Provider name.', true)
|
->param('name', '', new Text(128), 'Provider name.', true)
|
||||||
->param('enabled', null, new Boolean(), 'Set as enabled.', true)
|
->param('enabled', null, new Boolean(), 'Set as enabled.', true)
|
||||||
->param('authKey', '', new Text(0), 'APNS authentication key.', true)
|
->param('authKey', '', new Text(0), 'APNS authentication key.', true)
|
||||||
|
@ -1115,8 +1115,8 @@ App::patch('/v1/messaging/providers/apns/:id')
|
||||||
->param('endpoint', '', new Text(0), 'APNS endpoint.', true)
|
->param('endpoint', '', new Text(0), 'APNS endpoint.', true)
|
||||||
->inject('dbForProject')
|
->inject('dbForProject')
|
||||||
->inject('response')
|
->inject('response')
|
||||||
->action(function (string $id, string $name, ?bool $enabled, string $authKey, string $authKeyId, string $teamId, string $bundleId, string $endpoint, Database $dbForProject, Response $response) {
|
->action(function (string $providerId, string $name, ?bool $enabled, string $authKey, string $authKeyId, string $teamId, string $bundleId, string $endpoint, Database $dbForProject, Response $response) {
|
||||||
$provider = $dbForProject->getDocument('providers', $id);
|
$provider = $dbForProject->getDocument('providers', $providerId);
|
||||||
|
|
||||||
if ($provider->isEmpty()) {
|
if ($provider->isEmpty()) {
|
||||||
throw new Exception(Exception::PROVIDER_NOT_FOUND);
|
throw new Exception(Exception::PROVIDER_NOT_FOUND);
|
||||||
|
@ -1213,12 +1213,13 @@ App::post('/v1/messaging/messages/email')
|
||||||
->param('subject', '', new Text(998), 'Email Subject.')
|
->param('subject', '', new Text(998), 'Email Subject.')
|
||||||
->param('description', '', new Text(256), 'Description for Message.', true)
|
->param('description', '', new Text(256), 'Description for Message.', true)
|
||||||
->param('content', '', new Text(64230), 'Email Content.')
|
->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('html', false, new Boolean(), '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 $html, Database $dbForProject, Document $project, Messaging $messaging, Response $response) {
|
->action(function (string $messageId, string $providerId, array $to, string $subject, string $description, string $content, string $status, bool $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);
|
||||||
|
@ -1238,20 +1239,63 @@ App::post('/v1/messaging/messages/email')
|
||||||
'html' => $html,
|
'html' => $html,
|
||||||
'description' => $description,
|
'description' => $description,
|
||||||
],
|
],
|
||||||
'status' => 'processing',
|
'status' => $status,
|
||||||
'search' => $messageId . ' ' . $description . ' ' . $subject,
|
'search' => $messageId . ' ' . $description . ' ' . $subject,
|
||||||
]));
|
]));
|
||||||
|
|
||||||
$messaging
|
if ($status === 'processing') {
|
||||||
->setMessageId($message->getId())
|
$messaging
|
||||||
->setProject($project)
|
->setMessageId($message->getId())
|
||||||
->trigger();
|
->setProject($project)
|
||||||
|
->trigger();
|
||||||
|
}
|
||||||
|
|
||||||
$response
|
$response
|
||||||
->setStatusCode(Response::STATUS_CODE_CREATED)
|
->setStatusCode(Response::STATUS_CODE_CREATED)
|
||||||
->dynamic($message, Response::MODEL_MESSAGE);
|
->dynamic($message, Response::MODEL_MESSAGE);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
App::get('/v1/messaging/messages')
|
||||||
|
->desc('List Messages')
|
||||||
|
->groups(['api', 'messaging'])
|
||||||
|
->label('scope', 'messages.read')
|
||||||
|
->label('sdk.auth', [APP_AUTH_TYPE_ADMIN, APP_AUTH_TYPE_KEY])
|
||||||
|
->label('sdk.namespace', 'messaging')
|
||||||
|
->label('sdk.method', 'listMessages')
|
||||||
|
->label('sdk.description', '/docs/references/messaging/list-messages.md')
|
||||||
|
->label('sdk.response.code', Response::STATUS_CODE_OK)
|
||||||
|
->label('sdk.response.type', Response::CONTENT_TYPE_JSON)
|
||||||
|
->label('sdk.response.model', Response::MODEL_MESSAGE_LIST)
|
||||||
|
->param('queries', [], new Providers(), 'Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https://appwrite.io/docs/queries). Maximum of ' . APP_LIMIT_ARRAY_PARAMS_SIZE . ' queries are allowed, each ' . APP_LIMIT_ARRAY_ELEMENT_SIZE . ' characters long. You may filter on the following attributes: ' . implode(', ', Providers::ALLOWED_ATTRIBUTES), true)
|
||||||
|
->inject('dbForProject')
|
||||||
|
->inject('response')
|
||||||
|
->action(function (array $queries, Database $dbForProject, Response $response) {
|
||||||
|
$queries = Query::parseQueries($queries);
|
||||||
|
|
||||||
|
// Get cursor document if there was a cursor query
|
||||||
|
$cursor = Query::getByType($queries, [Query::TYPE_CURSORAFTER, Query::TYPE_CURSORBEFORE]);
|
||||||
|
$cursor = reset($cursor);
|
||||||
|
|
||||||
|
if ($cursor) {
|
||||||
|
$messageId = $cursor->getValue();
|
||||||
|
$cursorDocument = Authorization::skip(fn () => $dbForProject->findOne('messages', [
|
||||||
|
Query::equal('$id', [$messageId]),
|
||||||
|
]));
|
||||||
|
|
||||||
|
if ($cursorDocument === false || $cursorDocument->isEmpty()) {
|
||||||
|
throw new Exception(Exception::GENERAL_CURSOR_NOT_FOUND, "Message '{$messageId}' for the 'cursor' value not found.");
|
||||||
|
}
|
||||||
|
|
||||||
|
$cursor->setValue($cursorDocument);
|
||||||
|
}
|
||||||
|
|
||||||
|
$filterQueries = Query::groupByType($queries)['filters'];
|
||||||
|
$response->dynamic(new Document([
|
||||||
|
'total' => $dbForProject->count('messages', $filterQueries, APP_LIMIT_COUNT),
|
||||||
|
'messages' => $dbForProject->find('messages', $queries),
|
||||||
|
]), Response::MODEL_MESSAGE_LIST);
|
||||||
|
});
|
||||||
|
|
||||||
App::get('/v1/messaging/messages/:messageId')
|
App::get('/v1/messaging/messages/:messageId')
|
||||||
->desc('Get Message')
|
->desc('Get Message')
|
||||||
->groups(['api', 'messaging'])
|
->groups(['api', 'messaging'])
|
||||||
|
@ -1275,3 +1319,77 @@ App::get('/v1/messaging/messages/:messageId')
|
||||||
|
|
||||||
$response->dynamic($message, Response::MODEL_MESSAGE);
|
$response->dynamic($message, Response::MODEL_MESSAGE);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
App::post('/v1/messaging/messages/email/:messageId')
|
||||||
|
->desc('Update an email.')
|
||||||
|
->groups(['api', 'messaging'])
|
||||||
|
->label('audits.event', 'messages.update')
|
||||||
|
->label('audits.resource', 'messages/{response.$id}')
|
||||||
|
->label('scope', 'messages.write')
|
||||||
|
->label('sdk.auth', [APP_AUTH_TYPE_ADMIN, APP_AUTH_TYPE_KEY])
|
||||||
|
->label('sdk.namespace', 'messaging')
|
||||||
|
->label('sdk.method', 'updateEmail')
|
||||||
|
->label('sdk.description', '/docs/references/messaging/update-email.md')
|
||||||
|
->label('sdk.response.code', Response::STATUS_CODE_CREATED)
|
||||||
|
->label('sdk.response.type', Response::CONTENT_TYPE_JSON)
|
||||||
|
->label('sdk.response.model', Response::MODEL_MESSAGE)
|
||||||
|
->param('messageId', '', new UID(), 'Message ID.')
|
||||||
|
->param('to', [], new ArrayList(new Text(Database::LENGTH_KEY)), 'List of Topic IDs or List of User IDs or List of Target IDs.', true)
|
||||||
|
->param('subject', '', new Text(998), 'Email Subject.', true)
|
||||||
|
->param('description', '', new Text(256), 'Description for Message.', true)
|
||||||
|
->param('content', '', new Text(64230), 'Email Content.', true)
|
||||||
|
->param('status', '', new WhiteList(['draft', 'processing']), 'Message Status.', true)
|
||||||
|
->param('html', false, new Boolean(), 'Is content of type HTML', true)
|
||||||
|
->inject('dbForProject')
|
||||||
|
->inject('project')
|
||||||
|
->inject('messaging')
|
||||||
|
->inject('response')
|
||||||
|
->action(function (string $messageId, array $to, string $subject, string $description, string $content, string $status, bool $html, Database $dbForProject, Document $project, Messaging $messaging, Response $response) {
|
||||||
|
$message = $dbForProject->getDocument('messages', $messageId);
|
||||||
|
|
||||||
|
if ($message->isEmpty()) {
|
||||||
|
throw new Exception(Exception::MESSAGE_NOT_FOUND);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (\count($to) > 0) {
|
||||||
|
$message->setAttribute('to', $to);
|
||||||
|
}
|
||||||
|
|
||||||
|
$data = $message->getAttribute('data');
|
||||||
|
|
||||||
|
if (!empty($subject)) {
|
||||||
|
$data['subject'] = $subject;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!empty($content)) {
|
||||||
|
$data['content'] = $content;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!empty($description)) {
|
||||||
|
$data['description'] = $description;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!empty($html)) {
|
||||||
|
$data['html'] = $html;
|
||||||
|
}
|
||||||
|
|
||||||
|
$message->setAttribute('data', $data);
|
||||||
|
$message->setAttribute('search', $message->getId() . ' ' . $data['description'] . ' ' . $data['subject']);
|
||||||
|
|
||||||
|
if (!empty($status)) {
|
||||||
|
$message->setAttribute('status', $status);
|
||||||
|
}
|
||||||
|
|
||||||
|
$message = $dbForProject->updateDocument('messages', $message->getId(), $message);
|
||||||
|
|
||||||
|
if ($status === 'processing') {
|
||||||
|
$messaging
|
||||||
|
->setMessageId($message->getId())
|
||||||
|
->setProject($project)
|
||||||
|
->trigger();
|
||||||
|
}
|
||||||
|
|
||||||
|
$response
|
||||||
|
->setStatusCode(Response::STATUS_CODE_CREATED)
|
||||||
|
->dynamic($message, Response::MODEL_MESSAGE);
|
||||||
|
});
|
||||||
|
|
|
@ -419,14 +419,18 @@ App::post('/v1/users/:userId/targets')
|
||||||
throw new Exception(Exception::USER_TARGET_ALREADY_EXISTS);
|
throw new Exception(Exception::USER_TARGET_ALREADY_EXISTS);
|
||||||
}
|
}
|
||||||
|
|
||||||
$target = $dbForProject->createDocument('targets', new Document([
|
try {
|
||||||
'$id' => $targetId,
|
$target = $dbForProject->createDocument('targets', new Document([
|
||||||
'providerId' => $providerId,
|
'$id' => $targetId,
|
||||||
'providerInternalId' => $provider->getInternalId(),
|
'providerId' => $providerId,
|
||||||
'userId' => $userId,
|
'providerInternalId' => $provider->getInternalId(),
|
||||||
'userInternalId' => $user->getInternalId(),
|
'userId' => $userId,
|
||||||
'identifier' => $identifier,
|
'userInternalId' => $user->getInternalId(),
|
||||||
]));
|
'identifier' => $identifier,
|
||||||
|
]));
|
||||||
|
} catch (Duplicate) {
|
||||||
|
throw new Exception(Exception::USER_TARGET_ALREADY_EXISTS);
|
||||||
|
}
|
||||||
$dbForProject->deleteCachedDocument('users', $user->getId());
|
$dbForProject->deleteCachedDocument('users', $user->getId());
|
||||||
|
|
||||||
$response
|
$response
|
||||||
|
@ -1229,6 +1233,10 @@ App::patch('/v1/users/:userId/targets/:targetId/identifier')
|
||||||
throw new Exception(Exception::USER_TARGET_NOT_FOUND);
|
throw new Exception(Exception::USER_TARGET_NOT_FOUND);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ($user->getId() !== $target->getAttribute('userId')) {
|
||||||
|
throw new Exception(Exception::USER_TARGET_NOT_FOUND);
|
||||||
|
}
|
||||||
|
|
||||||
$target->setAttribute('identifier', $identifier);
|
$target->setAttribute('identifier', $identifier);
|
||||||
|
|
||||||
$target = $dbForProject->updateDocument('targets', $target->getId(), $target);
|
$target = $dbForProject->updateDocument('targets', $target->getId(), $target);
|
||||||
|
@ -1404,6 +1412,10 @@ App::delete('/v1/users/:userId/targets/:targetId')
|
||||||
throw new Exception(Exception::USER_TARGET_NOT_FOUND);
|
throw new Exception(Exception::USER_TARGET_NOT_FOUND);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ($user->getId() !== $target->getAttribute('userId')) {
|
||||||
|
throw new Exception(Exception::USER_TARGET_NOT_FOUND);
|
||||||
|
}
|
||||||
|
|
||||||
$target = $dbForProject->deleteDocument('targets', $target->getId());
|
$target = $dbForProject->deleteDocument('targets', $target->getId());
|
||||||
$dbForProject->deleteCachedDocument('users', $user->getId());
|
$dbForProject->deleteCachedDocument('users', $user->getId());
|
||||||
|
|
||||||
|
|
|
@ -62,16 +62,16 @@ class MessagingV1 extends Worker
|
||||||
$this->processMessage($message, $provider);
|
$this->processMessage($message, $provider);
|
||||||
}
|
}
|
||||||
|
|
||||||
private function processMessage(Document $messageRecord, Document $providerRecord): void
|
private function processMessage(Document $message, Document $provider): void
|
||||||
{
|
{
|
||||||
$provider = match ($providerRecord->getAttribute('type')) {
|
$adapter = match ($provider->getAttribute('type')) {
|
||||||
'sms' => $this->sms($providerRecord),
|
'sms' => $this->sms($provider),
|
||||||
'push' => $this->push($providerRecord),
|
'push' => $this->push($provider),
|
||||||
'email' => $this->email($providerRecord),
|
'email' => $this->email($provider),
|
||||||
default => throw new Exception(Exception::PROVIDER_INCORRECT_TYPE)
|
default => throw new Exception(Exception::PROVIDER_INCORRECT_TYPE)
|
||||||
};
|
};
|
||||||
|
|
||||||
$recipientsId = $messageRecord->getAttribute('to');
|
$recipientsId = $message->getAttribute('to');
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @var Document[] $recipients
|
* @var Document[] $recipients
|
||||||
|
@ -90,29 +90,31 @@ class MessagingV1 extends Worker
|
||||||
|
|
||||||
$targets = $this->dbForProject->find('targets', [Query::equal('$id', $recipientsId)]);
|
$targets = $this->dbForProject->find('targets', [Query::equal('$id', $recipientsId)]);
|
||||||
$recipients = \array_merge($recipients, $targets);
|
$recipients = \array_merge($recipients, $targets);
|
||||||
$recipients = \array_filter($recipients, fn (Document $recipient) => $recipient->getAttribute('providerId') === $providerRecord->getId());
|
$recipients = \array_filter($recipients, function (Document $recipient) use ($provider) {
|
||||||
|
return $recipient->getAttribute('providerId') === $provider->getId();
|
||||||
|
});
|
||||||
|
|
||||||
$identifiers = \array_map(function (Document $recipient) {
|
$identifiers = \array_map(function (Document $recipient) {
|
||||||
return $recipient->getAttribute('identifier');
|
return $recipient->getAttribute('identifier');
|
||||||
}, $recipients);
|
}, $recipients);
|
||||||
|
|
||||||
$maxBatchSize = $provider->getMaxMessagesPerRequest();
|
$maxBatchSize = $adapter->getMaxMessagesPerRequest();
|
||||||
$batches = \array_chunk($identifiers, $maxBatchSize);
|
$batches = \array_chunk($identifiers, $maxBatchSize);
|
||||||
|
|
||||||
$results = batch(\array_map(function ($batch) use ($messageRecord, $providerRecord, $provider) {
|
$results = batch(\array_map(function ($batch) use ($message, $provider, $adapter) {
|
||||||
return function () use ($batch, $messageRecord, $providerRecord, $provider) {
|
return function () use ($batch, $message, $provider, $adapter) {
|
||||||
$deliveredTo = 0;
|
$deliveredTo = 0;
|
||||||
$deliveryErrors = [];
|
$deliveryErrors = [];
|
||||||
$messageData = clone $messageRecord;
|
$messageData = clone $message;
|
||||||
$messageData->setAttribute('to', $batch);
|
$messageData->setAttribute('to', $batch);
|
||||||
$message = match ($providerRecord->getAttribute('type')) {
|
$data = match ($provider->getAttribute('type')) {
|
||||||
'sms' => $this->buildSMSMessage($messageData, $providerRecord),
|
'sms' => $this->buildSMSMessage($messageData, $provider),
|
||||||
'push' => $this->buildPushMessage($messageData),
|
'push' => $this->buildPushMessage($messageData),
|
||||||
'email' => $this->buildEmailMessage($messageData, $providerRecord),
|
'email' => $this->buildEmailMessage($messageData, $provider),
|
||||||
default => throw new Exception(Exception::PROVIDER_INCORRECT_TYPE)
|
default => throw new Exception(Exception::PROVIDER_INCORRECT_TYPE)
|
||||||
};
|
};
|
||||||
try {
|
try {
|
||||||
$provider->send($message);
|
$adapter->send($data);
|
||||||
$deliveredTo += \count($batch);
|
$deliveredTo += \count($batch);
|
||||||
} catch (\Exception $e) {
|
} catch (\Exception $e) {
|
||||||
foreach ($batch as $identifier) {
|
foreach ($batch as $identifier) {
|
||||||
|
@ -133,28 +135,28 @@ class MessagingV1 extends Worker
|
||||||
$deliveredTo += $result['deliveredTo'];
|
$deliveredTo += $result['deliveredTo'];
|
||||||
$deliveryErrors = \array_merge($deliveryErrors, $result['deliveryErrors']);
|
$deliveryErrors = \array_merge($deliveryErrors, $result['deliveryErrors']);
|
||||||
}
|
}
|
||||||
$messageRecord->setAttribute('deliveryErrors', $deliveryErrors);
|
$message->setAttribute('deliveryErrors', $deliveryErrors);
|
||||||
|
|
||||||
if (\count($messageRecord->getAttribute('deliveryErrors')) > 0) {
|
if (\count($message->getAttribute('deliveryErrors')) > 0) {
|
||||||
$messageRecord->setAttribute('status', 'failed');
|
$message->setAttribute('status', 'failed');
|
||||||
} else {
|
} else {
|
||||||
$messageRecord->setAttribute('status', 'sent');
|
$message->setAttribute('status', 'sent');
|
||||||
}
|
}
|
||||||
$messageRecord->setAttribute('to', $recipientsId);
|
$message->setAttribute('to', $recipientsId);
|
||||||
$messageRecord->setAttribute('deliveredTo', $deliveredTo);
|
$message->setAttribute('deliveredTo', $deliveredTo);
|
||||||
$messageRecord->setAttribute('deliveryTime', DateTime::now());
|
$message->setAttribute('deliveredAt', DateTime::now());
|
||||||
|
|
||||||
$this->dbForProject->updateDocument('messages', $messageRecord->getId(), $messageRecord);
|
$this->dbForProject->updateDocument('messages', $message->getId(), $message);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function shutdown(): void
|
public function shutdown(): void
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
private function sms(Document $document): ?SMSAdapter
|
private function sms(Document $provider): ?SMSAdapter
|
||||||
{
|
{
|
||||||
$credentials = $document->getAttribute('credentials');
|
$credentials = $provider->getAttribute('credentials');
|
||||||
return match ($document->getAttribute('provider')) {
|
return match ($provider->getAttribute('provider')) {
|
||||||
'mock' => new Mock('username', 'password'),
|
'mock' => new Mock('username', 'password'),
|
||||||
'twilio' => new Twilio($credentials['accountSid'], $credentials['authToken']),
|
'twilio' => new Twilio($credentials['accountSid'], $credentials['authToken']),
|
||||||
'text-magic' => new TextMagic($credentials['username'], $credentials['apiKey']),
|
'text-magic' => new TextMagic($credentials['username'], $credentials['apiKey']),
|
||||||
|
@ -165,10 +167,10 @@ class MessagingV1 extends Worker
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
private function push(Document $document): ?PushAdapter
|
private function push(Document $provider): ?PushAdapter
|
||||||
{
|
{
|
||||||
$credentials = $document->getAttribute('credentials');
|
$credentials = $provider->getAttribute('credentials');
|
||||||
return match ($document->getAttribute('provider')) {
|
return match ($provider->getAttribute('provider')) {
|
||||||
'apns' => new APNS(
|
'apns' => new APNS(
|
||||||
$credentials['authKey'],
|
$credentials['authKey'],
|
||||||
$credentials['authKeyId'],
|
$credentials['authKeyId'],
|
||||||
|
@ -181,10 +183,10 @@ class MessagingV1 extends Worker
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
private function email(Document $document): ?EmailAdapter
|
private function email(Document $provider): ?EmailAdapter
|
||||||
{
|
{
|
||||||
$credentials = $document->getAttribute('credentials');
|
$credentials = $provider->getAttribute('credentials');
|
||||||
return match ($document->getAttribute('provider')) {
|
return match ($provider->getAttribute('provider')) {
|
||||||
'mailgun' => new Mailgun($credentials['apiKey'], $credentials['domain'], $credentials['isEuRegion']),
|
'mailgun' => new Mailgun($credentials['apiKey'], $credentials['domain'], $credentials['isEuRegion']),
|
||||||
'sendgrid' => new SendGrid($credentials['apiKey']),
|
'sendgrid' => new SendGrid($credentials['apiKey']),
|
||||||
default => null
|
default => null
|
||||||
|
|
|
@ -32,11 +32,18 @@ class Message extends Any
|
||||||
])
|
])
|
||||||
->addRule('deliveryTime', [
|
->addRule('deliveryTime', [
|
||||||
'type' => self::TYPE_DATETIME,
|
'type' => self::TYPE_DATETIME,
|
||||||
'description' => 'Time the message is delivered at.',
|
'description' => 'The scheduled time for message.',
|
||||||
'required' => false,
|
'required' => false,
|
||||||
'default' => DateTime::now(),
|
'default' => DateTime::now(),
|
||||||
'example' => self::TYPE_DATETIME_EXAMPLE,
|
'example' => self::TYPE_DATETIME_EXAMPLE,
|
||||||
])
|
])
|
||||||
|
->addRule('deliveredAt', [
|
||||||
|
'type' => self::TYPE_DATETIME,
|
||||||
|
'description' => 'The time when the message was delivered.',
|
||||||
|
'required' => false,
|
||||||
|
'default' => '',
|
||||||
|
'example' => self::TYPE_DATETIME_EXAMPLE,
|
||||||
|
])
|
||||||
->addRule('deliveryErrors', [
|
->addRule('deliveryErrors', [
|
||||||
'type' => self::TYPE_STRING,
|
'type' => self::TYPE_STRING,
|
||||||
'description' => 'Delivery errors if any.',
|
'description' => 'Delivery errors if any.',
|
||||||
|
|
|
@ -1823,8 +1823,8 @@ trait Base
|
||||||
}
|
}
|
||||||
}';
|
}';
|
||||||
case self::$GET_PROVIDER:
|
case self::$GET_PROVIDER:
|
||||||
return 'query getProvider($id: String!) {
|
return 'query getProvider($providerId: String!) {
|
||||||
messagingGetProvider(id: $id) {
|
messagingGetProvider(providerId: $providerId) {
|
||||||
_id
|
_id
|
||||||
name
|
name
|
||||||
provider
|
provider
|
||||||
|
@ -1834,8 +1834,8 @@ trait Base
|
||||||
}
|
}
|
||||||
}';
|
}';
|
||||||
case self::$UPDATE_MAILGUN_PROVIDER:
|
case self::$UPDATE_MAILGUN_PROVIDER:
|
||||||
return 'mutation updateMailgunProvider($id: String!, $name: String!, $domain: String!, $apiKey: String!, $isEuRegion: Boolean, $enabled: Boolean) {
|
return 'mutation updateMailgunProvider($providerId: String!, $name: String!, $domain: String!, $apiKey: String!, $isEuRegion: Boolean, $enabled: Boolean) {
|
||||||
messagingUpdateMailgunProvider(id: $id, name: $name, domain: $domain, apiKey: $apiKey, isEuRegion: $isEuRegion, enabled: $enabled) {
|
messagingUpdateMailgunProvider(providerId: $providerId, name: $name, domain: $domain, apiKey: $apiKey, isEuRegion: $isEuRegion, enabled: $enabled) {
|
||||||
_id
|
_id
|
||||||
name
|
name
|
||||||
provider
|
provider
|
||||||
|
@ -1845,8 +1845,8 @@ trait Base
|
||||||
}
|
}
|
||||||
}';
|
}';
|
||||||
case self::$UPDATE_SENDGRID_PROVIDER:
|
case self::$UPDATE_SENDGRID_PROVIDER:
|
||||||
return 'mutation messagingUpdateSendgridProvider($id: String!, $name: String!, $apiKey: String!) {
|
return 'mutation messagingUpdateSendgridProvider($providerId: String!, $name: String!, $apiKey: String!) {
|
||||||
messagingUpdateSendgridProvider(id: $id, name: $name, apiKey: $apiKey) {
|
messagingUpdateSendgridProvider(providerId: $providerId, name: $name, apiKey: $apiKey) {
|
||||||
_id
|
_id
|
||||||
name
|
name
|
||||||
provider
|
provider
|
||||||
|
@ -1856,8 +1856,8 @@ trait Base
|
||||||
}
|
}
|
||||||
}';
|
}';
|
||||||
case self::$UPDATE_TWILIO_PROVIDER:
|
case self::$UPDATE_TWILIO_PROVIDER:
|
||||||
return 'mutation updateTwilioProvider($id: String!, $name: String!, $accountSid: String!, $authToken: String!) {
|
return 'mutation updateTwilioProvider($providerId: String!, $name: String!, $accountSid: String!, $authToken: String!) {
|
||||||
messagingUpdateTwilioProvider(id: $id, name: $name, accountSid: $accountSid, authToken: $authToken) {
|
messagingUpdateTwilioProvider(providerId: $providerId, name: $name, accountSid: $accountSid, authToken: $authToken) {
|
||||||
_id
|
_id
|
||||||
name
|
name
|
||||||
provider
|
provider
|
||||||
|
@ -1867,8 +1867,8 @@ trait Base
|
||||||
}
|
}
|
||||||
}';
|
}';
|
||||||
case self::$UPDATE_TELESIGN_PROVIDER:
|
case self::$UPDATE_TELESIGN_PROVIDER:
|
||||||
return 'mutation updateTelesignProvider($id: String!, $name: String!, $username: String!, $password: String!) {
|
return 'mutation updateTelesignProvider($providerId: String!, $name: String!, $username: String!, $password: String!) {
|
||||||
messagingUpdateTelesignProvider(id: $id, name: $name, username: $username, password: $password) {
|
messagingUpdateTelesignProvider(providerId: $providerId, name: $name, username: $username, password: $password) {
|
||||||
_id
|
_id
|
||||||
name
|
name
|
||||||
provider
|
provider
|
||||||
|
@ -1878,8 +1878,8 @@ trait Base
|
||||||
}
|
}
|
||||||
}';
|
}';
|
||||||
case self::$UPDATE_TEXTMAGIC_PROVIDER:
|
case self::$UPDATE_TEXTMAGIC_PROVIDER:
|
||||||
return 'mutation updateTextmagicProvider($id: String!, $name: String!, $username: String!, $apiKey: String!) {
|
return 'mutation updateTextmagicProvider($providerId: String!, $name: String!, $username: String!, $apiKey: String!) {
|
||||||
messagingUpdateTextmagicProvider(id: $id, name: $name, username: $username, apiKey: $apiKey) {
|
messagingUpdateTextmagicProvider(providerId: $providerId, name: $name, username: $username, apiKey: $apiKey) {
|
||||||
_id
|
_id
|
||||||
name
|
name
|
||||||
provider
|
provider
|
||||||
|
@ -1889,8 +1889,8 @@ trait Base
|
||||||
}
|
}
|
||||||
}';
|
}';
|
||||||
case self::$UPDATE_MSG91_PROVIDER:
|
case self::$UPDATE_MSG91_PROVIDER:
|
||||||
return 'mutation updateMsg91Provider($id: String!, $name: String!, $senderId: String!, $authKey: String!) {
|
return 'mutation updateMsg91Provider($providerId: String!, $name: String!, $senderId: String!, $authKey: String!) {
|
||||||
messagingUpdateMsg91Provider(id: $id, name: $name, senderId: $senderId, authKey: $authKey) {
|
messagingUpdateMsg91Provider(providerId: $providerId, name: $name, senderId: $senderId, authKey: $authKey) {
|
||||||
_id
|
_id
|
||||||
name
|
name
|
||||||
provider
|
provider
|
||||||
|
@ -1900,8 +1900,8 @@ trait Base
|
||||||
}
|
}
|
||||||
}';
|
}';
|
||||||
case self::$UPDATE_VONAGE_PROVIDER:
|
case self::$UPDATE_VONAGE_PROVIDER:
|
||||||
return 'mutation updateVonageProvider($id: String!, $name: String!, $apiKey: String!, $apiSecret: String!) {
|
return 'mutation updateVonageProvider($providerId: String!, $name: String!, $apiKey: String!, $apiSecret: String!) {
|
||||||
messagingUpdateVonageProvider(id: $id, name: $name, apiKey: $apiKey, apiSecret: $apiSecret) {
|
messagingUpdateVonageProvider(providerId: $providerId, name: $name, apiKey: $apiKey, apiSecret: $apiSecret) {
|
||||||
_id
|
_id
|
||||||
name
|
name
|
||||||
provider
|
provider
|
||||||
|
@ -1911,8 +1911,8 @@ trait Base
|
||||||
}
|
}
|
||||||
}';
|
}';
|
||||||
case self::$UPDATE_FCM_PROVIDER:
|
case self::$UPDATE_FCM_PROVIDER:
|
||||||
return 'mutation updateFcmProvider($id: String!, $name: String!, $serverKey: String!) {
|
return 'mutation updateFcmProvider($providerId: String!, $name: String!, $serverKey: String!) {
|
||||||
messagingUpdateFcmProvider(id: $id, name: $name, serverKey: $serverKey) {
|
messagingUpdateFcmProvider(providerId: $providerId, name: $name, serverKey: $serverKey) {
|
||||||
_id
|
_id
|
||||||
name
|
name
|
||||||
provider
|
provider
|
||||||
|
@ -1922,8 +1922,8 @@ trait Base
|
||||||
}
|
}
|
||||||
}';
|
}';
|
||||||
case self::$UPDATE_APNS_PROVIDER:
|
case self::$UPDATE_APNS_PROVIDER:
|
||||||
return 'mutation updateApnsProvider($id: String!, $name: String!, $authKey: String!, $authKeyId: String!, $teamId: String!, $bundleId: String!, $endpoint: String!) {
|
return 'mutation updateApnsProvider($providerId: String!, $name: String!, $authKey: String!, $authKeyId: String!, $teamId: String!, $bundleId: String!, $endpoint: String!) {
|
||||||
messagingUpdateApnsProvider(id: $id, name: $name, authKey: $authKey, authKeyId: $authKeyId, teamId: $teamId, bundleId: $bundleId, endpoint: $endpoint) {
|
messagingUpdateApnsProvider(providerId: $providerId, name: $name, authKey: $authKey, authKeyId: $authKeyId, teamId: $teamId, bundleId: $bundleId, endpoint: $endpoint) {
|
||||||
_id
|
_id
|
||||||
name
|
name
|
||||||
provider
|
provider
|
||||||
|
@ -1933,8 +1933,8 @@ trait Base
|
||||||
}
|
}
|
||||||
}';
|
}';
|
||||||
case self::$DELETE_PROVIDER:
|
case self::$DELETE_PROVIDER:
|
||||||
return 'mutation deleteProvider($id: String!) {
|
return 'mutation deleteProvider($providerId: String!) {
|
||||||
messagingDeleteProvider(id: $id) {
|
messagingDeleteProvider(providerId: $providerId) {
|
||||||
status
|
status
|
||||||
}
|
}
|
||||||
}';
|
}';
|
||||||
|
|
|
@ -104,53 +104,53 @@ class MessagingTest extends Scope
|
||||||
{
|
{
|
||||||
$providersParams = [
|
$providersParams = [
|
||||||
'Sendgrid' => [
|
'Sendgrid' => [
|
||||||
'id' => $providers[0]['_id'],
|
'providerId' => $providers[0]['_id'],
|
||||||
'name' => 'Sengrid2',
|
'name' => 'Sengrid2',
|
||||||
'apiKey' => 'my-apikey',
|
'apiKey' => 'my-apikey',
|
||||||
],
|
],
|
||||||
'Mailgun' => [
|
'Mailgun' => [
|
||||||
'id' => $providers[1]['_id'],
|
'providerId' => $providers[1]['_id'],
|
||||||
'name' => 'Mailgun2',
|
'name' => 'Mailgun2',
|
||||||
'apiKey' => 'my-apikey',
|
'apiKey' => 'my-apikey',
|
||||||
'domain' => 'my-domain',
|
'domain' => 'my-domain',
|
||||||
],
|
],
|
||||||
'Twilio' => [
|
'Twilio' => [
|
||||||
'id' => $providers[2]['_id'],
|
'providerId' => $providers[2]['_id'],
|
||||||
'name' => 'Twilio2',
|
'name' => 'Twilio2',
|
||||||
'accountSid' => 'my-accountSid',
|
'accountSid' => 'my-accountSid',
|
||||||
'authToken' => 'my-authToken',
|
'authToken' => 'my-authToken',
|
||||||
],
|
],
|
||||||
'Telesign' => [
|
'Telesign' => [
|
||||||
'id' => $providers[3]['_id'],
|
'providerId' => $providers[3]['_id'],
|
||||||
'name' => 'Telesign2',
|
'name' => 'Telesign2',
|
||||||
'username' => 'my-username',
|
'username' => 'my-username',
|
||||||
'password' => 'my-password',
|
'password' => 'my-password',
|
||||||
],
|
],
|
||||||
'Textmagic' => [
|
'Textmagic' => [
|
||||||
'id' => $providers[4]['_id'],
|
'providerId' => $providers[4]['_id'],
|
||||||
'name' => 'Textmagic2',
|
'name' => 'Textmagic2',
|
||||||
'username' => 'my-username',
|
'username' => 'my-username',
|
||||||
'apiKey' => 'my-apikey',
|
'apiKey' => 'my-apikey',
|
||||||
],
|
],
|
||||||
'Msg91' => [
|
'Msg91' => [
|
||||||
'id' => $providers[5]['_id'],
|
'providerId' => $providers[5]['_id'],
|
||||||
'name' => 'Ms91-2',
|
'name' => 'Ms91-2',
|
||||||
'senderId' => 'my-senderid',
|
'senderId' => 'my-senderid',
|
||||||
'authKey' => 'my-authkey',
|
'authKey' => 'my-authkey',
|
||||||
],
|
],
|
||||||
'Vonage' => [
|
'Vonage' => [
|
||||||
'id' => $providers[6]['_id'],
|
'providerId' => $providers[6]['_id'],
|
||||||
'name' => 'Vonage2',
|
'name' => 'Vonage2',
|
||||||
'apiKey' => 'my-apikey',
|
'apiKey' => 'my-apikey',
|
||||||
'apiSecret' => 'my-apisecret',
|
'apiSecret' => 'my-apisecret',
|
||||||
],
|
],
|
||||||
'Fcm' => [
|
'Fcm' => [
|
||||||
'id' => $providers[7]['_id'],
|
'providerId' => $providers[7]['_id'],
|
||||||
'name' => 'FCM2',
|
'name' => 'FCM2',
|
||||||
'serverKey' => 'my-serverkey',
|
'serverKey' => 'my-serverkey',
|
||||||
],
|
],
|
||||||
'Apns' => [
|
'Apns' => [
|
||||||
'id' => $providers[8]['_id'],
|
'providerId' => $providers[8]['_id'],
|
||||||
'name' => 'APNS2',
|
'name' => 'APNS2',
|
||||||
'authKey' => 'my-authkey',
|
'authKey' => 'my-authkey',
|
||||||
'authKeyId' => 'my-authkeyid',
|
'authKeyId' => 'my-authkeyid',
|
||||||
|
@ -182,7 +182,7 @@ class MessagingTest extends Scope
|
||||||
], [
|
], [
|
||||||
'query' => $this->getQuery('update_mailgun_provider'),
|
'query' => $this->getQuery('update_mailgun_provider'),
|
||||||
'variables' => [
|
'variables' => [
|
||||||
'id' => $providers[1]['_id'],
|
'providerId' => $providers[1]['_id'],
|
||||||
'name' => 'Mailgun2',
|
'name' => 'Mailgun2',
|
||||||
'apiKey' => 'my-apikey',
|
'apiKey' => 'my-apikey',
|
||||||
'domain' => 'my-domain',
|
'domain' => 'my-domain',
|
||||||
|
@ -224,7 +224,7 @@ class MessagingTest extends Scope
|
||||||
$graphQLPayload = [
|
$graphQLPayload = [
|
||||||
'query' => $query,
|
'query' => $query,
|
||||||
'variables' => [
|
'variables' => [
|
||||||
'id' => $providers[0]['_id'],
|
'providerId' => $providers[0]['_id'],
|
||||||
]
|
]
|
||||||
];
|
];
|
||||||
$response = $this->client->call(Client::METHOD_POST, '/graphql', [
|
$response = $this->client->call(Client::METHOD_POST, '/graphql', [
|
||||||
|
@ -246,7 +246,7 @@ class MessagingTest extends Scope
|
||||||
$graphQLPayload = [
|
$graphQLPayload = [
|
||||||
'query' => $query,
|
'query' => $query,
|
||||||
'variables' => [
|
'variables' => [
|
||||||
'id' => $provider['_id'],
|
'providerId' => $provider['_id'],
|
||||||
]
|
]
|
||||||
];
|
];
|
||||||
$response = $this->client->call(Client::METHOD_POST, '/graphql', [
|
$response = $this->client->call(Client::METHOD_POST, '/graphql', [
|
||||||
|
|
Loading…
Reference in a new issue