vetcore / vetmanager-migrator
Laravel package for migrating data from VetManager API to local database
Installs: 1
Dependents: 0
Suggesters: 0
Security: 0
Stars: 0
Watchers: 0
Forks: 0
Open Issues: 0
pkg:composer/vetcore/vetmanager-migrator
Requires
- php: ^8.2
- guzzlehttp/guzzle: ^7.0
- illuminate/console: ^11.0
- illuminate/support: ^11.0
- otis22/vetmanager-rest-api: ^0.1.11
- otis22/vetmanager-url: ^0.3.2
Requires (Dev)
- phpunit/phpunit: ^11.0
This package is auto-updated.
Last update: 2025-12-13 15:42:34 UTC
README
Laravel пакет для миграции данных из VetManager API в локальную базу данных.
Установка
Через Composer (локальный пакет)
Добавьте пакет в composer.json вашего проекта:
{
"repositories": [
{
"type": "path",
"url": "./packages/vetmanager-migrator"
}
],
"require": {
"vetcore/vetmanager-migrator": "@dev"
}
}
Затем выполните:
composer require vetcore/vetmanager-migrator
Публикация конфигурации
php artisan vendor:publish --tag=vetmanager-migrator-config
Конфигурация
Добавьте в ваш .env файл:
VETMANAGER_DOMAIN=your-domain.vetmanager.ru VETMANAGER_API_KEY=your-api-key VETMANAGER_TIMEOUT=30
Также вы можете настроить классы моделей через переменные окружения:
VETMANAGER_MODEL_CITY=App\Models\Main\Address\City VETMANAGER_MODEL_STREET=App\Models\Main\Address\Street VETMANAGER_MODEL_CLIENT=App\Models\Main\Client\Client VETMANAGER_MODEL_ADDRESS=App\Models\Main\Address\Address VETMANAGER_MODEL_PET=App\Models\Main\Pet\Pet
Или отредактируйте файл config/vetmanager-migrator.php после публикации.
Использование
Базовое использование
use VetCore\VetManagerMigrator\VetManagerMigrator; // Создание экземпляра (параметры берутся из конфига) $migrator = new VetManagerMigrator(); // Или с явным указанием параметров $migrator = new VetManagerMigrator('your-domain.vetmanager.ru', 'your-api-key'); // Импорт всех данных $results = $migrator->migrateAll(); // Импорт отдельных типов данных $citiesCount = $migrator->importCities(); $streetsCount = $migrator->importStreets(); $clientsCount = $migrator->importClients(); $addressesCount = $migrator->importAddresses(); $petsCount = $migrator->importPets();
Использование в Artisan команде
<?php namespace App\Console\Commands; use Illuminate\Console\Command; use VetCore\VetManagerMigrator\VetManagerMigrator; class VetManagerMigrateCommand extends Command { protected $signature = 'vetmanager:migrate {--domain= : VetManager domain name} {--api-key= : VetManager API key} {--limit= : Limit number of records to import}'; protected $description = 'Migrate data from VetManager to local database'; public function handle() { $domain = $this->option('domain') ?? config('vetmanager-migrator.domain'); $apiKey = $this->option('api-key') ?? config('vetmanager-migrator.api_key'); $limit = $this->option('limit') ? (int) $this->option('limit') : null; if (empty($domain) || empty($apiKey)) { $this->error('Domain and API key are required'); return 1; } try { $migrator = new VetManagerMigrator($domain, $apiKey); $this->info("Starting migration from VetManager: {$domain}"); $results = $migrator->migrateAll($limit, function ($message) { $this->info($message); }); $this->info('Migration completed successfully!'); $this->table( ['Type', 'Imported'], [ ['Cities', $results['cities']], ['Streets', $results['streets']], ['Clients', $results['clients']], ['Addresses', $results['addresses']], ['Pets', $results['pets']], ] ); return 0; } catch (\Exception $e) { $this->error('Migration failed: ' . $e->getMessage()); return 1; } } }
Использование клиента напрямую
use VetCore\VetManagerMigrator\VetManagerClient; $client = new VetManagerClient('your-domain.vetmanager.ru', 'your-api-key'); // Получить все города $cities = $client->getAll('city'); // Получить клиентов с лимитом $clients = $client->getAll('client', 100, 500); // Выполнить произвольный запрос $data = $client->get('pet', ['filter' => ['owner_id' => 123]]);
Использование сервисов импорта напрямую
use VetCore\VetManagerMigrator\VetManagerClient; use VetCore\VetManagerMigrator\Services\CityImporter; $client = new VetManagerClient('your-domain.vetmanager.ru', 'your-api-key'); $importer = new CityImporter('App\Models\Main\Address\City'); $count = $importer->import($client, 100);
Структура пакета
VetManagerClient- клиент для работы с VetManager APIVetManagerMigrator- главный класс для миграции данныхServices/- сервисы импорта для каждого типа данных:CityImporterStreetImporterClientImporterAddressImporterPetImporter
DataExtractor- утилиты для извлечения и обработки данных из APIContracts/- интерфейсы для расширения функциональности
Требования
- PHP >= 8.2
- Laravel >= 11.0
- Guzzle HTTP Client
- otis22/vetmanager-rest-api
- otis22/vetmanager-url
Лицензия
MIT