Cómo comprobar que ciertos datos ya existen en el almacén de incendios o no

Antes de agregar una nueva información al almacén de incendios, quiero verificar si ya existen datos del mismo tipo en la base de datos o no. Si ya hay datos presentes, quiero evitar que el usuario ingrese datos duplicados en la base de datos. En mi caso, es como una reserva de cita si ya existe una reserva para el mismo tiempo, quiero evitar que los usuarios reserven al mismo tiempo. Intenté usar la función de consulta pero no impide la entrada de datos duplicados. @

private boolean alreadyBooked(final String boname, final String bodept, final String botime) {
        final int[] flag = {0};
        CollectionReference cref=db.collection("bookingdetails");
        Query q1=cref.whereEqualTo("time",botime).whereEqualTo("dept",bodept);
        q1.get().addOnSuccessListener(new OnSuccessListener<QuerySnapshot>() {
            @Override
            public void onSuccess(QuerySnapshot queryDocumentSnapshots) {
                for (DocumentSnapshot ds : queryDocumentSnapshots) {
                    String rname, rdept, rtime;
                    rname = ds.getString("name");
                    rdept = ds.getString("dept");
                    rtime = ds.getString("time");
                    if (rdept.equals(botime)) {
                        if (rtime.equals(botime)) {
                            flag[0] = 1;
                            return;
                        }
                    }
                }
            }
        });
        if(flag[0]==1){
            return true;
        }
        else {
            return false;
        }
    }

Respuestas a la pregunta(1)

Su respuesta a la pregunta