55 lines
1.6 KiB
JavaScript
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;
|