DATABASE_DIALECT.
Схемы таблиц
Все схемы находятся вpackages/database/src/schema/. Каждый файл описывает одну или несколько связанных таблиц.
| Файл | Таблицы |
|---|---|
users.ts | Пользователи |
sessions.ts | Сессии авторизации |
servers.ts | Minecraft серверы, моды, онлайн-игроки, боты, RCON |
shop.ts | Магазин: категории, товары, промокоды, корзины, покупки |
tickets.ts | Тикеты поддержки: категории, тикеты, сообщения |
payments.ts | Платежи |
donations.ts | Привилегии и привилегии пользователей |
permissions.ts | Права доступа привилегий и пользователей |
privilege-plans.ts | Тарифные планы привилегий |
news.ts | Новости |
notifications.ts | Уведомления и настройки уведомлений |
settings.ts | Настройки сайта (key-value) |
rules.ts | Правила сервера: разделы и пункты |
navigation.ts | Пункты навигации |
seo-meta.ts | SEO-метаданные страниц |
user-connections.ts | Подключённые аккаунты (Discord, VK и др.) |
user-devices.ts | Устройства пользователей |
user-known-locations.ts | Известные локации пользователей |
user-verification-requests.ts | Запросы верификации |
user-activity.ts | Активность пользователей |
user-balances.ts | Балансы пользователей |
user-online-stats.ts | Статистика онлайна пользователей |
user-passwords.ts | Пароли пользователей |
user-two-factor.ts | Двухфакторная аутентификация |
security-settings.ts | Настройки безопасности |
module-states.ts | Состояние модулей (вкл/выкл, настройки) |
bans.ts | Баны |
punishments.ts | Наказания, покупки разбана, интеграции |
votes.ts | Голосования: настройки и история |
hwids.ts | HWID игроков |
launcher-sessions.ts | Сессии лаунчера |
launcher-auth-requests.ts | Запросы авторизации лаунчера |
email-verification-codes.ts | Коды подтверждения email |
password-reset-tokens.ts | Токены сброса пароля |
crash-reports.ts | Краш-репорты |
admin-logs.ts | Логи действий администраторов |
Мульти-диалект
Segmenta поддерживает MySQL и PostgreSQL одновременно. Для каждой таблицы определяются две версии —xxxMysql и xxxPostgres, а активный набор схем выбирается в packages/database/src/schema/index.ts по флагу IS_POSTGRES (он вычисляется из переменной DATABASE_DIALECT в packages/database/src/config.ts):
packages/database/src/schema/builder.ts экспортирует объекты mysqlSchemaBuilder и postgresSchemaBuilder с соответствующими хелперами колонок (table, varchar, text, int, boolean, timestamp, decimal, json, serial):
При смене диалекта (
DATABASE_DIALECT) нужно заново применить схему через pnpm db:push.Команды
| Команда | Описание |
|---|---|
pnpm db:push | Применить текущую схему к БД (без миграций) |
pnpm db:generate | Сгенерировать файлы миграций |
pnpm db:migrate | Применить миграции |
pnpm db:seed | Заполнить начальные данные |
pnpm db:studio | Открыть Drizzle Studio — веб-интерфейс для БД |
pnpm db:full-reset | Полный сброс: пересоздание схемы + сидинг |
pnpm db:migrate-data | Перенос данных между диалектами (MySQL ↔ PostgreSQL) |
Работа с БД в коде
Для выполнения запросов используются функцииwithDatabase и withTransaction из @segmenta/database (packages/database/src/client.ts). Те же функции доступны в контексте tRPC через ctx.withDatabase и ctx.withTransaction. Для ветвления логики по диалекту есть matchDatabase.
Простой запрос
Транзакция
Доступ к схемам модулей
ФункцииwithDatabase и withTransaction в tRPC-контексте автоматически подмешивают схемы модулей в объект schema. Это значит, что внутри роутера модуля вы можете обращаться к своим таблицам так же, как к основным.
Сидинг
Файлpackages/database/src/seed.ts (pnpm db:seed) заполняет настройки сайта по умолчанию из defaultSettings (packages/database/src/schema/settings.ts). Существующие настройки не перезаписываются.
Полный сброс packages/database/src/scripts/full-reset.ts (pnpm db:full-reset) пересоздаёт схему, запускает базовый сид настроек, а затем вставляет демонстрационные данные: тестовых пользователей (включая администратора с правом *), серверы, привилегии и их тарифы, правила, данные форума и краш-репорты.
Параметры сидинга задаются прямо в коде указанных файлов — отдельного конфигурационного файла нет.