user profile
This commit is contained in:
@@ -8,53 +8,68 @@ class AddInviteFieldsToOrganizationUsers extends Migration
|
||||
{
|
||||
public function up()
|
||||
{
|
||||
// Добавление полей для системы приглашений
|
||||
$fields = [
|
||||
'invite_token' => [
|
||||
'type' => 'VARCHAR',
|
||||
'constraint' => 64,
|
||||
'null' => true,
|
||||
'after' => 'role',
|
||||
'comment' => 'Токен для принятия приглашения',
|
||||
],
|
||||
'invited_by' => [
|
||||
'type' => 'INT',
|
||||
'unsigned' => true,
|
||||
'null' => true,
|
||||
'after' => 'invite_token',
|
||||
'comment' => 'ID пользователя, который отправил приглашение',
|
||||
],
|
||||
'invited_at' => [
|
||||
'type' => 'DATETIME',
|
||||
'null' => true,
|
||||
'after' => 'invited_by',
|
||||
'comment' => 'Дата отправки приглашения',
|
||||
],
|
||||
'status' => [
|
||||
'type' => 'ENUM',
|
||||
'values' => ['active', 'pending', 'blocked'],
|
||||
'default' => 'pending',
|
||||
'after' => 'invited_at',
|
||||
'comment' => 'Статус участия в организации',
|
||||
],
|
||||
];
|
||||
|
||||
$this->db->simpleQuery("ALTER TABLE organization_users ADD COLUMN status ENUM('active', 'pending', 'blocked') DEFAULT 'pending' AFTER invited_at");
|
||||
$this->db->simpleQuery("ALTER TABLE organization_users ADD COLUMN invite_token VARCHAR(64) NULL AFTER role");
|
||||
$this->db->simpleQuery("ALTER TABLE organization_users ADD COLUMN invited_by INT UNSIGNED NULL AFTER invite_token");
|
||||
$this->db->simpleQuery("ALTER TABLE organization_users ADD COLUMN invited_at DATETIME NULL AFTER invited_by");
|
||||
|
||||
// Индекс для быстрого поиска по токену
|
||||
$this->db->simpleQuery("CREATE INDEX idx_org_users_token ON organization_users(invite_token)");
|
||||
// Примечание: Таблица уже создана с полями:
|
||||
// id, organization_id, user_id, role, status, joined_at, created_at
|
||||
//
|
||||
// Добавляем только недостающие поля для системы приглашений:
|
||||
// - invite_token: токен для принятия приглашения
|
||||
// - invited_by: кто отправил приглашение
|
||||
// - invited_at: когда отправлено приглашение
|
||||
|
||||
// Проверяем, существует ли уже колонка invite_token
|
||||
$fields = $this->db->getFieldData('organization_users');
|
||||
$existingFields = array_column($fields, 'name');
|
||||
|
||||
if (!in_array('invite_token', $existingFields)) {
|
||||
$this->db->simpleQuery("ALTER TABLE organization_users ADD COLUMN invite_token VARCHAR(64) NULL AFTER role");
|
||||
}
|
||||
|
||||
if (!in_array('invited_by', $existingFields)) {
|
||||
$this->db->simpleQuery("ALTER TABLE organization_users ADD COLUMN invited_by INT UNSIGNED NULL AFTER invite_token");
|
||||
}
|
||||
|
||||
if (!in_array('invited_at', $existingFields)) {
|
||||
$this->db->simpleQuery("ALTER TABLE organization_users ADD COLUMN invited_at DATETIME NULL AFTER invited_by");
|
||||
}
|
||||
|
||||
// Индекс для быстрого поиену (еска по токсли ещё нет)
|
||||
$indexes = $this->db->getIndexData('organization_users');
|
||||
$hasTokenIndex = false;
|
||||
foreach ($indexes as $index) {
|
||||
if ($index->name === 'idx_org_users_token') {
|
||||
$hasTokenIndex = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!$hasTokenIndex) {
|
||||
$this->db->simpleQuery("CREATE INDEX idx_org_users_token ON organization_users(invite_token)");
|
||||
}
|
||||
|
||||
// Изменяем поле status, чтобы включить 'pending' и установить его как значение по умолчанию
|
||||
// Используем прямой SQL для модификации ENUM
|
||||
$this->db->simpleQuery("ALTER TABLE organization_users MODIFY COLUMN status ENUM('active', 'pending', 'invited', 'blocked') NOT NULL DEFAULT 'pending'");
|
||||
}
|
||||
|
||||
public function down()
|
||||
{
|
||||
// Удаление полей и индекса при откате миграции
|
||||
$this->db->simpleQuery("DROP INDEX idx_org_users_token ON organization_users");
|
||||
$this->db->simpleQuery("ALTER TABLE organization_users DROP COLUMN invited_at");
|
||||
$this->db->simpleQuery("ALTER TABLE organization_users DROP COLUMN invited_by");
|
||||
$this->db->simpleQuery("ALTER TABLE organization_users DROP COLUMN invite_token");
|
||||
$this->db->simpleQuery("ALTER TABLE organization_users DROP COLUMN status");
|
||||
$fields = $this->db->getFieldData('organization_users');
|
||||
$existingFields = array_column($fields, 'name');
|
||||
|
||||
// Удаляем только если поля существуют
|
||||
$this->db->simpleQuery("DROP INDEX IF EXISTS idx_org_users_token ON organization_users");
|
||||
|
||||
if (in_array('invited_at', $existingFields)) {
|
||||
$this->db->simpleQuery("ALTER TABLE organization_users DROP COLUMN invited_at");
|
||||
}
|
||||
|
||||
if (in_array('invited_by', $existingFields)) {
|
||||
$this->db->simpleQuery("ALTER TABLE organization_users DROP COLUMN invited_by");
|
||||
}
|
||||
|
||||
if (in_array('invite_token', $existingFields)) {
|
||||
$this->db->simpleQuery("ALTER TABLE organization_users DROP COLUMN invite_token");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user