Some checks are pending
CI / validate (push) Waiting to run
Ω-1: Text-Only-Architektur ist scharfgestellt. Code-Cleanup: - 4 Components gelöscht: ImageOcclusionEditor, ImageOcclusionView, AudioFrontView, AudioUploadField - 3 API-Module gelöscht: routes/media.ts, services/storage.ts, db/schema/media.ts (mediaRefs + mediaFiles), routes/decks-from-image.ts - packages/cards-domain: image-occlusion.ts + Tests entfernt, CardTypeSchema reduziert auf basic/basic-reverse/cloze/typing/multiple-choice - 3 Web-Routes (study/[deckId], cards/new, cards/[id]/edit) bereinigt: Image-Occlusion- und Audio-Front-Code-Pfade raus - anki/import.ts text-only: kein Media-Upload mehr, img/sound werden ersatzlos gestrippt - 21 weitere Files bereinigt: dto, health, me, dsgvo, tools, cards, decks, share-handlers, marketplace/decks, marketplace/fork, marketplace/pull-requests, AnkiImport.svelte DB-Migrationen (noch nicht gerannt, idempotent): - 0004_wordeck_text_only.sql: DELETE image-occlusion/audio (0 betroffene Rows), media_files-Tabelle DROP, media_refs-Spalte DROP, CHECK cards.type IN (basic, basic-reverse, cloze, type-in, multiple-choice) - 0005_wordeck_license_rename.sql: Cardecky-Personal-Use-1.0 → Wordeck-Personal-Use-1.0, Cardecky-Pro-Only-1.0 → Wordeck-Pro-Only-1.0, Default + CHECK + Backfill Infrastruktur: - docker-compose.production.yml: cards-minio-Service raus, MinIO-Envs aus cards-api raus, CARDS_PUBLIC_URL + PUBLIC_CARDS_API_URL auf wordeck.com / api.wordeck.com - App-Manifest schon vorher auf wordeck umgestellt Type-Check grün (api, domain, web — alle 3 Sub-Pakete). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
33 lines
940 B
TypeScript
33 lines
940 B
TypeScript
import { cards, decks } from '../db/schema/index.ts';
|
|
|
|
export function toDeckDto(row: typeof decks.$inferSelect) {
|
|
return {
|
|
id: row.id,
|
|
user_id: row.userId,
|
|
name: row.name,
|
|
description: row.description,
|
|
color: row.color,
|
|
category: row.category,
|
|
visibility: row.visibility,
|
|
fsrs_settings: row.fsrsSettings,
|
|
content_hash: row.contentHash,
|
|
forked_from_marketplace_deck_id: row.forkedFromMarketplaceDeckId,
|
|
forked_from_marketplace_version_id: row.forkedFromMarketplaceVersionId,
|
|
archived_at: row.archivedAt?.toISOString() ?? null,
|
|
created_at: row.createdAt.toISOString(),
|
|
updated_at: row.updatedAt.toISOString(),
|
|
};
|
|
}
|
|
|
|
export function toCardDto(row: typeof cards.$inferSelect) {
|
|
return {
|
|
id: row.id,
|
|
deck_id: row.deckId,
|
|
user_id: row.userId,
|
|
type: row.type,
|
|
fields: row.fields,
|
|
content_hash: row.contentHash,
|
|
created_at: row.createdAt.toISOString(),
|
|
updated_at: row.updatedAt.toISOString(),
|
|
};
|
|
}
|