API updadte

This commit is contained in:
2025-11-09 10:15:40 +01:00
parent 5835eb15ed
commit 7548e241be
10 changed files with 156 additions and 235 deletions

View File

@@ -0,0 +1,120 @@
<?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');
}
}