import Foundation /// Card-DTO. Wire-Format aus `wordeck/apps/api/src/lib/dto.ts:toCardDto` /// und `wordeck/packages/wordeck-domain/src/schemas/card.ts`. /// /// Seit Wordeck-Rebrand (2026-05-17) text-only — kein `media_refs` /// mehr im Schema. struct Card: Codable, Identifiable, Hashable { let id: String let deckId: String let userId: String let type: CardType let fields: [String: String] let contentHash: String? let createdAt: Date let updatedAt: Date enum CodingKeys: String, CodingKey { case id case deckId = "deck_id" case userId = "user_id" case type case fields case contentHash = "content_hash" case createdAt = "created_at" case updatedAt = "updated_at" } } /// Card-Type-Enum. Wordeck ist text-only (Rebrand 2026-05-17) — /// `image-occlusion` und `audio-front` sind aus dem Schema raus. enum CardType: String, Codable, CaseIterable { case basic case basicReverse = "basic-reverse" case cloze case typing case multipleChoice = "multiple-choice" } /// Vereinfachtes Card-Sub-Objekt aus `/reviews/due?deck_id=X`-Response. /// Server liefert nur 4 Felder (id, deckId, type, fields) als Drizzle- /// Joined-Subset — Achtung: `deckId` hier in **camelCase**, nicht /// snake_case wie sonst. struct ReviewCard: Codable, Hashable { let id: String let deckId: String let type: CardType let fields: [String: String] }