DROP TABLE IF EXISTS kurs_user;
DROP TABLE IF EXISTS bewertungen;
DROP TABLE IF EXISTS kurs;
DROP TABLE IF EXISTS ort;
DROP TABLE IF EXISTS `user`;

-- Tabelle: user
CREATE TABLE `user`(
    id VARCHAR(36) NOT NULL UNIQUE,
    vorname VARCHAR(50) NOT NULL,
    `name` VARCHAR(50) NOT NULL,
    email VARCHAR(100) NOT NULL UNIQUE,
    passwort VARCHAR(255) NOT NULL,
    salt VARCHAR(255) NOT NULL,
    role ENUM('user', 'leiter') NOT NULL
);
-- Tabelle: ort
CREATE TABLE ort(
    id VARCHAR(36) NOT NULL UNIQUE,
    stadt VARCHAR(100) NOT NULL,
    plz VARCHAR(10) NOT NULL,
    strasse VARCHAR(100) NOT NULL
);
-- Tabelle: kurs
CREATE TABLE kurs(
    id VARCHAR(36) NOT NULL UNIQUE,
    `name` VARCHAR(100) NOT NULL,
    kategorie VARCHAR(100),
    preis DECIMAL(10, 2) NOT NULL,
    kurseleiter VARCHAR(36) NOT NULL,
    ort_id VARCHAR(36) NOT NULL,
    rabatt DECIMAL(5, 2) DEFAULT 0,
    dauer INT NOT NULL,
    beschreibung TEXT,
    FOREIGN KEY(kurseleiter) REFERENCES `user`(id),
    FOREIGN KEY(ort_id) REFERENCES ort(id)
);
-- Tabelle: kurs_user (Viele-zu-Viele-Verknüpfung)
CREATE TABLE kurs_user(
    user_id VARCHAR(36) NOT NULL,
    kurs_id VARCHAR(36) NOT NULL,
    PRIMARY KEY(user_id, kurs_id),
    FOREIGN KEY(user_id) REFERENCES `user`(id),
    FOREIGN KEY(kurs_id) REFERENCES kurs(id)
);
-- Tabelle: bewertungen
CREATE TABLE bewertungen(
    id VARCHAR(36) NOT NULL UNIQUE,
    kurs_id VARCHAR(36) NOT NULL,
    user_id VARCHAR(36) NOT NULL,
    note INT CHECK
        (note BETWEEN 1 AND 5),
        kommentar TEXT,
        FOREIGN KEY(kurs_id) REFERENCES kurs(id),
        FOREIGN KEY(user_id) REFERENCES `user`(id)
);