const DB_NAME = 'discord-clone-search'; const STORE_NAME = 'databases'; const DB_VERSION = 1; function openIDB() { return new Promise((resolve, reject) => { const req = indexedDB.open(DB_NAME, DB_VERSION); req.onupgradeneeded = () => { const db = req.result; if (!db.objectStoreNames.contains(STORE_NAME)) { db.createObjectStore(STORE_NAME); } }; req.onsuccess = () => resolve(req.result); req.onerror = () => reject(req.error); }); } const searchStorage = { async load(userId) { const db = await openIDB(); return new Promise((resolve, reject) => { const tx = db.transaction(STORE_NAME, 'readonly'); const store = tx.objectStore(STORE_NAME); const req = store.get(`search-db-${userId}`); req.onsuccess = () => resolve(req.result || null); req.onerror = () => reject(req.error); }); }, async save(userId, bytes) { const db = await openIDB(); return new Promise((resolve, reject) => { const tx = db.transaction(STORE_NAME, 'readwrite'); const store = tx.objectStore(STORE_NAME); const req = store.put(bytes, `search-db-${userId}`); req.onsuccess = () => resolve(); req.onerror = () => reject(req.error); }); }, async clear(userId) { const db = await openIDB(); return new Promise((resolve, reject) => { const tx = db.transaction(STORE_NAME, 'readwrite'); const store = tx.objectStore(STORE_NAME); const req = store.delete(`search-db-${userId}`); req.onsuccess = () => resolve(); req.onerror = () => reject(req.error); }); }, }; export default searchStorage;