diff options
Diffstat (limited to 'pkgs/shared/src')
| -rw-r--r-- | pkgs/shared/src/index.ts | 2 | ||||
| -rw-r--r-- | pkgs/shared/src/schemas/index.ts | 140 | ||||
| -rw-r--r-- | pkgs/shared/src/types/index.ts | 79 |
3 files changed, 0 insertions, 221 deletions
diff --git a/pkgs/shared/src/index.ts b/pkgs/shared/src/index.ts deleted file mode 100644 index 0ca6112..0000000 --- a/pkgs/shared/src/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from "./schemas/index.js"; -export * from "./types/index.js"; diff --git a/pkgs/shared/src/schemas/index.ts b/pkgs/shared/src/schemas/index.ts deleted file mode 100644 index 05b926a..0000000 --- a/pkgs/shared/src/schemas/index.ts +++ /dev/null @@ -1,140 +0,0 @@ -import { z } from "zod"; - -// Card states for FSRS algorithm -export const cardStateSchema = z.union([ - z.literal(0), // New - z.literal(1), // Learning - z.literal(2), // Review - z.literal(3), // Relearning -]); - -// Rating values for reviews -export const ratingSchema = z.union([ - z.literal(1), // Again - z.literal(2), // Hard - z.literal(3), // Good - z.literal(4), // Easy -]); - -// User schema -export const userSchema = z.object({ - id: z.string().uuid(), - username: z.string().min(1).max(255), - passwordHash: z.string(), - createdAt: z.coerce.date(), - updatedAt: z.coerce.date(), -}); - -// User creation input schema -export const createUserSchema = z.object({ - username: z.string().min(1).max(255), - password: z.string().min(15).max(255), -}); - -// Login input schema -export const loginSchema = z.object({ - username: z.string().min(1), - password: z.string().min(1), -}); - -// Refresh token input schema -export const refreshTokenSchema = z.object({ - refreshToken: z.string().min(1), -}); - -// Deck schema -export const deckSchema = z.object({ - id: z.string().uuid(), - userId: z.string().uuid(), - name: z.string().min(1).max(255), - description: z.string().max(1000).nullable(), - newCardsPerDay: z.number().int().min(0).default(20), - createdAt: z.coerce.date(), - updatedAt: z.coerce.date(), - deletedAt: z.coerce.date().nullable(), - syncVersion: z.number().int().min(0), -}); - -// Deck creation input schema -export const createDeckSchema = z.object({ - name: z.string().min(1).max(255), - description: z.string().max(1000).nullable().optional(), - newCardsPerDay: z.number().int().min(0).default(20), -}); - -// Deck update input schema -export const updateDeckSchema = z.object({ - name: z.string().min(1).max(255).optional(), - description: z.string().max(1000).nullable().optional(), - newCardsPerDay: z.number().int().min(0).optional(), -}); - -// Card schema -export const cardSchema = z.object({ - id: z.string().uuid(), - deckId: z.string().uuid(), - front: z.string().min(1), - back: z.string().min(1), - - // FSRS fields - state: cardStateSchema, - due: z.coerce.date(), - stability: z.number().min(0), - difficulty: z.number().min(0).max(10), - elapsedDays: z.number().int().min(0), - scheduledDays: z.number().int().min(0), - reps: z.number().int().min(0), - lapses: z.number().int().min(0), - lastReview: z.coerce.date().nullable(), - - createdAt: z.coerce.date(), - updatedAt: z.coerce.date(), - deletedAt: z.coerce.date().nullable(), - syncVersion: z.number().int().min(0), -}); - -// Card creation input schema -export const createCardSchema = z.object({ - front: z.string().min(1), - back: z.string().min(1), -}); - -// Card update input schema -export const updateCardSchema = z.object({ - front: z.string().min(1).optional(), - back: z.string().min(1).optional(), -}); - -// ReviewLog schema -export const reviewLogSchema = z.object({ - id: z.string().uuid(), - cardId: z.string().uuid(), - userId: z.string().uuid(), - rating: ratingSchema, - state: cardStateSchema, - scheduledDays: z.number().int().min(0), - elapsedDays: z.number().int().min(0), - reviewedAt: z.coerce.date(), - durationMs: z.number().int().min(0).nullable(), - syncVersion: z.number().int().min(0), -}); - -// Submit review input schema -export const submitReviewSchema = z.object({ - rating: ratingSchema, - durationMs: z.number().int().min(0).nullable().optional(), -}); - -// Inferred types from schemas -export type UserSchema = z.infer<typeof userSchema>; -export type CreateUserSchema = z.infer<typeof createUserSchema>; -export type LoginSchema = z.infer<typeof loginSchema>; -export type RefreshTokenSchema = z.infer<typeof refreshTokenSchema>; -export type DeckSchema = z.infer<typeof deckSchema>; -export type CreateDeckSchema = z.infer<typeof createDeckSchema>; -export type UpdateDeckSchema = z.infer<typeof updateDeckSchema>; -export type CardSchema = z.infer<typeof cardSchema>; -export type CreateCardSchema = z.infer<typeof createCardSchema>; -export type UpdateCardSchema = z.infer<typeof updateCardSchema>; -export type ReviewLogSchema = z.infer<typeof reviewLogSchema>; -export type SubmitReviewSchema = z.infer<typeof submitReviewSchema>; diff --git a/pkgs/shared/src/types/index.ts b/pkgs/shared/src/types/index.ts deleted file mode 100644 index bfba06f..0000000 --- a/pkgs/shared/src/types/index.ts +++ /dev/null @@ -1,79 +0,0 @@ -// 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; -} |
