File size: 3,948 Bytes
b66ef35 c703ea3 ac7c05c b66ef35 8db63ba c703ea3 8db63ba c703ea3 8db63ba 7ea1165 8db63ba c703ea3 8db63ba c703ea3 7ea1165 8db63ba 7ea1165 8db63ba c703ea3 b66ef35 c703ea3 5fe1a3d c703ea3 5fe1a3d c703ea3 b66ef35 c703ea3 b66ef35 c703ea3 b66ef35 c703ea3 b66ef35 c703ea3 21805fd c703ea3 21805fd c703ea3 21805fd c703ea3 21805fd b66ef35 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 |
import { db } from './index';
import type { PicletInstance } from './schema';
import { PicletType } from '../types/picletTypes';
import type { PicletStats } from '../types';
// Interface for generated piclet data (from PicletResult component)
interface GeneratedPicletData {
name: string;
imageUrl: string;
imageData?: string;
imageCaption: string;
concept: string;
imagePrompt: string;
stats: PicletStats;
createdAt: Date;
}
// Convert generated piclet data to a PicletInstance
export async function generatedDataToPicletInstance(data: GeneratedPicletData): Promise<Omit<PicletInstance, 'id'>> {
if (!data.stats) {
throw new Error('Generated data must have stats to create PicletInstance');
}
const stats = data.stats as PicletStats;
// Map tier from stats
let tier: string = stats.tier || 'medium';
// Check if this is the first piclet (no existing piclets in database)
const existingPiclets = await db.picletInstances.count();
const isFirstPiclet = existingPiclets === 0;
return {
// Basic Info
typeId: stats.name || data.name,
nickname: stats.name || data.name,
primaryType: stats.primaryType as PicletType,
tier: tier,
// Roster Management
isInRoster: isFirstPiclet,
rosterPosition: isFirstPiclet ? 0 : undefined,
// Metadata
caught: isFirstPiclet, // First piclet is automatically caught
caughtAt: isFirstPiclet ? new Date() : undefined,
// Original generation data
imageUrl: data.imageUrl,
imageData: data.imageData,
imageCaption: data.imageCaption,
concept: data.concept,
description: stats.description,
imagePrompt: data.imagePrompt
};
}
// Save a piclet instance to the database
export async function savePicletInstance(picletInstance: Omit<PicletInstance, 'id'>): Promise<number> {
const id = await db.picletInstances.add(picletInstance as any);
return id;
}
// Update a piclet instance in the database
export async function updatePicletInstance(id: number, updates: Partial<PicletInstance>): Promise<void> {
await db.picletInstances.update(id, updates);
}
// Delete a piclet instance from the database
export async function deletePicletInstance(id: number): Promise<void> {
await db.picletInstances.delete(id);
}
// Get all piclet instances
export async function getAllPicletInstances(): Promise<PicletInstance[]> {
return await db.picletInstances.toArray();
}
// Get a single piclet instance by ID
export async function getPicletInstance(id: number): Promise<PicletInstance | undefined> {
return await db.picletInstances.get(id);
}
// Get roster piclets (those currently in battle roster)
export async function getRosterPiclets(): Promise<PicletInstance[]> {
return await db.picletInstances.where('isInRoster').equals(1).toArray();
}
// Get caught piclets (those that have been captured)
export async function getCaughtPiclets(): Promise<PicletInstance[]> {
return await db.picletInstances.where('caught').equals(1).toArray();
}
// Move a piclet to roster (simplified version)
export async function moveToRoster(picletId: number, position: number): Promise<void> {
await db.picletInstances.update(picletId, {
isInRoster: true,
rosterPosition: position
});
}
// Get uncaught piclets
export async function getUncaughtPiclets(): Promise<PicletInstance[]> {
return await db.picletInstances.where('caught').equals(0).toArray();
}
// Swap roster positions (simplified version)
export async function swapRosterPositions(id1: number, position1: number, id2: number, position2: number): Promise<void> {
await db.picletInstances.update(id1, { rosterPosition: position2 });
await db.picletInstances.update(id2, { rosterPosition: position1 });
}
// Move to storage (simplified version)
export async function moveToStorage(picletId: number): Promise<void> {
await db.picletInstances.update(picletId, {
isInRoster: false,
rosterPosition: undefined
});
} |