Ich baue eine Web-App, in der Benutzer Termine mit Ärzten vereinbaren können, und ich möchte verhindern, dass Benutzer zur gleichen Zeit und am gleichen Datum Termine mit demselben Arzt vereinbaren, die andere Benutzer bereits angefordert haben. Ich verwende eine Firestore-Datenbank, um Termininformationen als Dokument zu speichern. Hier ist meine Funktion, die die Prüfung durchführt und sie an meine Firebase-Datenbank weiterleitet:
const addAppointment = async (date: Date | null, speciality: string | undefined) => { const appointmentsRef = collection(db, "appointments"); const q = query(appointmentsRef, where("speciality", "==", speciality), where("date", "==", date)) const docs = await getDocs(q); docs.forEach((doc: any) => { console.log(doc.data()) }) console.log(docs.docs.length) if (docs.docs.length === 0) { try{ await addDoc(collection(db, "appointments"), { email: auth.currentUser?.email, date, speciality });} catch (err) { console.error(err); } return false } return true };
Wenn ich bei der Seitenaktualisierung versuche, einen Termin zu buchen, der bereits angefordert wurde, ist die Dokumentlänge 0 und ich kann denselben Termin vereinbaren. Wenn ich es jedoch erneut versuche (ohne Aktualisierung), beträgt die Dokumentlänge 1 und es wird nicht in die Datenbank übertragen.
我现在将日期字段解析为字符串,实际上是在比较字符串而不是日期。