121 lines
4.6 KiB
PHP
121 lines
4.6 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace DoctrineMigrations;
|
|
|
|
use Doctrine\DBAL\Schema\Schema;
|
|
use Doctrine\Migrations\AbstractMigration;
|
|
|
|
/**
|
|
* Initial migration: Creates all tables and populates reference data
|
|
*/
|
|
final class Version20251109100000 extends AbstractMigration
|
|
{
|
|
public function getDescription(): string
|
|
{
|
|
return 'Initial database schema with all tables and reference data';
|
|
}
|
|
|
|
public function up(Schema $schema): void
|
|
{
|
|
// Create users table
|
|
$this->addSql('CREATE TABLE users (
|
|
id INT AUTO_INCREMENT NOT NULL,
|
|
name VARCHAR(255) NOT NULL,
|
|
email VARCHAR(255) NOT NULL,
|
|
role VARCHAR(255) NOT NULL,
|
|
created_at DATETIME NOT NULL,
|
|
api_key VARCHAR(64) NOT NULL,
|
|
UNIQUE INDEX UNIQ_1483A5E9E7927C74 (email),
|
|
UNIQUE INDEX UNIQ_1483A5E9C912ED9D (api_key),
|
|
PRIMARY KEY (id)
|
|
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ENGINE = InnoDB');
|
|
|
|
// Create bundeslaender table
|
|
$this->addSql('CREATE TABLE bundeslaender (
|
|
id INT AUTO_INCREMENT NOT NULL,
|
|
name VARCHAR(100) NOT NULL,
|
|
grunderwerbsteuer NUMERIC(4, 2) NOT NULL,
|
|
UNIQUE INDEX UNIQ_DF7DFAB25E237E06 (name),
|
|
PRIMARY KEY (id)
|
|
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ENGINE = InnoDB');
|
|
|
|
// Create heizungstypen table
|
|
$this->addSql('CREATE TABLE heizungstypen (
|
|
id INT AUTO_INCREMENT NOT NULL,
|
|
name VARCHAR(100) NOT NULL,
|
|
UNIQUE INDEX UNIQ_6161C2A65E237E06 (name),
|
|
PRIMARY KEY (id)
|
|
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ENGINE = InnoDB');
|
|
|
|
// Create immobilien table
|
|
$this->addSql('CREATE TABLE immobilien (
|
|
id INT AUTO_INCREMENT NOT NULL,
|
|
verwalter_id INT NOT NULL,
|
|
heizungstyp_id INT DEFAULT NULL,
|
|
bundesland_id INT DEFAULT NULL,
|
|
adresse VARCHAR(255) NOT NULL,
|
|
wohnflaeche INT NOT NULL,
|
|
nutzflaeche INT NOT NULL,
|
|
garage TINYINT(1) NOT NULL,
|
|
zimmer INT NOT NULL,
|
|
baujahr INT DEFAULT NULL,
|
|
typ VARCHAR(255) NOT NULL,
|
|
beschreibung LONGTEXT DEFAULT NULL,
|
|
etage INT DEFAULT NULL,
|
|
kaufpreis INT DEFAULT NULL,
|
|
abschreibungszeit INT DEFAULT NULL,
|
|
created_at DATETIME NOT NULL,
|
|
updated_at DATETIME NOT NULL,
|
|
INDEX IDX_2C789D3E5F66D3 (verwalter_id),
|
|
INDEX IDX_2C789DC1B4DB52 (heizungstyp_id),
|
|
INDEX IDX_2C789DB74FDBEB (bundesland_id),
|
|
PRIMARY KEY (id)
|
|
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ENGINE = InnoDB');
|
|
|
|
// Add foreign keys
|
|
$this->addSql('ALTER TABLE immobilien ADD CONSTRAINT FK_2C789D3E5F66D3 FOREIGN KEY (verwalter_id) REFERENCES users (id)');
|
|
$this->addSql('ALTER TABLE immobilien ADD CONSTRAINT FK_2C789DC1B4DB52 FOREIGN KEY (heizungstyp_id) REFERENCES heizungstypen (id)');
|
|
$this->addSql('ALTER TABLE immobilien ADD CONSTRAINT FK_2C789DB74FDBEB FOREIGN KEY (bundesland_id) REFERENCES bundeslaender (id)');
|
|
|
|
// Populate Bundesländer with Grunderwerbsteuer rates
|
|
$this->addSql("INSERT INTO bundeslaender (name, grunderwerbsteuer) VALUES
|
|
('Baden-Württemberg', 5.00),
|
|
('Bayern', 3.50),
|
|
('Berlin', 6.00),
|
|
('Brandenburg', 6.50),
|
|
('Bremen', 5.00),
|
|
('Hamburg', 5.50),
|
|
('Hessen', 6.00),
|
|
('Mecklenburg-Vorpommern', 6.00),
|
|
('Niedersachsen', 5.00),
|
|
('Nordrhein-Westfalen', 6.50),
|
|
('Rheinland-Pfalz', 5.00),
|
|
('Saarland', 6.50),
|
|
('Sachsen', 5.50),
|
|
('Sachsen-Anhalt', 5.00),
|
|
('Schleswig-Holstein', 6.50),
|
|
('Thüringen', 5.00)");
|
|
|
|
// Populate Heizungstypen
|
|
$this->addSql("INSERT INTO heizungstypen (name) VALUES
|
|
('Ölheizung'),
|
|
('Gasheizung'),
|
|
('Wärmepumpe'),
|
|
('Pelletheizung')");
|
|
}
|
|
|
|
public function down(Schema $schema): void
|
|
{
|
|
// Drop all tables
|
|
$this->addSql('ALTER TABLE immobilien DROP FOREIGN KEY FK_2C789D3E5F66D3');
|
|
$this->addSql('ALTER TABLE immobilien DROP FOREIGN KEY FK_2C789DC1B4DB52');
|
|
$this->addSql('ALTER TABLE immobilien DROP FOREIGN KEY FK_2C789DB74FDBEB');
|
|
$this->addSql('DROP TABLE immobilien');
|
|
$this->addSql('DROP TABLE bundeslaender');
|
|
$this->addSql('DROP TABLE heizungstypen');
|
|
$this->addSql('DROP TABLE users');
|
|
}
|
|
}
|