feat: Implement SMS sending functionality with KavehNegar and Rangineh providers
- Add SendSmsMessage class for encapsulating SMS message data. - Create KavehNegarProvider and RanginehProvider classes implementing SmsProviderInterface for sending SMS. - Implement SmsLogRepository and SmsTemplateRepository for managing SMS logs and templates. - Develop SendSmsHandler for handling SMS sending messages. - Create SmsService to manage SMS dispatching and logging. - Add UserProfileController for managing user profiles with CRUD operations. - Implement UserProfile entity and repository for user profile data management. - Update symfony.lock and bootstrap.php for project dependencies and environment setup.
This commit is contained in:
@@ -0,0 +1,61 @@
|
||||
<?php
|
||||
|
||||
namespace App\Sms\Service;
|
||||
|
||||
use App\Sms\Entity\SmsLog;
|
||||
use App\Sms\Message\SendSmsMessage;
|
||||
use App\Sms\Provider\KavehNegarProvider;
|
||||
use App\Sms\Provider\RanginehProvider;
|
||||
use App\Sms\Provider\SmsProviderInterface;
|
||||
use App\Sms\Repository\SmsLogRepository;
|
||||
use Symfony\Component\Messenger\MessageBusInterface;
|
||||
|
||||
class SmsService
|
||||
{
|
||||
private array $providers;
|
||||
|
||||
public function __construct(
|
||||
private readonly KavehNegarProvider $kavenegar,
|
||||
private readonly RanginehProvider $rangineh,
|
||||
private readonly SmsLogRepository $logRepo,
|
||||
private readonly MessageBusInterface $bus,
|
||||
) {
|
||||
$this->providers = [
|
||||
'kavenegar' => $kavenegar,
|
||||
'rangineh' => $rangineh,
|
||||
];
|
||||
}
|
||||
|
||||
public function dispatchAsync(
|
||||
string $mobile,
|
||||
string $message,
|
||||
string $provider = 'kavenegar',
|
||||
?string $templateUuid = null,
|
||||
array $templateVars = [],
|
||||
?string $templateCode = null,
|
||||
): void {
|
||||
$this->bus->dispatch(new SendSmsMessage(
|
||||
$mobile, $message, $provider, $templateUuid, $templateVars, $templateCode
|
||||
));
|
||||
}
|
||||
|
||||
public function sendNow(SendSmsMessage $msg): bool
|
||||
{
|
||||
$provider = $this->resolveProvider($msg->provider);
|
||||
|
||||
$success = ($msg->templateCode !== null)
|
||||
? $provider->sendTemplate($msg->mobile, $msg->templateCode, $msg->templateVars)
|
||||
: $provider->send($msg->mobile, $msg->message);
|
||||
|
||||
$log = new SmsLog($msg->mobile, $msg->message, $provider->getName(), $success);
|
||||
if ($msg->templateUuid) $log->setTemplateUuid($msg->templateUuid);
|
||||
$this->logRepo->save($log);
|
||||
|
||||
return $success;
|
||||
}
|
||||
|
||||
private function resolveProvider(string $name): SmsProviderInterface
|
||||
{
|
||||
return $this->providers[$name] ?? $this->kavenegar;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user