- Implemented a PHP script to import data from JSON files into the database. - Added functionality to truncate and clear existing data in relevant tables. - Inserted provinces, cities, specialties (including parent-child relationships), and doctor services from JSON files. - Updated foreign key checks and reset AUTO_INCREMENT values for relevant tables. - Added JSON files for provinces, cities, and specialties. chore(migrations): Update cities table to allow longtext for keywords - Modified the `keywords` column in the `cities` table to change its type from VARCHAR(255) to LONGTEXT.
115 lines
5.4 KiB
PHP
115 lines
5.4 KiB
PHP
<?php
|
|
declare(strict_types=1);
|
|
|
|
try {
|
|
$pdo = new PDO('mysql:host=db;dbname=db;charset=utf8mb4', 'db', 'db');
|
|
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
|
|
|
|
$base = '/var/www/html/data';
|
|
|
|
$pdo->exec('SET FOREIGN_KEY_CHECKS = 0');
|
|
$pdo->exec('SET NAMES utf8mb4');
|
|
|
|
// ── Clear dependent pivot tables ──────────────────────────────────────────
|
|
foreach (['doctor_provinces', 'doctor_cities', 'doctor_specialties', 'doctor_expertise', 'clinic_specialties', 'clinic_services', 'clinic_insurances'] as $t) {
|
|
$pdo->exec("TRUNCATE TABLE `$t`");
|
|
echo "Truncated $t\n";
|
|
}
|
|
|
|
// Clear location FKs on clinics
|
|
$pdo->exec('UPDATE clinics SET province_id = NULL, city_id = NULL');
|
|
|
|
// ── Clear main tables ─────────────────────────────────────────────────────
|
|
foreach (['doctor_services', 'specialties', 'cities', 'provinces'] as $t) {
|
|
$pdo->exec("DELETE FROM `$t`");
|
|
echo "Cleared $t\n";
|
|
}
|
|
|
|
// ── 1. Provinces ──────────────────────────────────────────────────────────
|
|
$states = json_decode(file_get_contents("$base/state.json"), true);
|
|
$stmt = $pdo->prepare(
|
|
'INSERT INTO provinces (id, uuid, name, status, weight) VALUES (?, UUID(), ?, 1, ?)'
|
|
);
|
|
foreach ($states as $i => $s) {
|
|
$stmt->execute([(int)$s['id'], $s['name'], ($i + 1) * 10]);
|
|
}
|
|
echo 'Inserted ' . count($states) . " provinces\n";
|
|
|
|
// ── 2. Cities ─────────────────────────────────────────────────────────────
|
|
$cities = json_decode(file_get_contents("$base/city.json"), true);
|
|
$stmt = $pdo->prepare(
|
|
'INSERT INTO cities (id, uuid, name, status, weight, province_id, email, slogan, domain,
|
|
description, keywords, contact_phone, social_media, footer_description)
|
|
VALUES (?, UUID(), ?, 1, 0, ?, ?, ?, ?, ?, ?, ?, ?, ?)'
|
|
);
|
|
foreach ($cities as $c) {
|
|
$social = isset($c['socialMedia']) ? json_encode($c['socialMedia'], JSON_UNESCAPED_UNICODE) : null;
|
|
$stmt->execute([
|
|
(int)$c['id'],
|
|
$c['name'],
|
|
isset($c['province_id']) ? (int)$c['province_id'] : null,
|
|
$c['email'] ?? null,
|
|
$c['slogan'] ?? null,
|
|
$c['domain'] ?? null,
|
|
$c['description'] ?? null,
|
|
$c['keywords'] ?? null,
|
|
$c['contactPhone'] ?? null,
|
|
$social,
|
|
$c['footerDescription'] ?? null,
|
|
]);
|
|
}
|
|
echo 'Inserted ' . count($cities) . " cities\n";
|
|
|
|
// ── 3. Specialties (parents first, then children) ─────────────────────────
|
|
$specialties = json_decode(file_get_contents("$base/specialties.json"), true);
|
|
$parents = array_values(array_filter($specialties, fn($s) => $s['parent'] === null));
|
|
$children = array_values(array_filter($specialties, fn($s) => $s['parent'] !== null));
|
|
|
|
$stmt = $pdo->prepare(
|
|
'INSERT INTO specialties (id, uuid, name, slug, status, weight, parent_id)
|
|
VALUES (?, UUID(), ?, ?, 1, ?, ?)'
|
|
);
|
|
foreach ($parents as $i => $s) {
|
|
$stmt->execute([(int)$s['id'], $s['name'], $s['slug'], ($i + 1) * 10, null]);
|
|
}
|
|
foreach ($children as $i => $s) {
|
|
$stmt->execute([(int)$s['id'], $s['name'], $s['slug'], ($i + 1) * 10, (int)$s['parent']]);
|
|
}
|
|
echo 'Inserted ' . count($specialties) . " specialties (" . count($parents) . " root + " . count($children) . " children)\n";
|
|
|
|
// ── 4. Doctor services ────────────────────────────────────────────────────
|
|
$services = json_decode(file_get_contents("$base/doctor_services.json"), true);
|
|
$stmt = $pdo->prepare(
|
|
'INSERT INTO doctor_services (id, uuid, name, slug, status, weight, specialty_id)
|
|
VALUES (?, UUID(), ?, ?, 1, ?, ?)'
|
|
);
|
|
foreach ($services as $i => $s) {
|
|
$stmt->execute([
|
|
(int)$s['id'],
|
|
$s['name'],
|
|
$s['slug'],
|
|
($i + 1) * 10,
|
|
isset($s['specialty_id']) ? (int)$s['specialty_id'] : null,
|
|
]);
|
|
}
|
|
echo 'Inserted ' . count($services) . " doctor_services\n";
|
|
|
|
// ── Fix AUTO_INCREMENT ────────────────────────────────────────────────────
|
|
$pdo->exec('ALTER TABLE provinces AUTO_INCREMENT = 200');
|
|
$pdo->exec('ALTER TABLE cities AUTO_INCREMENT = 2000');
|
|
$pdo->exec('ALTER TABLE specialties AUTO_INCREMENT = 500');
|
|
$pdo->exec('ALTER TABLE doctor_services AUTO_INCREMENT = 30000');
|
|
|
|
$pdo->exec('SET FOREIGN_KEY_CHECKS = 1');
|
|
|
|
echo "\nDone! Summary:\n";
|
|
foreach (['provinces', 'cities', 'specialties', 'doctor_services'] as $t) {
|
|
$cnt = $pdo->query("SELECT COUNT(*) FROM `$t`")->fetchColumn();
|
|
echo " $t: $cnt rows\n";
|
|
}
|
|
|
|
} catch (Throwable $e) {
|
|
echo 'ERROR: ' . $e->getMessage() . "\n";
|
|
exit(1);
|
|
}
|