- 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.
172 lines
8.7 KiB
PHP
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)
|
|
);
|
|
}
|
|
}
|