--liquibase formatted sql

--changeset editor:001-create-document
CREATE TABLE document (
    id          UUID PRIMARY KEY,
    title       VARCHAR(255)             NOT NULL,
    content     TEXT                     NOT NULL,
    version     BIGINT                   NOT NULL,
    created_at  TIMESTAMP WITH TIME ZONE NOT NULL,
    updated_at  TIMESTAMP WITH TIME ZONE NOT NULL
);
--rollback DROP TABLE document;

--changeset editor:002-create-document-history
CREATE TABLE document_history (
    id           BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
    document_id  UUID                     NOT NULL,
    version      BIGINT                   NOT NULL,
    title        VARCHAR(255)             NOT NULL,
    content      TEXT                     NOT NULL,
    change_type  VARCHAR(16)              NOT NULL,
    change_time  TIMESTAMP WITH TIME ZONE NOT NULL
);
--rollback DROP TABLE document_history;

--changeset editor:003-index-document-history
CREATE INDEX idx_document_history_document_id ON document_history (document_id);
--rollback DROP INDEX idx_document_history_document_id;

--changeset editor:004-history-milestone
-- Zwei Ebenen (D76): Meilensteine sind die nutzersichtbare Historie und
-- bleiben; Sync-Versionen tragen die Diffs des Live-Editings und werden nach
-- einer Weile verdichtet. Bestand ist Meilenstein - er stammt aus der Zeit
-- ohne Live-Editing und ist durchweg nutzersichtbar.
ALTER TABLE document_history ADD COLUMN milestone BOOLEAN DEFAULT TRUE NOT NULL;
CREATE INDEX idx_document_history_version ON document_history (document_id, version);
--rollback DROP INDEX idx_document_history_version;
--rollback ALTER TABLE document_history DROP COLUMN milestone;

--changeset editor:005-history-author
-- "Geaendert von" (D76): pseudonyme Kennung plus selbstgewaehlter Name. Beide
-- optional - CRUD ohne Live-Editing kennt keinen Absender.
ALTER TABLE document_history ADD COLUMN client_id VARCHAR(64);
ALTER TABLE document_history ADD COLUMN display_name VARCHAR(64);
--rollback ALTER TABLE document_history DROP COLUMN display_name;
--rollback ALTER TABLE document_history DROP COLUMN client_id;
