fin / user-backup-lib
Библиотека PHP для резервного копирования пользовательских данных из нескольких баз данных.
Installs: 61
Dependents: 0
Suggesters: 0
Security: 0
Stars: 0
Watchers: 2
Forks: 0
Open Issues: 0
pkg:composer/fin/user-backup-lib
Requires
- php: ^8.0
- illuminate/database: ^8.0
- illuminate/support: ^8.0
This package is auto-updated.
Last update: 2025-12-26 15:12:11 UTC
README
Библиотека для резервного копирования пользовательских данных из нескольких баз данных с безопасным сохранением (стриминг + чанковое шифрование) и опциональным удалением исходных данных.
Возможности
- Стриминг без пиков памяти: чтение из БД чанками через
DatabaseService::streamUserData(), запись в файл без сборки всего JSON в памяти. - Чанковое шифрование: каждый фрагмент JSON шифруется отдельно, что позволяет работать с большими выгрузками.
- DI через интерфейсы: все сервисы объявлены через контракты и регистрируются в
UserBackupServiceProvider. - Очистка данных:
UserDataDeletionServiceудаляет связанные записи после успешного бэкапа.
Установка
composer require fin/user-backup-lib
Если доступ к packagist ограничен, укажите зеркало, например:
composer config repo.packagist composer https://repo.packagist.org
Быстрый старт
use App\Services\UserBackupService; $backup = UserBackupService::create( userId: 42, accountIds: [101, 102], activeIds: [501], ignoredTables: ['temp_logs'], connections: ['mysql', 'replica'], ); $backup->fetchAllUserData(); // собираем данные потоками $path = $backup->saveBackupToFile(); // шифруем и сохраняем, вернётся путь вида resources/backup_actives/{user}/{date}/{time}.json.enc
Очистка данных после бэкапа
use App\Services\DatabaseService; use App\Services\UserDataDeletionService; $database = new DatabaseService(['mysql', 'replica']); $cleaner = new UserDataDeletionService($database); $cleaner->deleteUserData( userId: 42, accountIds: [101, 102], activeIds: [501], ignoredTables: ['temp_logs'], );
Расшифровка файла
use App\Services\FileStorageService; $data = FileStorageService::decryptFile('resources/backup_actives/42/2024-01-01/12-00-00.json.enc');
Конфигурация
- Ключ шифрования: используется стандартный
APP_KEYLaravel. Убедитесь, что он задан. - Подключения БД: передайте массив имён подключений (
config/database.php) вUserBackupService::createили в конструкторDatabaseService. - Игнорируемые таблицы: список строк в параметре
$ignoredTables.
Тесты
composer update --no-scripts # установка зависимостей
vendor/bin/phpunit
По умолчанию используется SQLite in-memory через Orchestra Testbench.
Структура
src/Contracts/*— контракты сервисов.src/Services/DatabaseService.php— потоковое чтение из БД.src/Services/FileStorageService.php— потоковая запись/шифрование.src/Services/UserBackupService.php— координация бэкапа.src/Services/UserDataDeletionService.php— удаление данных после бэкапа.src/UserBackupServiceProvider.php— регистрации в контейнере.tests/*— интеграционные тесты (Allure-нотации включены).