refactor(big-bang): cards → wordeck im gesamten Code-Layer
Some checks are pending
CI / validate (push) Waiting to run
Some checks are pending
CI / validate (push) Waiting to run
Phase 2 des cards→wordeck Big-Bang-Rebrand:
- 4 package.json: @cards/* → @wordeck/*
- packages/cards-domain/ → packages/wordeck-domain/
- 41+12 Files: from '@cards/domain' → '@wordeck/domain'
- pgSchema('cards') → pgSchema('wordeck') (Drizzle-Schema)
- 17 Files: process.env.CARDS_* → process.env.WORDECK_*
- docker-compose Service-Names: cards-* → wordeck-*
- docker-compose Volume: /Volumes/ManaData/cards → wordeck
- env-vars in compose: CARDS_DB_PASSWORD/_API_VERSION/_DSGVO_SERVICE_KEY etc. → WORDECK_*
- Log-Prefixes + Error-Strings + manifest-id 'cards' → 'wordeck'
- CORS-Origin cardecky.mana.how → wordeck.com
- .env.production.example umbenannt + S3-Key entfernt (kein MinIO mehr)
Type-Check 0 Errors in api+domain+web, 51/51 Domain-Tests grün.
DB-Rename + Container/Volume-Rename auf mana-server folgen in nächstem
Commit nach Verzeichnis-Rename.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
c77100e85a
commit
372832d266
90 changed files with 213 additions and 3716 deletions
|
|
@ -6,7 +6,7 @@
|
|||
|
||||
## TL;DR
|
||||
|
||||
- **Domain-Library separieren** (`@cards/domain`, framework-agnostic)
|
||||
- **Domain-Library separieren** (`@wordeck/domain`, framework-agnostic)
|
||||
- **Card-Type als discriminated union** mit `fields: Record<string,string>` + `subIndex`-Granularität
|
||||
- **FSRS via `ts-fsrs` v5.3.2** in dünnem Adapter, Reviews bleiben PLAINTEXT
|
||||
- **Markdown-Editor**, kein Rich-Text/WYSIWYG
|
||||
|
|
@ -24,7 +24,7 @@ mana-monorepo hat `packages/cards-core/` mit Pure-TS:
|
|||
- Keine Dexie-, Sync-, oder UI-Abhängigkeiten
|
||||
- Konsumiert von App-UI-Modul UND von `services/cards-server`
|
||||
|
||||
→ **Bei uns:** `packages/cards-domain/` analog. Bewusst kein `@cards/core` (Name-Konflikt), sondern `@cards/domain`. Steht.
|
||||
→ **Bei uns:** `packages/cards-domain/` analog. Bewusst kein `@cards/core` (Name-Konflikt), sondern `@wordeck/domain`. Steht.
|
||||
|
||||
## 2. Card-Type-Modell
|
||||
|
||||
|
|
@ -154,7 +154,7 @@ mana-monorepos `(app)/cards/`-Routen:
|
|||
|
||||
mana-monorepo nutzt `@mana/shared-privacy` mit `VisibilityLevel = 'private' | 'space' | 'public'`. Bei Änderungen wird `visibilityChangedAt` + `visibilityChangedBy` getrackt.
|
||||
|
||||
→ **Bei uns:** Gleiches Enum als TypeScript-Type in `@cards/domain`. Audit-Felder optional ab Phase 9 (DSGVO-Polish).
|
||||
→ **Bei uns:** Gleiches Enum als TypeScript-Type in `@wordeck/domain`. Audit-Felder optional ab Phase 9 (DSGVO-Polish).
|
||||
|
||||
## 13. Tests mit fake-indexeddb
|
||||
|
||||
|
|
@ -185,7 +185,7 @@ mana-monorepos Marketplace hat content-hash auf jeder Karte + jedem Deck-Version
|
|||
|
||||
## 5 Kern-Entscheidungen für unser Greenfield
|
||||
|
||||
1. **`@cards/domain` als Pure-TS-Workspace-Package** — keine Framework-Bindings
|
||||
1. **`@wordeck/domain` als Pure-TS-Workspace-Package** — keine Framework-Bindings
|
||||
2. **Card-Type discriminated union mit `fields`-Slot + `subIndex`-Granularität** — auch wenn MVP nur basic-Karten hat
|
||||
3. **`ts-fsrs` v5.3.2 hinter dünnem Adapter** — Reviews plaintext, indiziert auf `due`
|
||||
4. **Cloze als Token-Parser, wenn implementiert** — Anki-kompatible Syntax
|
||||
|
|
|
|||
|
|
@ -103,7 +103,7 @@ export class PullRequestService {
|
|||
}
|
||||
|
||||
private deckUrl(slug: string): string {
|
||||
const base = process.env.CARDS_WEB_URL || 'https://cardecky.mana.how';
|
||||
const base = process.env.WORDECK_WEB_URL || 'https://cardecky.mana.how';
|
||||
return `${base}/d/${slug}`;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -160,13 +160,13 @@ mit drei Anpassungen:
|
|||
echte mana-auth-Login-Flow ausgerollt ist (siehe `STATUS.md`),
|
||||
weicht der Stub für `@mana/shared-auth`.
|
||||
|
||||
### 5. Hash-Implementierung: bestehende `@cards/domain` benutzen
|
||||
### 5. Hash-Implementierung: bestehende `@wordeck/domain` benutzen
|
||||
|
||||
Alter `cards-server/src/lib/hash.ts`: eigenständige SHA-256-Implementierung.
|
||||
Greenfield: `cardContentHash` in `@cards/domain` (Web-Crypto, deterministisch).
|
||||
Greenfield: `cardContentHash` in `@wordeck/domain` (Web-Crypto, deterministisch).
|
||||
|
||||
Beim Restore: `lib/hash.ts` **nicht** mit-übernehmen, sondern
|
||||
Marketplace-Code auf `cardContentHash` aus `@cards/domain` umbiegen.
|
||||
Marketplace-Code auf `cardContentHash` aus `@wordeck/domain` umbiegen.
|
||||
Eine Hash-Definition für die ganze App.
|
||||
|
||||
### 6. mana-Service-Calls: identische Pattern
|
||||
|
|
@ -304,9 +304,9 @@ sofort umsetzbar mit dem bestehenden Skill.
|
|||
(`mana/docs/MIGRATION_DRIZZLE_ZOD.md`). Marketplace-Schema kommt mit
|
||||
Drizzle 0.38 — sollte mit upgradeen, idealerweise atomar.
|
||||
- **Karten-Hash-Konsistenz zwischen Greenfield und Marketplace.**
|
||||
Greenfield-`@cards/domain` `cardContentHash` ist die SoT. Marketplace-
|
||||
Greenfield-`@wordeck/domain` `cardContentHash` ist die SoT. Marketplace-
|
||||
`deck_cards.content_hash` muss mit demselben Algorithmus berechnet
|
||||
werden — sonst funktioniert Smart-Merge nicht. Beim R2-Port-Pass
|
||||
testen, dass `cardContentHash({type,fields})` aus `@cards/domain`
|
||||
testen, dass `cardContentHash({type,fields})` aus `@wordeck/domain`
|
||||
byte-identisch ist mit dem alten `cards-server/src/lib/hash.ts`. Wenn
|
||||
nicht: alten Code anpassen, nicht `@cards/domain` brechen.
|
||||
nicht: alten Code anpassen, nicht `@wordeck/domain` brechen.
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue