feat: add insurance and location management
- Introduced InsuranceType enum for insurance categorization. - Created InsuranceRepository for managing insurance entities. - Developed LocationController for handling provinces and cities, including CRUD operations. - Implemented City and Province entities with necessary fields and relationships. - Added CityRepository and ProvinceRepository for database interactions. - Established Specialty management with SpecialtyController, including CRUD operations. - Created Specialty and Tag entities with appropriate fields and relationships. - Implemented TagController for managing tags, including CRUD operations. - Added TagRepository for database interactions with tags.
This commit is contained in:
@@ -0,0 +1,274 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace DoctrineMigrations;
|
||||
|
||||
use Doctrine\DBAL\Schema\Schema;
|
||||
use Doctrine\Migrations\AbstractMigration;
|
||||
|
||||
final class Version20260610103401 extends AbstractMigration
|
||||
{
|
||||
public function getDescription(): string
|
||||
{
|
||||
return 'Replace polymorphic categories table with domain-specific tables: provinces, cities, specialties, doctor_services, insurances, tags';
|
||||
}
|
||||
|
||||
public function up(Schema $schema): void
|
||||
{
|
||||
// ── 1. Create new tables ──────────────────────────────────────────────
|
||||
$this->addSql('CREATE TABLE provinces (id INT AUTO_INCREMENT NOT NULL, uuid VARCHAR(36) NOT NULL, name VARCHAR(255) NOT NULL, status SMALLINT NOT NULL, weight INT NOT NULL, UNIQUE INDEX UNIQ_8C96CC57D17F50A6 (uuid), INDEX idx_provinces_status (status), PRIMARY KEY (id)) DEFAULT CHARACTER SET utf8mb4');
|
||||
|
||||
$this->addSql('CREATE TABLE cities (id INT AUTO_INCREMENT NOT NULL, uuid VARCHAR(36) NOT NULL, name VARCHAR(255) NOT NULL, status SMALLINT NOT NULL, weight INT NOT NULL, representation_id INT DEFAULT NULL, contact_phone VARCHAR(255) DEFAULT NULL, email VARCHAR(255) DEFAULT NULL, description LONGTEXT DEFAULT NULL, slogan VARCHAR(255) DEFAULT NULL, domain VARCHAR(255) DEFAULT NULL, keywords VARCHAR(255) DEFAULT NULL, footer_description LONGTEXT DEFAULT NULL, social_media JSON DEFAULT NULL, logo_url VARCHAR(500) DEFAULT NULL, province_id INT DEFAULT NULL, UNIQUE INDEX UNIQ_D95DB16BD17F50A6 (uuid), INDEX idx_cities_province (province_id), INDEX idx_cities_status (status), INDEX idx_cities_representation (representation_id), PRIMARY KEY (id)) DEFAULT CHARACTER SET utf8mb4');
|
||||
|
||||
$this->addSql('CREATE TABLE specialties (id INT AUTO_INCREMENT NOT NULL, uuid VARCHAR(36) NOT NULL, name VARCHAR(255) NOT NULL, slug VARCHAR(255) NOT NULL, status SMALLINT NOT NULL, weight INT NOT NULL, parent_id INT DEFAULT NULL, UNIQUE INDEX UNIQ_410754B0D17F50A6 (uuid), INDEX idx_specialties_status (status), INDEX idx_specialties_parent (parent_id), UNIQUE INDEX uq_specialties_slug (slug), PRIMARY KEY (id)) DEFAULT CHARACTER SET utf8mb4');
|
||||
|
||||
$this->addSql('CREATE TABLE doctor_services (id INT AUTO_INCREMENT NOT NULL, uuid VARCHAR(36) NOT NULL, name VARCHAR(255) NOT NULL, slug VARCHAR(255) NOT NULL, status SMALLINT NOT NULL, weight INT NOT NULL, specialty_id INT DEFAULT NULL, UNIQUE INDEX UNIQ_DBC6935FD17F50A6 (uuid), INDEX idx_doctor_services_status (status), INDEX idx_doctor_services_specialty (specialty_id), UNIQUE INDEX uq_doctor_services_slug (slug), PRIMARY KEY (id)) DEFAULT CHARACTER SET utf8mb4');
|
||||
|
||||
$this->addSql('CREATE TABLE insurances (id INT AUTO_INCREMENT NOT NULL, uuid VARCHAR(36) NOT NULL, name VARCHAR(255) NOT NULL, type VARCHAR(20) NOT NULL, logo_url VARCHAR(500) DEFAULT NULL, status SMALLINT NOT NULL, UNIQUE INDEX UNIQ_6400CC1FD17F50A6 (uuid), INDEX idx_insurances_type (type), INDEX idx_insurances_status (status), PRIMARY KEY (id)) DEFAULT CHARACTER SET utf8mb4');
|
||||
|
||||
$this->addSql('CREATE TABLE tags (id INT AUTO_INCREMENT NOT NULL, uuid VARCHAR(36) NOT NULL, name VARCHAR(255) NOT NULL, slug VARCHAR(255) NOT NULL, status SMALLINT NOT NULL, UNIQUE INDEX UNIQ_6FBC9426D17F50A6 (uuid), INDEX idx_tags_status (status), UNIQUE INDEX uq_tags_slug (slug), PRIMARY KEY (id)) DEFAULT CHARACTER SET utf8mb4');
|
||||
|
||||
$this->addSql('CREATE TABLE doctor_provinces (doctor_id INT NOT NULL, province_id INT NOT NULL, INDEX IDX_4384ADBC87F4FB17 (doctor_id), INDEX IDX_4384ADBCE946114A (province_id), PRIMARY KEY (doctor_id, province_id)) DEFAULT CHARACTER SET utf8mb4');
|
||||
|
||||
// ── 2. FK constraints on new tables ──────────────────────────────────
|
||||
$this->addSql('ALTER TABLE cities ADD CONSTRAINT FK_D95DB16BE946114A FOREIGN KEY (province_id) REFERENCES provinces (id)');
|
||||
$this->addSql('ALTER TABLE doctor_services ADD CONSTRAINT FK_DBC6935F9A353316 FOREIGN KEY (specialty_id) REFERENCES specialties (id) ON DELETE SET NULL');
|
||||
$this->addSql('ALTER TABLE doctor_provinces ADD CONSTRAINT FK_4384ADBC87F4FB17 FOREIGN KEY (doctor_id) REFERENCES doctors (id)');
|
||||
$this->addSql('ALTER TABLE doctor_provinces ADD CONSTRAINT FK_4384ADBCE946114A FOREIGN KEY (province_id) REFERENCES provinces (id)');
|
||||
$this->addSql('ALTER TABLE specialties ADD CONSTRAINT FK_410754B0727ACA70 FOREIGN KEY (parent_id) REFERENCES specialties (id) ON DELETE SET NULL');
|
||||
|
||||
// ── 3. Migrate data: provinces (bundle=state, IDs 1–31) ───────────────
|
||||
$this->addSql("
|
||||
INSERT INTO provinces (id, uuid, name, status, weight)
|
||||
SELECT id, UUID(), label, status, weight
|
||||
FROM categories
|
||||
WHERE bundle = 'state'
|
||||
");
|
||||
|
||||
// ── 4. Migrate data: cities (bundle=city, parent_id → province_id) ───
|
||||
$this->addSql("
|
||||
INSERT INTO cities (id, uuid, name, status, weight, province_id,
|
||||
representation_id, contact_phone, email,
|
||||
description, slogan, domain, keywords,
|
||||
footer_description, logo_url)
|
||||
SELECT id, UUID(), label, status, weight, parent_id,
|
||||
representation_id, contact_phone, email,
|
||||
description, slogan, domain, keywords,
|
||||
footer_description, logo_url
|
||||
FROM categories
|
||||
WHERE bundle = 'city'
|
||||
");
|
||||
|
||||
// ── 5. Migrate data: specialties (bundle=specially_doctor) ────────────
|
||||
$this->addSql("
|
||||
INSERT INTO specialties (id, uuid, name, slug, status, weight, parent_id)
|
||||
SELECT id, UUID(), label, CONCAT('specialty-', id), status, weight, NULL
|
||||
FROM categories
|
||||
WHERE bundle = 'specially_doctor'
|
||||
");
|
||||
|
||||
// ── 6. Migrate data: doctor_services (bundle=doctor_services) ─────────
|
||||
$this->addSql("
|
||||
INSERT INTO doctor_services (id, uuid, name, slug, status, weight, specialty_id)
|
||||
SELECT id, UUID(), label, CONCAT('service-', id), status, weight, NULL
|
||||
FROM categories
|
||||
WHERE bundle = 'doctor_services'
|
||||
");
|
||||
|
||||
// ── 7. Migrate data: insurances (basic + supplementary) ───────────────
|
||||
$this->addSql("
|
||||
INSERT INTO insurances (id, uuid, name, type, logo_url, status)
|
||||
SELECT id, UUID(), label, 'basic', logo_url, status
|
||||
FROM categories
|
||||
WHERE bundle = 'insurance_type'
|
||||
");
|
||||
$this->addSql("
|
||||
INSERT INTO insurances (id, uuid, name, type, logo_url, status)
|
||||
SELECT id, UUID(), label, 'supplementary', logo_url, status
|
||||
FROM categories
|
||||
WHERE bundle = 'supplementary_insurance'
|
||||
");
|
||||
|
||||
// ── 8. Migrate data: tags (bundle=tag) ────────────────────────────────
|
||||
$this->addSql("
|
||||
INSERT INTO tags (id, uuid, name, slug, status)
|
||||
SELECT id, UUID(), label, CONCAT('tag-', id), status
|
||||
FROM categories
|
||||
WHERE bundle = 'tag'
|
||||
");
|
||||
|
||||
// ── 9. Migrate doctor_states → doctor_provinces ───────────────────────
|
||||
$this->addSql("
|
||||
INSERT INTO doctor_provinces (doctor_id, province_id)
|
||||
SELECT doctor_id, category_id
|
||||
FROM doctor_states
|
||||
");
|
||||
|
||||
// ── 10. Drop old doctor_states table ─────────────────────────────────
|
||||
$this->addSql('ALTER TABLE doctor_states DROP FOREIGN KEY `FK_955E47C012469DE2`');
|
||||
$this->addSql('ALTER TABLE doctor_states DROP FOREIGN KEY `FK_955E47C087F4FB17`');
|
||||
$this->addSql('DROP TABLE doctor_states');
|
||||
|
||||
// ── 11. clinics: state_id → province_id ──────────────────────────────
|
||||
$this->addSql('DROP INDEX idx_clinics_state ON clinics');
|
||||
$this->addSql('ALTER TABLE clinics CHANGE state_id province_id INT DEFAULT NULL');
|
||||
$this->addSql('CREATE INDEX idx_clinics_province ON clinics (province_id)');
|
||||
|
||||
// ── 12. clinic_specialties: category_id → specialty_id ───────────────
|
||||
$this->addSql('ALTER TABLE clinic_specialties DROP FOREIGN KEY `FK_3201DD3712469DE2`');
|
||||
$this->addSql('DROP INDEX IDX_3201DD3712469DE2 ON clinic_specialties');
|
||||
$this->addSql('ALTER TABLE clinic_specialties CHANGE category_id specialty_id INT NOT NULL, DROP PRIMARY KEY, ADD PRIMARY KEY (clinic_id, specialty_id)');
|
||||
$this->addSql('ALTER TABLE clinic_specialties ADD CONSTRAINT FK_3201DD379A353316 FOREIGN KEY (specialty_id) REFERENCES specialties (id)');
|
||||
$this->addSql('CREATE INDEX IDX_3201DD379A353316 ON clinic_specialties (specialty_id)');
|
||||
|
||||
// ── 13. clinic_services: category_id → service_id ────────────────────
|
||||
$this->addSql('ALTER TABLE clinic_services DROP FOREIGN KEY `FK_C00FFAB012469DE2`');
|
||||
$this->addSql('DROP INDEX IDX_C00FFAB012469DE2 ON clinic_services');
|
||||
$this->addSql('ALTER TABLE clinic_services CHANGE category_id service_id INT NOT NULL, DROP PRIMARY KEY, ADD PRIMARY KEY (clinic_id, service_id)');
|
||||
$this->addSql('ALTER TABLE clinic_services ADD CONSTRAINT FK_C00FFAB0ED5CA9E6 FOREIGN KEY (service_id) REFERENCES doctor_services (id)');
|
||||
$this->addSql('CREATE INDEX IDX_C00FFAB0ED5CA9E6 ON clinic_services (service_id)');
|
||||
|
||||
// ── 14. clinic_insurances: category_id → insurance_id ────────────────
|
||||
$this->addSql('ALTER TABLE clinic_insurances DROP FOREIGN KEY `FK_BE9FC89812469DE2`');
|
||||
$this->addSql('DROP INDEX IDX_BE9FC89812469DE2 ON clinic_insurances');
|
||||
$this->addSql('ALTER TABLE clinic_insurances CHANGE category_id insurance_id INT NOT NULL, DROP PRIMARY KEY, ADD PRIMARY KEY (clinic_id, insurance_id)');
|
||||
$this->addSql('ALTER TABLE clinic_insurances ADD CONSTRAINT FK_BE9FC898D1E63CD1 FOREIGN KEY (insurance_id) REFERENCES insurances (id)');
|
||||
$this->addSql('CREATE INDEX IDX_BE9FC898D1E63CD1 ON clinic_insurances (insurance_id)');
|
||||
|
||||
// ── 15. doctor_insurances: category_id → insurance_id ────────────────
|
||||
$this->addSql('ALTER TABLE doctor_insurances DROP FOREIGN KEY `FK_5317E58E12469DE2`');
|
||||
$this->addSql('DROP INDEX idx_doctor_insurance_cat ON doctor_insurances');
|
||||
$this->addSql('DROP INDEX idx_doctor_insurance ON doctor_insurances');
|
||||
$this->addSql('ALTER TABLE doctor_insurances CHANGE category_id insurance_id INT NOT NULL');
|
||||
$this->addSql('ALTER TABLE doctor_insurances ADD CONSTRAINT FK_5317E58ED1E63CD1 FOREIGN KEY (insurance_id) REFERENCES insurances (id)');
|
||||
$this->addSql('CREATE INDEX idx_doctor_insurance_ins ON doctor_insurances (insurance_id)');
|
||||
$this->addSql('CREATE UNIQUE INDEX idx_doctor_insurance ON doctor_insurances (doctor_id, insurance_id)');
|
||||
|
||||
// ── 16. doctor_specialties: category_id → specialty_id ───────────────
|
||||
$this->addSql('ALTER TABLE doctor_specialties DROP FOREIGN KEY `FK_C638E04B12469DE2`');
|
||||
$this->addSql('DROP INDEX IDX_C638E04B12469DE2 ON doctor_specialties');
|
||||
$this->addSql('ALTER TABLE doctor_specialties CHANGE category_id specialty_id INT NOT NULL, DROP PRIMARY KEY, ADD PRIMARY KEY (doctor_id, specialty_id)');
|
||||
$this->addSql('ALTER TABLE doctor_specialties ADD CONSTRAINT FK_C638E04B9A353316 FOREIGN KEY (specialty_id) REFERENCES specialties (id)');
|
||||
$this->addSql('CREATE INDEX IDX_C638E04B9A353316 ON doctor_specialties (specialty_id)');
|
||||
|
||||
// ── 17. doctor_expertise: category_id → service_id ───────────────────
|
||||
$this->addSql('ALTER TABLE doctor_expertise DROP FOREIGN KEY `FK_ED88BE6012469DE2`');
|
||||
$this->addSql('DROP INDEX IDX_ED88BE6012469DE2 ON doctor_expertise');
|
||||
$this->addSql('ALTER TABLE doctor_expertise CHANGE category_id service_id INT NOT NULL, DROP PRIMARY KEY, ADD PRIMARY KEY (doctor_id, service_id)');
|
||||
$this->addSql('ALTER TABLE doctor_expertise ADD CONSTRAINT FK_ED88BE60ED5CA9E6 FOREIGN KEY (service_id) REFERENCES doctor_services (id)');
|
||||
$this->addSql('CREATE INDEX IDX_ED88BE60ED5CA9E6 ON doctor_expertise (service_id)');
|
||||
|
||||
// ── 18. doctor_cities: category_id → city_id ─────────────────────────
|
||||
$this->addSql('ALTER TABLE doctor_cities DROP FOREIGN KEY `FK_7DC181E612469DE2`');
|
||||
$this->addSql('DROP INDEX IDX_7DC181E612469DE2 ON doctor_cities');
|
||||
$this->addSql('ALTER TABLE doctor_cities CHANGE category_id city_id INT NOT NULL, DROP PRIMARY KEY, ADD PRIMARY KEY (doctor_id, city_id)');
|
||||
$this->addSql('ALTER TABLE doctor_cities ADD CONSTRAINT FK_7DC181E68BAC62AF FOREIGN KEY (city_id) REFERENCES cities (id)');
|
||||
$this->addSql('CREATE INDEX IDX_7DC181E68BAC62AF ON doctor_cities (city_id)');
|
||||
|
||||
// ── 19. Drop the categories table ─────────────────────────────────────
|
||||
$this->addSql('DROP TABLE categories');
|
||||
}
|
||||
|
||||
public function down(Schema $schema): void
|
||||
{
|
||||
// Recreate categories table
|
||||
$this->addSql("
|
||||
CREATE TABLE categories (
|
||||
id INT AUTO_INCREMENT NOT NULL,
|
||||
uuid VARCHAR(36) NOT NULL,
|
||||
bundle VARCHAR(32) NOT NULL,
|
||||
label VARCHAR(255) DEFAULT NULL,
|
||||
status SMALLINT NOT NULL,
|
||||
parent_id INT DEFAULT NULL,
|
||||
weight INT NOT NULL,
|
||||
logo_id INT DEFAULT NULL,
|
||||
title VARCHAR(255) DEFAULT NULL,
|
||||
representation_id INT DEFAULT NULL,
|
||||
contact_phone VARCHAR(255) DEFAULT NULL,
|
||||
email VARCHAR(255) DEFAULT NULL,
|
||||
description LONGTEXT DEFAULT NULL,
|
||||
slogan VARCHAR(255) DEFAULT NULL,
|
||||
domain VARCHAR(255) DEFAULT NULL,
|
||||
keywords VARCHAR(255) DEFAULT NULL,
|
||||
footer_description LONGTEXT DEFAULT NULL,
|
||||
footer_disclaimer LONGTEXT DEFAULT NULL,
|
||||
social_media LONGTEXT DEFAULT NULL,
|
||||
logo_url VARCHAR(500) DEFAULT NULL,
|
||||
UNIQUE INDEX UNIQ_D95DB16BD17F50A6 (uuid),
|
||||
INDEX idx_categories_bundle (bundle),
|
||||
INDEX idx_categories_status (status),
|
||||
INDEX idx_categories_parent (parent_id),
|
||||
PRIMARY KEY (id)
|
||||
) DEFAULT CHARACTER SET utf8mb4
|
||||
");
|
||||
|
||||
// Recreate doctor_states
|
||||
$this->addSql('CREATE TABLE doctor_states (doctor_id INT NOT NULL, category_id INT NOT NULL, INDEX IDX_955E47C012469DE2 (category_id), INDEX IDX_955E47C087F4FB17 (doctor_id), PRIMARY KEY (doctor_id, category_id)) DEFAULT CHARACTER SET utf8mb4');
|
||||
|
||||
// Restore pivot table FKs to categories
|
||||
$this->addSql('ALTER TABLE clinic_insurances DROP FOREIGN KEY FK_BE9FC898D1E63CD1');
|
||||
$this->addSql('DROP INDEX IDX_BE9FC898D1E63CD1 ON clinic_insurances');
|
||||
$this->addSql('ALTER TABLE clinic_insurances CHANGE insurance_id category_id INT NOT NULL, DROP PRIMARY KEY, ADD PRIMARY KEY (clinic_id, category_id)');
|
||||
$this->addSql('ALTER TABLE clinic_insurances ADD CONSTRAINT `FK_BE9FC89812469DE2` FOREIGN KEY (category_id) REFERENCES categories (id)');
|
||||
$this->addSql('CREATE INDEX IDX_BE9FC89812469DE2 ON clinic_insurances (category_id)');
|
||||
|
||||
$this->addSql('ALTER TABLE clinic_services DROP FOREIGN KEY FK_C00FFAB0ED5CA9E6');
|
||||
$this->addSql('DROP INDEX IDX_C00FFAB0ED5CA9E6 ON clinic_services');
|
||||
$this->addSql('ALTER TABLE clinic_services CHANGE service_id category_id INT NOT NULL, DROP PRIMARY KEY, ADD PRIMARY KEY (clinic_id, category_id)');
|
||||
$this->addSql('ALTER TABLE clinic_services ADD CONSTRAINT `FK_C00FFAB012469DE2` FOREIGN KEY (category_id) REFERENCES categories (id)');
|
||||
$this->addSql('CREATE INDEX IDX_C00FFAB012469DE2 ON clinic_services (category_id)');
|
||||
|
||||
$this->addSql('ALTER TABLE clinic_specialties DROP FOREIGN KEY FK_3201DD379A353316');
|
||||
$this->addSql('DROP INDEX IDX_3201DD379A353316 ON clinic_specialties');
|
||||
$this->addSql('ALTER TABLE clinic_specialties CHANGE specialty_id category_id INT NOT NULL, DROP PRIMARY KEY, ADD PRIMARY KEY (clinic_id, category_id)');
|
||||
$this->addSql('ALTER TABLE clinic_specialties ADD CONSTRAINT `FK_3201DD3712469DE2` FOREIGN KEY (category_id) REFERENCES categories (id)');
|
||||
$this->addSql('CREATE INDEX IDX_3201DD3712469DE2 ON clinic_specialties (category_id)');
|
||||
|
||||
$this->addSql('ALTER TABLE doctor_cities DROP FOREIGN KEY FK_7DC181E68BAC62AF');
|
||||
$this->addSql('DROP INDEX IDX_7DC181E68BAC62AF ON doctor_cities');
|
||||
$this->addSql('ALTER TABLE doctor_cities CHANGE city_id category_id INT NOT NULL, DROP PRIMARY KEY, ADD PRIMARY KEY (doctor_id, category_id)');
|
||||
$this->addSql('ALTER TABLE doctor_cities ADD CONSTRAINT `FK_7DC181E612469DE2` FOREIGN KEY (category_id) REFERENCES categories (id)');
|
||||
$this->addSql('CREATE INDEX IDX_7DC181E612469DE2 ON doctor_cities (category_id)');
|
||||
|
||||
$this->addSql('ALTER TABLE doctor_expertise DROP FOREIGN KEY FK_ED88BE60ED5CA9E6');
|
||||
$this->addSql('DROP INDEX IDX_ED88BE60ED5CA9E6 ON doctor_expertise');
|
||||
$this->addSql('ALTER TABLE doctor_expertise CHANGE service_id category_id INT NOT NULL, DROP PRIMARY KEY, ADD PRIMARY KEY (doctor_id, category_id)');
|
||||
$this->addSql('ALTER TABLE doctor_expertise ADD CONSTRAINT `FK_ED88BE6012469DE2` FOREIGN KEY (category_id) REFERENCES categories (id)');
|
||||
$this->addSql('CREATE INDEX IDX_ED88BE6012469DE2 ON doctor_expertise (category_id)');
|
||||
|
||||
$this->addSql('ALTER TABLE doctor_insurances DROP FOREIGN KEY FK_5317E58ED1E63CD1');
|
||||
$this->addSql('DROP INDEX idx_doctor_insurance_ins ON doctor_insurances');
|
||||
$this->addSql('DROP INDEX idx_doctor_insurance ON doctor_insurances');
|
||||
$this->addSql('ALTER TABLE doctor_insurances CHANGE insurance_id category_id INT NOT NULL');
|
||||
$this->addSql('ALTER TABLE doctor_insurances ADD CONSTRAINT `FK_5317E58E12469DE2` FOREIGN KEY (category_id) REFERENCES categories (id)');
|
||||
$this->addSql('CREATE INDEX idx_doctor_insurance_cat ON doctor_insurances (category_id)');
|
||||
$this->addSql('CREATE UNIQUE INDEX idx_doctor_insurance ON doctor_insurances (doctor_id, category_id)');
|
||||
|
||||
$this->addSql('ALTER TABLE doctor_specialties DROP FOREIGN KEY FK_C638E04B9A353316');
|
||||
$this->addSql('DROP INDEX IDX_C638E04B9A353316 ON doctor_specialties');
|
||||
$this->addSql('ALTER TABLE doctor_specialties CHANGE specialty_id category_id INT NOT NULL, DROP PRIMARY KEY, ADD PRIMARY KEY (doctor_id, category_id)');
|
||||
$this->addSql('ALTER TABLE doctor_specialties ADD CONSTRAINT `FK_C638E04B12469DE2` FOREIGN KEY (category_id) REFERENCES categories (id)');
|
||||
$this->addSql('CREATE INDEX IDX_C638E04B12469DE2 ON doctor_specialties (category_id)');
|
||||
|
||||
$this->addSql('DROP INDEX idx_clinics_province ON clinics');
|
||||
$this->addSql('ALTER TABLE clinics CHANGE province_id state_id INT DEFAULT NULL');
|
||||
$this->addSql('CREATE INDEX idx_clinics_state ON clinics (state_id)');
|
||||
|
||||
$this->addSql('ALTER TABLE doctor_states ADD CONSTRAINT `FK_955E47C012469DE2` FOREIGN KEY (category_id) REFERENCES categories (id)');
|
||||
$this->addSql('ALTER TABLE doctor_states ADD CONSTRAINT `FK_955E47C087F4FB17` FOREIGN KEY (doctor_id) REFERENCES doctors (id)');
|
||||
|
||||
$this->addSql('ALTER TABLE cities DROP FOREIGN KEY FK_D95DB16BE946114A');
|
||||
$this->addSql('ALTER TABLE doctor_services DROP FOREIGN KEY FK_DBC6935F9A353316');
|
||||
$this->addSql('ALTER TABLE doctor_provinces DROP FOREIGN KEY FK_4384ADBC87F4FB17');
|
||||
$this->addSql('ALTER TABLE doctor_provinces DROP FOREIGN KEY FK_4384ADBCE946114A');
|
||||
$this->addSql('ALTER TABLE specialties DROP FOREIGN KEY FK_410754B0727ACA70');
|
||||
$this->addSql('DROP TABLE cities');
|
||||
$this->addSql('DROP TABLE doctor_services');
|
||||
$this->addSql('DROP TABLE doctor_provinces');
|
||||
$this->addSql('DROP TABLE insurances');
|
||||
$this->addSql('DROP TABLE provinces');
|
||||
$this->addSql('DROP TABLE specialties');
|
||||
$this->addSql('DROP TABLE tags');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,83 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace DoctrineMigrations;
|
||||
|
||||
use Doctrine\DBAL\Schema\Schema;
|
||||
use Doctrine\Migrations\AbstractMigration;
|
||||
|
||||
/**
|
||||
* Finish categories migration:
|
||||
* - Remove orphan rows from doctor_expertise (bad test data pointing to province IDs)
|
||||
* - Add FK constraint to doctor_expertise.service_id → doctor_services
|
||||
* - Migrate doctor_cities.category_id → city_id with FK to cities
|
||||
* - Drop categories table
|
||||
*/
|
||||
final class Version20260610140853 extends AbstractMigration
|
||||
{
|
||||
public function getDescription(): string
|
||||
{
|
||||
return 'Finish categories migration: fix doctor_expertise orphans, doctor_cities → city_id, drop categories';
|
||||
}
|
||||
|
||||
public function up(Schema $schema): void
|
||||
{
|
||||
// Remove rows in doctor_expertise whose service_id doesn't exist in doctor_services
|
||||
$this->addSql('DELETE FROM doctor_expertise WHERE service_id NOT IN (SELECT id FROM doctor_services)');
|
||||
|
||||
// Add FK constraint to doctor_expertise
|
||||
$this->addSql('ALTER TABLE doctor_expertise ADD CONSTRAINT FK_ED88BE60ED5CA9E6 FOREIGN KEY (service_id) REFERENCES doctor_services (id)');
|
||||
$this->addSql('CREATE INDEX IDX_ED88BE60ED5CA9E6 ON doctor_expertise (service_id)');
|
||||
|
||||
// doctor_cities: category_id → city_id with FK to cities
|
||||
$this->addSql('DELETE FROM doctor_cities WHERE category_id NOT IN (SELECT id FROM cities)');
|
||||
$this->addSql('ALTER TABLE doctor_cities DROP FOREIGN KEY `FK_7DC181E612469DE2`');
|
||||
$this->addSql('DROP INDEX IDX_7DC181E612469DE2 ON doctor_cities');
|
||||
$this->addSql('ALTER TABLE doctor_cities CHANGE category_id city_id INT NOT NULL, DROP PRIMARY KEY, ADD PRIMARY KEY (doctor_id, city_id)');
|
||||
$this->addSql('ALTER TABLE doctor_cities ADD CONSTRAINT FK_7DC181E68BAC62AF FOREIGN KEY (city_id) REFERENCES cities (id)');
|
||||
$this->addSql('CREATE INDEX IDX_7DC181E68BAC62AF ON doctor_cities (city_id)');
|
||||
|
||||
// Drop the now-unused categories table
|
||||
$this->addSql('DROP TABLE categories');
|
||||
}
|
||||
|
||||
public function down(Schema $schema): void
|
||||
{
|
||||
$this->addSql('ALTER TABLE doctor_expertise DROP FOREIGN KEY FK_ED88BE60ED5CA9E6');
|
||||
$this->addSql('DROP INDEX IDX_ED88BE60ED5CA9E6 ON doctor_expertise');
|
||||
|
||||
$this->addSql('ALTER TABLE doctor_cities DROP FOREIGN KEY FK_7DC181E68BAC62AF');
|
||||
$this->addSql('DROP INDEX IDX_7DC181E68BAC62AF ON doctor_cities');
|
||||
$this->addSql('ALTER TABLE doctor_cities CHANGE city_id category_id INT NOT NULL, DROP PRIMARY KEY, ADD PRIMARY KEY (doctor_id, category_id)');
|
||||
|
||||
$this->addSql("
|
||||
CREATE TABLE categories (
|
||||
id INT AUTO_INCREMENT NOT NULL,
|
||||
uuid VARCHAR(36) NOT NULL,
|
||||
bundle VARCHAR(32) NOT NULL,
|
||||
label VARCHAR(255) DEFAULT NULL,
|
||||
status SMALLINT NOT NULL,
|
||||
parent_id INT DEFAULT NULL,
|
||||
weight INT NOT NULL,
|
||||
logo_id INT DEFAULT NULL,
|
||||
title VARCHAR(255) DEFAULT NULL,
|
||||
representation_id INT DEFAULT NULL,
|
||||
contact_phone VARCHAR(255) DEFAULT NULL,
|
||||
email VARCHAR(255) DEFAULT NULL,
|
||||
description LONGTEXT DEFAULT NULL,
|
||||
slogan VARCHAR(255) DEFAULT NULL,
|
||||
domain VARCHAR(255) DEFAULT NULL,
|
||||
keywords VARCHAR(255) DEFAULT NULL,
|
||||
footer_description LONGTEXT DEFAULT NULL,
|
||||
footer_disclaimer LONGTEXT DEFAULT NULL,
|
||||
social_media LONGTEXT DEFAULT NULL,
|
||||
logo_url VARCHAR(500) DEFAULT NULL,
|
||||
PRIMARY KEY (id)
|
||||
) DEFAULT CHARACTER SET utf8mb4
|
||||
");
|
||||
|
||||
$this->addSql('ALTER TABLE doctor_cities ADD CONSTRAINT `FK_7DC181E612469DE2` FOREIGN KEY (category_id) REFERENCES categories (id)');
|
||||
$this->addSql('CREATE INDEX IDX_7DC181E612469DE2 ON doctor_cities (category_id)');
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user