Перейти к содержанию

Runbook

Перезапуск сервера

# Остановить (если запущен вручную)
# Ctrl+C или kill <pid>

# Проверить зависимости и поднять
cd onewallet_base_server && dart pub get
cd onewallet_base_server && dart bin/main.dart

При Docker-деплое: docker compose restart auth-center (или соответствующий сервис).

Wallet retry вручную

Если создание TigerBeetle-кошелька не завершилось (пользователь застрял без wallet_id), фоновый вызов PendingWalletCreationCall повторяется автоматически. Для принудительного запуска вручную:

-- Найти пользователей без wallet_id
SELECT u.id, u.email, up."userId"
FROM users u
JOIN user_profile up ON up."userId" = u.id
WHERE up."walletId" IS NULL
  AND u.status = 'active';

Перезапуск сервера также перепланирует все FutureCall-и — они выполнятся в течение нескольких минут.

Unblock user

-- Разблокировать пользователя
UPDATE users SET status = 'active' WHERE id = <user_id>;

-- Зафиксировать в audit_log
INSERT INTO audit_log ("userId", action, "performedBy", details)
VALUES (<user_id>, 'user_unblock', 'operator', '{"reason": "manual"}');

Допустимые статусы: active, archived, deleted, registration_in_progress, registration_expired, kyc_pending.

Missing DB views (known issue)

Симптом: 10 integration-тестов падают с ошибкой об отсутствующей таблице/view.

Причина: Views v_tx_history и v_user_tb_accounts существуют в production-БД, но отсутствуют в тестовом контейнере (инициализируется только через Serverpod-миграции, которые views не создают).

Fix: добавить CREATE VIEW в test setup или в отдельный seed-скрипт для тестового контейнера.

-- Добавить в test/integration/test_utils/db_setup.sql (или аналог):
CREATE OR REPLACE VIEW v_tx_history AS ...;
CREATE OR REPLACE VIEW v_user_tb_accounts AS ...;

Подробнее: memory-файл project_missing_db_views_techdebt.md.

PII Key Rotation [PLAN]

Runbook не написан. Автоматической ротации нет. При ротации piiEncryptionKey требуется: - Перешифровать все PII-поля в user_profile (телефон, nationalId) - Обновить пепперы (piiPhoneHashPepper, piiNatIdHashPepper) и пересчитать хэши для поиска - Сохранить старый ключ на период перехода

Проверка здоровья

При проблемах с сервером проверить по порядку:

Компонент Как проверить
PostgreSQL psql -h 10.10.10.19 -U <user> -c "\l"
Redis redis-cli -h 10.10.10.19 ping
Payment Manager curl http://localhost:3000/health (или /api/pm/health через nginx)
Auth Center API curl http://localhost:8080/
Auth Center Web curl http://localhost:8082/
Notifications Redis Проверить notificationsRedisUrl в passwords.yaml; XLEN stream.notifications.jobs
KYC Service curl http://10.10.10.19:3003/health

Логи сервера: Serverpod пишет в stdout; в Docker — docker logs <container>.