Как встроить систему приглашений в свое приложение с помощью Laravel и GraphQL
Привет, Хабр! Меня зовут Екатерина Саяпина, я 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, но в целом логика универсальна и для иных схожих по сути проектов.
Надеемся, этот пример поможет упростить процесс взаимодействия с пользователями. Если вам интересна эта тема, то оставляйте вопросы в комментариях, объясню подробнее.