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

Исправление схемы template базы данных (2 октября 2025)

Проблема

При запуске интеграционных тестов возникала критическая ошибка:

ERROR 23502 null value in column "id" of relation "users" violates not-null constraint

Корневая причина

Template база данных saga_empty_template имела устаревшую схему таблицы users БЕЗ DEFAULT значения для поля id:

-- СТАРАЯ СХЕМА (неправильная)
id uuid NOT NULL,
-- DEFAULT отсутствует!

Архитектурный контекст

Система изолированного тестирования (backend/tests/isolated_db_helper.go) создаёт копии template базы для каждого теста:

// Строка 84 в isolated_db_helper.go
createSQL := fmt.Sprintf("CREATE DATABASE %s TEMPLATE %s", dbName, templateName)

Все тестовые базы наследовали устаревшую схему от template, что приводило к массовым падениям тестов.

Решение

Исправлена схема template базы добавлением DEFAULT значения для автогенерации UUID:

ALTER TABLE users ALTER COLUMN id SET DEFAULT gen_random_uuid();

Результат

Template база теперь имеет правильную схему:

-- НОВАЯ СХЕМА (правильная)
id uuid NOT NULL DEFAULT gen_random_uuid()

Все новые тестовые базы создаются с корректной схемой.

Проверка

До исправления: - ❌ Core тесты: массовые падения с "null value in column id" - ❌ Integration тесты: те же ошибки

После исправления: - ✅ Тесты создают пользователей успешно - ✅ UUID генерируется автоматически - ✅ Больше нет ошибок constraint violation

Дальнейшие шаги

  1. ✅ Template база исправлена
  2. ⏳ Необходимо обновить устаревшие тесты (проблемы с balance/deposits API)
  3. ⏳ Исправить 20 analyzer issues (SOLID, interface{}, API types)

Техническая деталь

Основная база vs Template база

  • saga (основная) - имела правильную схему с DEFAULT ✅
  • saga_empty_template - имела устаревшую схему БЕЗ DEFAULT ❌

Тесты используют template, поэтому проблема проявлялась только при тестировании, не в production.