Spaces:
Running
Running
| import { JobData, Model } from '../types'; | |
| const DB_NAME = 'SadaAI_DB'; | |
| const STORE_JOBS = 'jobs'; | |
| const STORE_CUSTOM_MODELS = 'custom_models'; | |
| const DB_VERSION = 2; // Incremented version for new store | |
| export const initDB = (): Promise<IDBDatabase> => { | |
| return new Promise((resolve, reject) => { | |
| const request = indexedDB.open(DB_NAME, DB_VERSION); | |
| request.onerror = () => reject(request.error); | |
| request.onsuccess = () => resolve(request.result); | |
| request.onupgradeneeded = (event) => { | |
| const db = (event.target as IDBOpenDBRequest).result; | |
| if (!db.objectStoreNames.contains(STORE_JOBS)) { | |
| db.createObjectStore(STORE_JOBS, { keyPath: 'job_id' }); | |
| } | |
| if (!db.objectStoreNames.contains(STORE_CUSTOM_MODELS)) { | |
| db.createObjectStore(STORE_CUSTOM_MODELS, { keyPath: 'id' }); | |
| } | |
| }; | |
| }); | |
| }; | |
| // Jobs Methods | |
| export const saveJob = async (job: JobData): Promise<void> => { | |
| const db = await initDB(); | |
| const transaction = db.transaction(STORE_JOBS, 'readwrite'); | |
| const store = transaction.objectStore(STORE_JOBS); | |
| await store.put(job); | |
| }; | |
| export const getAllJobs = async (): Promise<JobData[]> => { | |
| const db = await initDB(); | |
| const transaction = db.transaction(STORE_JOBS, 'readonly'); | |
| const store = transaction.objectStore(STORE_JOBS); | |
| const request = store.getAll(); | |
| return new Promise((resolve) => { | |
| request.onsuccess = () => resolve(request.result || []); | |
| }); | |
| }; | |
| export const deleteJob = async (jobId: string): Promise<void> => { | |
| const db = await initDB(); | |
| const transaction = db.transaction(STORE_JOBS, 'readwrite'); | |
| const store = transaction.objectStore(STORE_JOBS); | |
| await store.delete(jobId); | |
| }; | |
| export const clearAllJobs = async (): Promise<void> => { | |
| const db = await initDB(); | |
| const transaction = db.transaction(STORE_JOBS, 'readwrite'); | |
| const store = transaction.objectStore(STORE_JOBS); | |
| await store.clear(); | |
| }; | |
| // Custom Models Methods | |
| export const saveCustomModel = async (model: Model): Promise<void> => { | |
| const db = await initDB(); | |
| const transaction = db.transaction(STORE_CUSTOM_MODELS, 'readwrite'); | |
| const store = transaction.objectStore(STORE_CUSTOM_MODELS); | |
| await store.put(model); | |
| }; | |
| export const getAllCustomModels = async (): Promise<Model[]> => { | |
| const db = await initDB(); | |
| const transaction = db.transaction(STORE_CUSTOM_MODELS, 'readonly'); | |
| const store = transaction.objectStore(STORE_CUSTOM_MODELS); | |
| const request = store.getAll(); | |
| return new Promise((resolve) => { | |
| request.onsuccess = () => resolve(request.result || []); | |
| }); | |
| }; | |
| export const deleteCustomModel = async (id: string): Promise<void> => { | |
| const db = await initDB(); | |
| const transaction = db.transaction(STORE_CUSTOM_MODELS, 'readwrite'); | |
| const store = transaction.objectStore(STORE_CUSTOM_MODELS); | |
| await store.delete(id); | |
| }; | |