46 lines
1.1 KiB
JavaScript
46 lines
1.1 KiB
JavaScript
import { db } from '../firebase.js';
|
|
import { collection, doc, onSnapshot, query, orderBy, addDoc, updateDoc, deleteDoc, serverTimestamp } from 'firebase/firestore';
|
|
|
|
let entries = $state([]);
|
|
let _uid = null;
|
|
let _unsubscribe = null;
|
|
|
|
export function getEntries() {
|
|
return entries;
|
|
}
|
|
|
|
export function initEntriesListener(uid) {
|
|
if (_unsubscribe) _unsubscribe();
|
|
_uid = uid;
|
|
const q = query(
|
|
collection(db, 'users', uid, 'entries'),
|
|
orderBy('createdAt', 'desc')
|
|
);
|
|
_unsubscribe = onSnapshot(q, (snap) => {
|
|
entries = snap.docs.map((d) => ({ id: d.id, ...d.data() }));
|
|
});
|
|
}
|
|
|
|
export async function addEntry(data) {
|
|
if (!_uid) return null;
|
|
const ref = await addDoc(collection(db, 'users', _uid, 'entries'), {
|
|
...data,
|
|
createdAt: serverTimestamp(),
|
|
updatedAt: serverTimestamp(),
|
|
});
|
|
return ref.id;
|
|
}
|
|
|
|
export async function updateEntry(id, data) {
|
|
if (!_uid) return;
|
|
await updateDoc(doc(db, 'users', _uid, 'entries', id), {
|
|
...data,
|
|
updatedAt: serverTimestamp(),
|
|
});
|
|
}
|
|
|
|
export async function removeEntry(id) {
|
|
if (!_uid) return;
|
|
await deleteDoc(doc(db, 'users', _uid, 'entries', id));
|
|
}
|