Привет, Хабр! Меня зовут Екатерина Саяпина, я Product Owner личного кабинета платформы МТС Exolve. В этом посте расскажу, как встроить систему приглашений в приложение с помощью Laravel и GraphQL. Эту задачу можно выполнить не только по привычным каналам вроде email, но и через SMS API. Мы разберем процесс интеграции от создания модели на Laravel и работы с GraphQL до отправки сообщений через API Exolve.
Система приглашений — это еще один вариант взаимодействия, когда пользователи могут отправить кому-нибудь из вашего приложения уникальный код или ссылку. Например, вы разрабатываете социальную платформу или продукт и хотите, чтобы люди делились ключами для него. Такая система улучшает пользовательский опыт и может повысить качество ваших сервисов.
Laravel — мощный инструмент для создания бекенда
Laravel давно зарекомендовал себя как отличный фреймворк для PHP-разработчиков. У него удобный синтаксис, четкая структура кода и огромное количество встроенных возможностей — все это делает его идеальным выбором для создания API у приложений. В нашем кейсе задействуем маршруты, контроллеры, модели и интеграцию с GraphQL.
Также в проекте мы будем использовать GraphQL: в отличие от традиционного REST API, он позволяет получить ровно те данные, которые нам нужны, без избыточных данных. Мы применим GraphQL для взаимодействия между нашим клиентом и сервером, чтобы передавать информацию о приглашениях и пользователях. Запросы через GraphQL более гибкие и мощные, а их настройка под Laravel проста и логична.
Шаг 1: Настраиваем Laravel
Предположим, что вы уже знакомы с основами установки Laravel и работой с миграциями и моделями. Мы пропустим базовые шаги и сразу перейдем к созданию модели для приглашений. Для тех, у кого не было опыта работы с Laravel, у проекта есть гайд для быстрого старта в официальной документации.
Модель Invite будет содержать поля для хранения информации об отправителе, о получателе, а также о статусе приглашения. Для начала создадим миграцию:
php artisan make:model Invite -m
Добавляем в нее поля:
Schema::create('invites', function (Blueprint $table) { $table->id(); $table->foreignId('sender_id')->constrained('users')->onDelete('cascade'); $table->string('invitee_phone'); $table->string('invite_code')->unique(); $table->enum('status', ['pending', 'accepted', 'declined'])->default('pending'); $table->timestamps(); });
Теперь у нас есть основа, которая позволит хранить информацию о приглашениях. Это важно, потому что далее мы будем работать с этой моделью, чтобы создавать и отправлять сообщения.
Шаг 2: GraphQL-запросы для приглашений
Теперь, когда у нас есть модель, необходимо интегрировать ее с GraphQL. Если вы еще не подключили GraphQL к Laravel, рекомендую использовать библиотеку laravel-graphq — она значительно упростит жизнь.
Сначала создадим несколько мутаций, через которые будем создавать новые приглашения:
use GraphQL\Type\Definition\Type; use Rebing\GraphQL\Support\Mutation; use App\Models\Invite; class CreateInviteMutation extends Mutation { protected $attributes = [ 'name' => 'createInvite' ]; public function type(): Type { return Type::boolean(); } public function args(): array { return [ 'invitee_phone' => ['name' => 'invitee_phone', 'type' => Type::string()], ]; } public function resolve($root, $args) { $invite = Invite::create([ 'sender_id' => auth()->id(), 'invitee_phone' => $args['invitee_phone'], 'invite_code' => Str::random(10), ]); return $invite ? true : false; } }
Эта мутация добавит новую запись в таблицу приглашений и сгенерирует уникальный код, который в дальнейшем мы перешлем по SMS.
Шаг 3: Интеграция с API Exolve
Теперь самое интересное — отправка сообщений через SMS. Для этого мы будем использовать API Exolve. Если вы еще не знакомы с ним, то рекомендую обратиться к документации — там все достаточно просто и понятно.
В нашем случае нужно отправить POST-запрос с телефоном приглашенного и текстом сообщения. Чтобы это сделать, мы напишем службу, которая будет отвечать за интеграцию с Exolve API.
Создадим новый сервисный класс:
namespace App\Services; use Illuminate\Support\Facades\Http; class SmsService { protected $apiUrl = 'https://api.exolve.com/send'; public function sendInvite($phone, $message) { $response = Http::post($this->apiUrl, [ 'phone' => $phone, 'message' => $message, ]); return $response->successful(); } }
Теперь нам нужно вызывать этот сервис в момент создания приглашения, чтобы отправить его по SMS. Мы можем сделать это прямо в нашей мутации GraphQL:
use App\Services\SmsService; class CreateInviteMutation extends Mutation { public function resolve($root, $args) { $invite = Invite::create([ 'sender_id' => auth()->id(), 'invitee_phone' => $args['invitee_phone'], 'invite_code' => Str::random(10), ]); $smsService = new SmsService(); $smsService->sendInvite($args['invitee_phone'], 'Ваш код приглашения: ' . $invite->invite_code); return $invite ? true : false; } }
Как видите, это простой и удобный способ интеграции с Exolve. В этом варианте мы передаем по SMS уникальный код, но можем взять вместо него, например, ссылки.
Заключение
Интеграция системы приглашений с использованием Laravel и GraphQL — это не только функционально, но и гибко. Можно добавлять новые виды сообщений, менять логику рассылки или интегрировать другие API. В этом примере мы использовали Exolve для отправки SMS, но в целом логика универсальна и для иных схожих по сути проектов.
Надеемся, этот пример поможет упростить процесс взаимодействия с пользователями. Если вам интересна эта тема, то оставляйте вопросы в комментариях, объясню подробнее.
ссылка на оригинал статьи https://habr.com/ru/articles/847938/
Добавить комментарий