- Make Item.id required (items from DB always have id) - Use shared Item type from db.ts in QuantityAdjustmentModal - Show full npm build output instead of silencing errors - Ensures all modals use consistent type definitions
52 lines
1.1 KiB
TypeScript
52 lines
1.1 KiB
TypeScript
import Dexie, { Table } from 'dexie';
|
|
|
|
export interface Item {
|
|
id: number;
|
|
barcode: string;
|
|
name: string;
|
|
category: string;
|
|
part_number?: string;
|
|
color?: string;
|
|
specs?: string;
|
|
quantity: number;
|
|
min_quantity: number;
|
|
image_url?: string;
|
|
box_label?: string;
|
|
labels_data?: string;
|
|
serial_number?: string;
|
|
type?: string;
|
|
description?: string;
|
|
connector?: string;
|
|
size?: string;
|
|
ocr_text?: string;
|
|
photo_path?: string;
|
|
photo_thumbnail_path?: string;
|
|
photo_upload_date?: string;
|
|
}
|
|
|
|
export interface PendingOperation {
|
|
id?: number;
|
|
type: 'CHECK_IN' | 'CHECK_OUT' | 'TRASH';
|
|
barcode: string;
|
|
quantity: number;
|
|
timestamp: number;
|
|
synced: 0 | 1; // 0 for false, 1 for true
|
|
uuid: string;
|
|
details?: string;
|
|
}
|
|
|
|
export class InventoryDatabase extends Dexie {
|
|
items!: Table<Item>;
|
|
pendingOperations!: Table<PendingOperation>;
|
|
|
|
constructor() {
|
|
super('InventoryDatabase');
|
|
this.version(5).stores({
|
|
items: '++id, barcode, name, category, part_number, color, box_label, ocr_text',
|
|
pendingOperations: '++id, barcode, timestamp, synced, uuid'
|
|
});
|
|
}
|
|
}
|
|
|
|
export const db = new InventoryDatabase();
|