diff options
Diffstat (limited to 'pkgs')
| -rw-r--r-- | pkgs/shared/src/index.ts | 2 | ||||
| -rw-r--r-- | pkgs/shared/src/types/index.ts | 79 |
2 files changed, 80 insertions, 1 deletions
diff --git a/pkgs/shared/src/index.ts b/pkgs/shared/src/index.ts index cb0ff5c..2f88e30 100644 --- a/pkgs/shared/src/index.ts +++ b/pkgs/shared/src/index.ts @@ -1 +1 @@ -export {}; +export * from "./types/index.js"; diff --git a/pkgs/shared/src/types/index.ts b/pkgs/shared/src/types/index.ts new file mode 100644 index 0000000..bfba06f --- /dev/null +++ b/pkgs/shared/src/types/index.ts @@ -0,0 +1,79 @@ +// Card states for FSRS algorithm +export const CardState = { + New: 0, + Learning: 1, + Review: 2, + Relearning: 3, +} as const; + +export type CardState = (typeof CardState)[keyof typeof CardState]; + +// Rating values for reviews +export const Rating = { + Again: 1, + Hard: 2, + Good: 3, + Easy: 4, +} as const; + +export type Rating = (typeof Rating)[keyof typeof Rating]; + +// User +export interface User { + id: string; + username: string; + passwordHash: string; + createdAt: Date; + updatedAt: Date; +} + +// Deck +export interface Deck { + id: string; + userId: string; + name: string; + description: string | null; + newCardsPerDay: number; + createdAt: Date; + updatedAt: Date; + deletedAt: Date | null; + syncVersion: number; +} + +// Card with FSRS fields +export interface Card { + id: string; + deckId: string; + front: string; + back: string; + + // FSRS fields + state: CardState; + due: Date; + stability: number; + difficulty: number; + elapsedDays: number; + scheduledDays: number; + reps: number; + lapses: number; + lastReview: Date | null; + + createdAt: Date; + updatedAt: Date; + deletedAt: Date | null; + syncVersion: number; +} + +// ReviewLog (append-only) +export interface ReviewLog { + id: string; + cardId: string; + userId: string; + rating: Rating; + state: CardState; + scheduledDays: number; + elapsedDays: number; + reviewedAt: Date; + durationMs: number | null; + syncVersion: number; +} |
