Files
clinicpro/migrations/Version20260711120000.php
hamed 9f56f4aa08 feat(migrations): add ownership fields to doctors table for IRIMC import
- Introduced new columns: owner_status, source, source_ref, managed_by, and claimed_at to the doctors table.
- Created indexes for owner_status and source to optimize queries related to unclaimed doctors.

feat(auth): implement SystemOwnerCommand for managing system-owner user

- Added command to create, activate, and deactivate a system-owner user for IRIMC crawler.
- Ensured the user has ROLE_ADMIN to access import endpoints.
- Handled password setting and user status management within the command.
2026-07-11 08:59:36 +03:30

55 lines
1.9 KiB
PHP

<?php
declare(strict_types=1);
namespace DoctrineMigrations;
use Doctrine\DBAL\Schema\Schema;
use Doctrine\Migrations\AbstractMigration;
/**
* Doctor profile ownership for IRIMC (سازمان نظام پزشکی) import.
*
* Adds owner_status / source / source_ref / managed_by / claimed_at to `doctors`
* so imported doctors can be stored as "unclaimed" (managed by a system user)
* and later transferred to the real doctor. Existing rows become manual+claimed
* so their behavior is unchanged.
*/
final class Version20260711120000 extends AbstractMigration
{
public function getDescription(): string
{
return 'Doctor profile ownership (owner_status, source, source_ref, managed_by, claimed_at) for IRIMC import';
}
public function up(Schema $schema): void
{
$this->addSql(<<<'SQL'
ALTER TABLE doctors
ADD owner_status VARCHAR(20) NOT NULL DEFAULT 'claimed',
ADD source VARCHAR(20) NOT NULL DEFAULT 'manual',
ADD source_ref VARCHAR(100) DEFAULT NULL,
ADD managed_by INT DEFAULT NULL,
ADD claimed_at INT DEFAULT NULL
SQL);
// فیلترِ «پزشکان بدون‌مالک» و تطبیق idempotency ایمپورت بر پایهٔ (source, medical_system_code)
$this->addSql('CREATE INDEX idx_doctors_owner ON doctors (owner_status)');
$this->addSql('CREATE INDEX idx_doctors_source ON doctors (source, medical_system_code)');
}
public function down(Schema $schema): void
{
$this->addSql('DROP INDEX idx_doctors_source ON doctors');
$this->addSql('DROP INDEX idx_doctors_owner ON doctors');
$this->addSql(<<<'SQL'
ALTER TABLE doctors
DROP owner_status,
DROP source,
DROP source_ref,
DROP managed_by,
DROP claimed_at
SQL);
}
}