piclets / src /lib /db /schema.ts
Fraser's picture
BIG CHANGE
c703ea3
import type { PicletType } from '../types/picletTypes';
// Enums
export enum EncounterType {
WILD_PICLET = 'wildPiclet',
FIRST_PICLET = 'firstPiclet'
}
// PicletInstance - Individual monster instances owned by the player
export interface PicletInstance {
id?: number;
// Basic Info
typeId: string;
nickname?: string;
primaryType: PicletType;
tier: string; // 'low' | 'medium' | 'high' | 'legendary'
// Roster Management
isInRoster: boolean;
rosterPosition?: number; // 0-5 when in roster
// Metadata
caught: boolean; // Whether this Piclet has been caught by the player
caughtAt?: Date; // When this Piclet was caught (undefined if not caught)
// Original generation data
imageUrl: string;
imageData?: string; // Base64 encoded image with transparency
imageCaption: string;
concept: string;
description: string; // Generated monster description
imagePrompt: string;
}
// Encounter - Game encounters
export interface Encounter {
id?: number;
// Type
type: EncounterType;
// Details
title: string;
description: string;
picletTypeId?: string; // For wild piclet encounters
picletInstanceId?: number; // For first piclet encounters - specific Piclet to catch
enemyLevel?: number;
// Timing
createdAt: Date;
}
// GameState - Overall game progress
export interface GameState {
id?: number;
// Timing
lastEncounterRefresh: Date;
lastPlayed: Date;
// Progress (0-1000)
progressPoints: number;
trainersDefeated: number;
picletsCapured: number;
battlesLost: number;
}
// Trainer Scanning Progress - Track automated trainer piclet generation
export interface TrainerScanProgress {
id?: number;
// Image Info
imagePath: string; // e.g., "trainer_images/001_Willow_Snap/image_001.jpg"
trainerName: string; // e.g., "001_Willow_Snap"
imageIndex: number; // e.g., 1, 2, 3 for multiple images per trainer
// Processing Status
status: 'pending' | 'processing' | 'completed' | 'failed';
// Results
picletInstanceId?: number; // ID of generated piclet if successful
errorMessage?: string; // Error details if failed
// Timing
startedAt?: Date;
completedAt?: Date;
// Remote URL for reference
remoteUrl: string; // Full HuggingFace URL
}