ContentConflictException.kt

package de.werkbaum.service

import de.werkbaum.diff.LineOp
import java.util.UUID

/**
 * Echte Überschneidung mit einer zwischenzeitlichen Änderung (409).
 *
 * Trägt alles mit, was der Client zum Weiterarbeiten braucht – ohne neu zu
 * laden: die aktuelle Version und das Diff von seiner Basis dorthin. Er zeigt
 * dann zwei Knöpfe (fremde Fassung übernehmen / eigene durchsetzen); an dieser
 * Stelle gewinnt einer vollständig, aber nichts geht endgültig verloren, denn
 * jede Version steht in der Historie.
 */
class ContentConflictException(
    val currentVersion: Long,
    val opsSinceBase: List<LineOp>,
) : RuntimeException("Überschneidung mit Version $currentVersion")

/**
 * Das Dokument ist gelöscht, seine Historie gibt es noch (404 mit Hinweis auf
 * die Wiederherstellung).
 */
class DocumentDeletedException(val id: UUID) :
    RuntimeException(
        "Dokument $id wurde gelöscht; es lässt sich über " +
            "POST /api/v1/documents/$id/restore wiederherstellen"
    )