Files
DiscordClone/packages/platform-web/src/searchStorage.js
2026-02-16 13:08:39 -06:00

55 lines
1.6 KiB
JavaScript

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;