import type { EcLevel } from "@/lib/qr/design"; import type { QrTypeId } from "@/lib/qr/type-module"; /** Statisch oder dynamisch — bestimmt, was ein Code überhaupt kann. */ export type QrCodeMode = "static" | "dynamic"; /** * Darstellung eines gespeicherten Codes an der API-Grenze. Bewusst frei von * Server-Abhängigkeiten, damit Client-Komponenten den Typ verwenden können. */ export type QrCodeDto = { id: string; /** * Ein statischer Code trägt seinen Inhalt selbst. Er ist nur abgelegt, damit * man ihn wiederfindet und erneut herunterladen kann — Kurz-Link, Ziel und * Scan-Zähler bleiben deshalb leer. */ mode: QrCodeMode; /** Kurz-Link. Leer bei statischen Codes. */ slug: string | null; /** Frühere Kurz-Links, die weiterhin auf diesen Code führen. */ aliases: string[]; type: QrTypeId; label: string | null; data: Record; /** Die Kurz-URL, die im QR-Code steckt. Leer bei statischen Codes. */ shortUrl: string | null; /** Aktuelles Weiterleitungsziel. Leer bei statischen Codes. */ target: string; /** Lesbare Kurzfassung des Ziels. */ summary: string; design: { fgColor: string; bgColor: string; size: number; ecLevel: EcLevel; margin: number; }; scans: number; lastScanAt: string | null; createdAt: string; updatedAt: string; /** Gruppe, der der Code gehört. */ groupId: string; groupName: string | null; domainId: string; domainHostname: string | null; /** Wer ihn angelegt hat — leer bei Codes aus der Zeit ohne Anmeldung. */ createdByName: string | null; };