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

dev-main 2025-12-13 15:31 UTC

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 API
  • VetManagerMigrator - главный класс для миграции данных
  • Services/ - сервисы импорта для каждого типа данных:
    • CityImporter
    • StreetImporter
    • ClientImporter
    • AddressImporter
    • PetImporter
  • DataExtractor - утилиты для извлечения и обработки данных из API
  • Contracts/ - интерфейсы для расширения функциональности

Требования

  • PHP >= 8.2
  • Laravel >= 11.0
  • Guzzle HTTP Client
  • otis22/vetmanager-rest-api
  • otis22/vetmanager-url

Лицензия

MIT