71 lines
2.3 KiB
PHP
71 lines
2.3 KiB
PHP
<?php
|
|
// Simple, idempotent migration and seeding script.
|
|
|
|
require_once __DIR__ . '/config.php';
|
|
|
|
function run_migrations(PDO $pdo): void
|
|
{
|
|
$migrationsDir = __DIR__ . '/migrations';
|
|
if (!is_dir($migrationsDir)) {
|
|
echo "Migrations directory not found.\n";
|
|
return;
|
|
}
|
|
|
|
$files = glob($migrationsDir . '/*.sql');
|
|
sort($files);
|
|
|
|
foreach ($files as $file) {
|
|
echo "Running migration: " . basename($file) . "...\n";
|
|
$sql = file_get_contents($file);
|
|
if ($sql === false) {
|
|
echo "Failed to read migration file: " . basename($file) . "\n";
|
|
continue;
|
|
}
|
|
try {
|
|
$pdo->exec($sql);
|
|
echo "Success.\n";
|
|
} catch (PDOException $e) {
|
|
echo "Error running migration " . basename($file) . ": " . $e->getMessage() . "\n";
|
|
}
|
|
}
|
|
}
|
|
|
|
function seed_data(PDO $pdo): void
|
|
{
|
|
$products = [
|
|
['name' => 'Milk 1L', 'retailer' => 'Pick n Pay', 'price' => 25.99],
|
|
['name' => 'Milk 1L', 'retailer' => 'Checkers', 'price' => 24.99],
|
|
['name' => 'Bread (White)', 'retailer' => 'Pick n Pay', 'price' => 15.50],
|
|
['name' => 'Bread (White)', 'retailer' => 'Checkers', 'price' => 14.99],
|
|
['name' => 'Eggs (12 pack)', 'retailer' => 'Pick n Pay', 'price' => 32.00],
|
|
['name' => 'Eggs (12 pack)', 'retailer' => 'Checkers', 'price' => 31.50],
|
|
['name' => 'Cheese (250g)', 'retailer' => 'Pick n Pay', 'price' => 55.00],
|
|
['name' => 'Cheese (250g)', 'retailer' => 'Checkers', 'price' => 52.99],
|
|
];
|
|
|
|
$stmt = $pdo->prepare(
|
|
'INSERT INTO products (name, retailer, price) VALUES (:name, :retailer, :price)
|
|
ON DUPLICATE KEY UPDATE price = VALUES(price)'
|
|
);
|
|
|
|
echo "\nSeeding data...\n";
|
|
foreach ($products as $product) {
|
|
try {
|
|
$stmt->execute($product);
|
|
echo "Seeded/Updated: " . $product['name'] . " (" . $product['retailer'] . ")\n";
|
|
} catch (PDOException $e) {
|
|
echo "Error seeding " . $product['name'] . ": " . $e->getMessage() . "\n";
|
|
}
|
|
}
|
|
echo "Seeding complete.\n";
|
|
}
|
|
|
|
try {
|
|
$pdo = db();
|
|
run_migrations($pdo);
|
|
seed_data($pdo);
|
|
echo "\nDatabase setup complete!\n";
|
|
} catch (PDOException $e) {
|
|
die("Database connection failed: " . $e->getMessage() . "\n");
|
|
}
|