Мой вопрос: эта функция выполняется (список функций ) иногда дает соответствующие результаты, иногда он пропускает некоторые функции ИЛИ я не уверен, но данные в базе данных Firestore говорят сами за себя. Иногда они написаны частично, а иногда и полностью.
Код: Выделить всё
fun execute(functions: List Unit>) {
if (_loadingState.value == LoadingState.Loading) return //Avoid double tapping
_loadingState.value = LoadingState.Loading
viewModelScope.launch {
try {
Firebase.firestore.runTransaction { transaction ->
for (function in functions) {
function(transaction)
}
}.addOnSuccessListener {
_loadingState.value = LoadingState.Success
}.addOnFailureListener {
_loadingState.value =
LoadingState.Error("Failed, Error occurred: ${it.message}")
}
} catch (e: Exception) {
_loadingState.value = LoadingState.Error("Failed, Error occurred: ${e.message}")
}
}
}
Код: Выделить всё
fun assignSender(user: User, order: Order) {
if (user.userID.isBlank() || user.name.isBlank() || user.userID == order.sendBy) return
_actionStarted = true
val functions = listOf Unit> { transaction ->
assignSenderTransaction(transaction, user, order)
HistoryViewModel.saveHistory(transaction, HistoryViewModel.toHistoryAssign(order, user))
}
execute(functions)
}
Код: Выделить всё
private fun assignSenderTransaction(transaction: Transaction, user: User, order: Order) {
val orderRef = firestore
.collection(Collections.ORDERS).document(order.id)
val updates =
mapOf("sendBy" to user.userID, "senderName" to user.name, "senderPhone" to user.phone)
transaction.update(orderRef, updates)
}
fun saveHistory(transaction: Transaction, history: History) {
val historyRef = Firebase.firestore
.collection(Collections.HISTORYS).document(history.id)
transaction.set(historyRef, history)
}
ОБНОВЛЕНИЕ:
Здесь есть эта функция после того, как я просмотрел весь код и обнаружил, что не соответствует правилу Firestore, составляющему 1 запись в секунду. А также некоторые поля полей карты могут иметь специальные символы, такие как продукты={"key+-":5, что может не соответствовать принципу работы точечного синтаксиса< /p>
Код: Выделить всё
fun incrementStock(
transaction: Transaction,
userID: String,
userName: String,
products: HashMap,
increase: Boolean
) {
val stockRef = Firebase.firestore.collection(Collections.STOCKS).document(userID)
for ((product, quantity) in products) {
transaction.update(
stockRef,
"products.$product",
FieldValue.increment(if (increase) quantity.toLong() else -quantity.toLong())
)
}
HistoryViewModel.saveHistory(
transaction,
HistoryViewModel.toHistory(products, userID, userName, increase)
)
}
Подробнее здесь: https://stackoverflow.com/questions/790 ... in-android
Мобильная версия