addReview function

Future<String?> addReview(
  1. int rating,
  2. String text,
  3. List<Uint8List> images,
  4. OrderData jobInfo,
)

Implementation

Future<String?> addReview(int rating, String text, List<Uint8List> images, OrderData jobInfo) async{  // addRating
  User? user = FirebaseAuth.instance.currentUser;
  if (user == null)
    return "addRating user == null";
  List<ImageData> _images = [];
  try{
    for (var item in images){
      var ret = await uploadImage("rating", item);
      if (ret != null)
        return ret;
      _images.add(ImageData(localFile: localFile, serverPath: serverPath));
    }
    //
    await FirebaseFirestore.instance.collection("service").doc(jobInfo.serviceId).set({
      "rating$rating": FieldValue.increment(1),
      "timeModify": DateTime.now().toUtc(),
    }, SetOptions(merge:true));
    await FirebaseFirestore.instance.collection("reviews").add({
      "rating": rating,
      "text": text,
      "images": _images.map((i) => i.toJson()).toList(),
      "user": user.uid,
      "service": jobInfo.serviceId,
      'serviceName': getTextByLocale(jobInfo.service, locale),
      "provider": jobInfo.providerId,
      "userName": userAccountData.userName,
      "userAvatar": userAccountData.userAvatar,
      'time': FieldValue.serverTimestamp(),
      "timeModify": FieldValue.serverTimestamp(),
    });
    await FirebaseFirestore.instance.collection("booking").doc(jobInfo.id).set({
      "rated": true,
      "timeModify": FieldValue.serverTimestamp(),
    }, SetOptions(merge:true));
    await FirebaseFirestore.instance.collection("settings").doc("main")
        .set({"service_reviews": FieldValue.increment(1)}, SetOptions(merge:true));

    await bookingSaveInCache(jobInfo);
  } catch (e) {
    return "addReview " + e.toString();
  }
  jobInfo.rated = true;
  return null;
}