zenc0dr/sampurna

सम्पूर्ण

Installs: 4

Dependents: 0

Suggesters: 0

Security: 0

Stars: 1

Watchers: 1

Forks: 0

Open Issues: 0

Language:JavaScript

1.0.0 2024-11-06 09:47 UTC

This package is auto-updated.

Last update: 2025-07-06 11:29:18 UTC


README

Sampurna в индийских языках, таких как санскрит и хинди, "sampurna" (सम्पूर्ण) переводится как "полный", "совершенный" или "идеальный". Это библиотека представляет из себя микрофреймворк на базе Laravel, реализующая в одном месте весь функционал любой, сколь угодно сложной бизнес-логики. Функционал библиотеки постоянно расширяется и на данный момент это:

  • Очередь/брокер задач
  • Фоновый запуск потоков
  • Балансировка потоков
  • Расширенная система кеширования
  • Маркетплейс компонентов
  • Конструктор интерфейсов
  • Конструктор цепочек вызовов

Данная библиотека разрабатывается для того чтобы php-программисты могли тратить больше времени на реализацию бизнес-логик вместо разработки их технических аспектов. Автор https://t.me/zenc0dr будет очень рад любой помощи в дальнейшем развитии библиотеки и счастлив если она поможет кому-то потратить большое количество часов на то что действительно важно, вместо того чтобы неустанно программировать ночи напролёт (Om Namah Shivaya). ;)

Документация пока на стадии написания, кода очень много и некоторые аспекты ещё периодически меняются, так что тут описаны только самые базовые аспекты взаимодействия. Для полноценного погружения добро пожаловать в код, код написан с любовью ко всем живым существам, на сколько это было возможно в рамках Laravel и PHP, так что он довольно понятен и прозрачен.

Переменные окружения
Ключ Умолчание Описание
SAMPURNA_PHP_PATH php Указание интепретатора php
SAMPURNA_NOHUP_ENABLE false Если на хосте есть библиотека nohup то выполнение фоновых процессов более надёжно
Переменные сессии
Ключ Умолчание Описание
sampurna.log.echo null Если перевести в true то глобальный лог будет выводиться в консоль

Хранилища

В качестве системы оперативных хранилищ используется база данный sqlite, так как она имеет особенности которые наилучшим образом проявляются именно в роли динамических баз. Будем в последствии называть эти базы хранилища.

Создать хранилище (Базу sqlite)
sampurna()->vault('test_vault')->create(function ($schema) {
    $schema->create('table1', function (Blueprint $table) {
        $table->increments('id');
        $table->string('name');
    });
    $schema->create('table2', function (Blueprint $table) {
        $table->increments('id');
        $table->string('name');
        $table->string('email');
    });
});
Обновить хранилище (добавить новые таблицы или поля)
sampurna()->vault('test_vault')->update(function ($schema) {
    $schema->table('table2', function (Blueprint $table) {
        $table->integer('count')->default(0)->after('name');
    });
});

Разница между функциями vault()->create и vault()->update только в том что в случае create база данных полностью удаляется и создаётся заново. Больше никаких отличий, далее создание и изменение структуры базы зависит от $schema (Schema::connection)

Сделать запрос в хранилище
# Получим экземпляр хранилища
$vault = sampurna()->vault('waterway');

# Получить экземпляр
$vault->query('ships', 123); # Ниже тоде самое
$vault->query('ships')>find(123);
$vault->query('ships', 'g5nhj-fnnd3-ddfnsc', 'uuid'); # Ниже тоде самое
$vault->query('ships')->where('uuid', 'g5nhj-fnnd3-ddfnsc')->first();

# Добавить запись
$vault->query('ships')->insert([
    'id' => $ship_id,
    'name' => $ship_name,
]);

Это обычная обёртка над QueryBuilder и работа происходит с базой SQLite с именем waterway (storage/sampurna_vault/vaults/waterway)

Юниты

Описания (манифесты) юнитов находятся в папке заданной в config/sampurna.php + /units Например манифест storage/sampurna_vault/units/azimut.waterway.json

{
    "name": "Любое имя юнита",
    "desc": "Тут можно описать что делает юнит",
    "call": "App.Services.Parsers.Waterway.WaterwayParser.dispatcher",
}
Таблица свойств манифеста юнита
Свойство Обязательно описание Пример
name да Имя юнита
stack нет
desc да Описание юнита
call да Вызов юнита App.Services.Parsers.Waterway.WaterwayParser.dispatcher
attempts_max нет Максимальное количество попыток
attempts_pause нет Пауза в секундах между попытками

^unit-manifest-table

Artisan команды (документация в процессе обновления)

Создать новый стэк
php artisan sampurna:stack create --uuid="test.stack" --name="Тестовый стек"
Вывести список стэков
php artisan sampurna:stack list
Запустить юнита из очереди
php artisan sampurna:unit run --uuid=unit1:0