clqms-be/app/Database/Migrations/2026-03-12-000040_CreateTestRules.php

73 lines
3.5 KiB
PHP

<?php
namespace App\Database\Migrations;
use CodeIgniter\Database\Migration;
/**
* Replace ruledef/ruleaction with testrule schema
* Rules can now be linked to multiple tests via testrule_testsite mapping table
*/
class CreateTestRules extends Migration
{
public function up()
{
// ruledef - rule definitions (not linked to specific test)
$this->forge->addField([
'RuleID' => ['type' => 'INT', 'unsigned' => true, 'auto_increment' => true],
'RuleCode' => ['type' => 'VARCHAR', 'constraint' => 50, 'null' => false],
'RuleName' => ['type' => 'VARCHAR', 'constraint' => 100, 'null' => false],
'Description' => ['type' => 'VARCHAR', 'constraint' => 255, 'null' => true],
'EventCode' => ['type' => 'VARCHAR', 'constraint' => 50, 'null' => false],
'ConditionExpr' => ['type' => 'VARCHAR', 'constraint' => 1000, 'null' => true],
'ConditionExprCompiled' => ['type' => 'JSON', 'null' => true],
'CreateDate' => ['type' => 'DATETIME', 'null' => true],
'StartDate' => ['type' => 'DATETIME', 'null' => true],
'EndDate' => ['type' => 'DATETIME', 'null' => true],
]);
$this->forge->addKey('RuleID', true);
$this->forge->addKey('RuleCode');
$this->forge->addKey('EventCode');
$this->forge->createTable('ruledef');
// testrule - mapping table for many-to-many relationship between ruledef and tests
$this->forge->addField([
'TestRuleID' => ['type' => 'INT', 'unsigned' => true, 'auto_increment' => true],
'RuleID' => ['type' => 'INT', 'unsigned' => true, 'null' => false],
'TestSiteID' => ['type' => 'INT', 'unsigned' => true, 'null' => false],
'CreateDate' => ['type' => 'DATETIME', 'null' => true],
'EndDate' => ['type' => 'DATETIME', 'null' => true],
]);
$this->forge->addKey('TestRuleID', true);
$this->forge->addKey('RuleID');
$this->forge->addKey('TestSiteID');
$this->forge->createTable('testrule');
// Foreign keys for mapping table
$this->db->query('ALTER TABLE `testrule` ADD CONSTRAINT `fk_testrule_ruledef` FOREIGN KEY (`RuleID`) REFERENCES `ruledef`(`RuleID`) ON DELETE CASCADE ON UPDATE CASCADE');
$this->db->query('ALTER TABLE `testrule` ADD CONSTRAINT `fk_testrule_testsite` FOREIGN KEY (`TestSiteID`) REFERENCES `testdefsite`(`TestSiteID`) ON DELETE CASCADE ON UPDATE CASCADE');
// ruleaction - actions for rules
$this->forge->addField([
'RuleActionID' => ['type' => 'INT', 'unsigned' => true, 'auto_increment' => true],
'RuleID' => ['type' => 'INT', 'unsigned' => true, 'null' => false],
'ActionType' => ['type' => 'VARCHAR', 'constraint' => 50, 'null' => false],
'ActionParams' => ['type' => 'TEXT', 'null' => true],
'CreateDate' => ['type' => 'DATETIME', 'null' => true],
'EndDate' => ['type' => 'DATETIME', 'null' => true],
]);
$this->forge->addKey('RuleActionID', true);
$this->forge->addKey('RuleID');
$this->forge->createTable('ruleaction');
$this->db->query('ALTER TABLE `ruleaction` ADD CONSTRAINT `fk_ruleaction_ruledef` FOREIGN KEY (`RuleID`) REFERENCES `ruledef`(`RuleID`) ON DELETE CASCADE ON UPDATE CASCADE');
}
public function down()
{
$this->forge->dropTable('ruleaction', true);
$this->forge->dropTable('testrule', true);
$this->forge->dropTable('ruledef', true);
}
}