Saya sedang membina apl web di mana pengguna boleh membuat temu janji dengan doktor dan saya mahu menghalang pengguna daripada membuat temu janji dengan doktor yang sama pada masa dan tarikh yang sama yang telah diminta oleh pengguna lain. Saya menggunakan pangkalan data firestore untuk menyimpan maklumat janji temu sebagai dokumen. Berikut ialah fungsi saya yang mengendalikan semakan dan menolaknya ke pangkalan data firebase saya:
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 };
Pada penyegaran halaman, jika saya cuba menempah janji temu yang telah diminta, panjang dokumen ialah 0 dan saya boleh membuat janji temu yang sama. Walau bagaimanapun, jika saya mencuba lagi (tanpa menyegarkan semula), panjang dokumen ialah 1 dan ia tidak ditolak ke pangkalan data.
Saya kini menghuraikan medan tarikh sebagai rentetan dan sebenarnya membandingkan rentetan dan bukannya tarikh.