addReview function
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;
}