Opera10's picture
Rename db.ts to services/db.ts
8298ff6 verified
Raw
History Blame Contribute Delete
2.85 kB
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);
};