Files
clinicpro/migrations/Version20260609131304.php
T
hamed de1a78a235 feat: Implement SMS sending functionality with KavehNegar and Rangineh providers
- Add SendSmsMessage class for encapsulating SMS message data.
- Create KavehNegarProvider and RanginehProvider classes implementing SmsProviderInterface for sending SMS.
- Implement SmsLogRepository and SmsTemplateRepository for managing SMS logs and templates.
- Develop SendSmsHandler for handling SMS sending messages.
- Create SmsService to manage SMS dispatching and logging.
- Add UserProfileController for managing user profiles with CRUD operations.
- Implement UserProfile entity and repository for user profile data management.
- Update symfony.lock and bootstrap.php for project dependencies and environment setup.
2026-06-09 22:00:34 +03:30

172 lines
8.7 KiB
PHP

<?php
declare(strict_types=1);
namespace DoctrineMigrations;
use Doctrine\DBAL\Schema\Schema;
use Doctrine\Migrations\AbstractMigration;
final class Version20260609131304 extends AbstractMigration
{
public function getDescription(): string
{
return 'Create categories table with seed data';
}
public function up(Schema $schema): void
{
$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 DEFAULT 1,
parent_id INT DEFAULT NULL,
weight INT NOT NULL DEFAULT 0,
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 TEXT DEFAULT NULL,
slogan VARCHAR(255) DEFAULT NULL,
domain VARCHAR(255) DEFAULT NULL,
keywords VARCHAR(255) DEFAULT NULL,
footer_description TEXT DEFAULT NULL,
footer_disclaimer TEXT DEFAULT NULL,
social_media JSON DEFAULT NULL,
UNIQUE INDEX UNIQ_3AF346686B548B0F (uuid),
INDEX idx_categories_bundle (bundle),
INDEX idx_categories_parent (parent_id),
INDEX idx_categories_status (status, bundle),
PRIMARY KEY(id)
) DEFAULT CHARACTER SET utf8mb4 COLLATE `utf8mb4_unicode_ci`');
// States (31 provinces)
$states = [
'آذربایجان شرقی', 'آذربایجان غربی', 'اردبیل', 'اصفهان', 'البرز',
'ایلام', 'بوشهر', 'تهران', 'چهارمحال و بختیاری', 'خراسان جنوبی',
'خراسان رضوی', 'خراسان شمالی', 'خوزستان', 'زنجان', 'سمنان',
'سیستان و بلوچستان', 'فارس', 'قزوین', 'قم', 'کردستان',
'کرمان', 'کرمانشاه', 'کهگیلویه و بویراحمد', 'گلستان', 'گیلان',
'لرستان', 'مازندران', 'مرکزی', 'هرمزگان', 'همدان', 'یزد',
];
foreach ($states as $i => $label) {
$uuid = $this->genUuid();
$this->addSql("INSERT INTO categories (uuid,bundle,label,status,weight) VALUES ('{$uuid}','state','{$label}',1,".($i+1).")");
}
// Cities (major cities per province; parent_id = state row id 1..31)
$cities = [
[1,'تبریز'],[1,'مراغه'],[1,'مرند'],
[2,'ارومیه'],[2,'خوی'],[2,'مهاباد'],
[3,'اردبیل'],[3,'مشگین‌شهر'],[3,'پارس‌آباد'],
[4,'اصفهان'],[4,'کاشان'],[4,'خمینی‌شهر'],[4,'نجف‌آباد'],
[5,'کرج'],[5,'فردیس'],[5,'نظرآباد'],
[6,'ایلام'],[6,'دهلران'],[6,'آبدانان'],
[7,'بوشهر'],[7,'برازجان'],[7,'کنگان'],
[8,'تهران'],[8,'ری'],[8,'شهریار'],[8,'اسلام‌شهر'],[8,'پردیس'],
[9,'شهرکرد'],[9,'بروجن'],[9,'فارسان'],
[10,'بیرجند'],[10,'قائنات'],[10,'فردوس'],
[11,'مشهد'],[11,'نیشابور'],[11,'سبزوار'],[11,'تربت‌حیدریه'],
[12,'بجنورد'],[12,'شیروان'],[12,'اسفراین'],
[13,'اهواز'],[13,'آبادان'],[13,'خرمشهر'],[13,'دزفول'],[13,'بهبهان'],
[14,'زنجان'],[14,'ابهر'],[14,'قیدار'],
[15,'سمنان'],[15,'شاهرود'],[15,'دامغان'],
[16,'زاهدان'],[16,'چابهار'],[16,'ایرانشهر'],[16,'زابل'],
[17,'شیراز'],[17,'مرودشت'],[17,'جهرم'],[17,'فسا'],
[18,'قزوین'],[18,'تاکستان'],[18,'البرز'],
[19,'قم'],
[20,'سنندج'],[20,'سقز'],[20,'مریوان'],
[21,'کرمان'],[21,'رفسنجان'],[21,'جیرفت'],[21,'سیرجان'],
[22,'کرمانشاه'],[22,'اسلام‌آباد غرب'],[22,'سرپل‌ذهاب'],
[23,'یاسوج'],[23,'دهدشت'],[23,'گچساران'],
[24,'گرگان'],[24,'گنبدکاووس'],[24,'علی‌آباد'],
[25,'رشت'],[25,'لاهیجان'],[25,'بندرانزلی'],[25,'رودبار'],
[26,'خرم‌آباد'],[26,'بروجرد'],[26,'دورود'],
[27,'ساری'],[27,'بابل'],[27,'آمل'],[27,'قائم‌شهر'],[27,'نوشهر'],
[28,'اراک'],[28,'خمین'],[28,'ساوه'],
[29,'بندرعباس'],[29,'قشم'],[29,'کیش'],[29,'میناب'],
[30,'همدان'],[30,'ملایر'],[30,'نهاوند'],
[31,'یزد'],[31,'میبد'],[31,'اردکان'],
];
foreach ($cities as [$stateId,$label]) {
$uuid = $this->genUuid();
$this->addSql("INSERT INTO categories (uuid,bundle,label,status,parent_id,weight) VALUES ('{$uuid}','city','{$label}',1,{$stateId},0)");
}
// Medical Specialties
$specialties = [
'پزشک عمومی','قلب و عروق','مغز و اعصاب','ارتوپدی','چشم‌پزشکی',
'گوش و حلق و بینی','دندانپزشکی','زنان و زایمان','اطفال','پوست و مو',
'جراحی عمومی','داخلی','روانپزشکی','اورولوژی','فیزیوتراپی','روانشناسی',
'غدد و متابولیسم','گوارش و کبد','ریه','کلیه و مجاری ادراری',
'جراحی مغز و اعصاب','جراحی قلب','جراحی پلاستیک','تغذیه',
'طب سنتی','دندانپزشکی کودکان','ارتودنسی','پریودنتیکس',
'رادیولوژی','آزمایشگاه',
];
foreach ($specialties as $i => $label) {
$uuid = $this->genUuid();
$this->addSql("INSERT INTO categories (uuid,bundle,label,status,weight) VALUES ('{$uuid}','specially_doctor','{$label}',1,{$i})");
}
// Doctor Services
$services = [
'ویزیت حضوری','ویزیت آنلاین','نوبت آنلاین','خدمات در منزل',
'اورژانس','جراحی','آندوسکوپی','اکوکاردیوگرافی','نوار قلب (ECG)','اسپیرومتری',
];
foreach ($services as $i => $label) {
$uuid = $this->genUuid();
$this->addSql("INSERT INTO categories (uuid,bundle,label,status,weight) VALUES ('{$uuid}','doctor_services','{$label}',1,{$i})");
}
// Insurance Types
$insuranceTypes = [
'تامین اجتماعی','بیمه خدمات درمانی','بیمه ارتش',
'آزاد (بدون بیمه)','بیمه روستایی','بیمه کارمندی دولت',
];
foreach ($insuranceTypes as $i => $label) {
$uuid = $this->genUuid();
$this->addSql("INSERT INTO categories (uuid,bundle,label,status,weight) VALUES ('{$uuid}','insurance_type','{$label}',1,{$i})");
}
// Supplementary Insurance
$suppInsurances = [
'بیمه ایران','بیمه آسیا','بیمه دی','بیمه ملت','بیمه پارسیان',
'بیمه البرز','بیمه سینا','بیمه رازی','بیمه کوثر','بیمه نوین',
];
foreach ($suppInsurances as $i => $label) {
$uuid = $this->genUuid();
$this->addSql("INSERT INTO categories (uuid,bundle,label,status,weight) VALUES ('{$uuid}','supplementary_insurance','{$label}',1,{$i})");
}
// Tags
$tags = [
'سلامت','تغذیه','ورزش','بیماری‌های قلبی','دیابت',
'فشارخون','سرطان','زیبایی','کودکان','سالمندان',
];
foreach ($tags as $i => $label) {
$uuid = $this->genUuid();
$this->addSql("INSERT INTO categories (uuid,bundle,label,status,weight) VALUES ('{$uuid}','tag','{$label}',1,{$i})");
}
}
public function down(Schema $schema): void
{
$this->addSql('DROP TABLE categories');
}
private function genUuid(): string
{
return sprintf(
'%04x%04x-%04x-%04x-%04x-%04x%04x%04x',
mt_rand(0, 0xffff), mt_rand(0, 0xffff),
mt_rand(0, 0xffff),
mt_rand(0, 0x0fff) | 0x4000,
mt_rand(0, 0x3fff) | 0x8000,
mt_rand(0, 0xffff), mt_rand(0, 0xffff), mt_rand(0, 0xffff)
);
}
}