feat: Introduce multi-platform architecture for Electron and Web clients with shared UI components, Convex backend for messaging, and integrated search functionality.
Some checks failed
Build and Release / build-and-release (push) Has been cancelled

This commit is contained in:
Bryan1029384756
2026-02-16 13:08:39 -06:00
parent 8ff9213b34
commit ec12313996
49 changed files with 2449 additions and 3914 deletions

View File

@@ -0,0 +1,54 @@
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;