回答編集履歴
3
クエリに関してはfirestoreのトランザクションは使えないようでした。コード修正しました。
test
CHANGED
@@ -18,62 +18,50 @@
|
|
18
18
|
|
19
19
|
```:js
|
20
20
|
|
21
|
-
|
21
|
+
async updateUserBalance({ state, commit }, getTransfer) {
|
22
22
|
|
23
|
-
|
23
|
+
const isMyUid = firebase.auth().currentUser.uid
|
24
24
|
|
25
|
-
|
25
|
+
try {
|
26
26
|
|
27
|
-
tr
|
27
|
+
const receiverDocs = await db.collection('users').where('uid', '==', state.isUid).get()
|
28
28
|
|
29
|
-
|
29
|
+
const receiverId = receiverDocs[0].id
|
30
30
|
|
31
|
-
|
31
|
+
const senderDocs = await db.collection('users').where('uid', '==', isMyUid).get()
|
32
32
|
|
33
|
-
|
33
|
+
const senderId = senderDocs[0].id
|
34
34
|
|
35
|
-
|
35
|
+
await db.runTransaction(async t => {
|
36
36
|
|
37
|
-
|
37
|
+
//送金される側
|
38
38
|
|
39
|
-
|
39
|
+
await t.update(db.collection('users').doc(receiverId), {
|
40
40
|
|
41
|
-
|
41
|
+
balance: firebase.firestore.FieldValue.increment(Number(getTransfer))
|
42
|
-
|
43
|
-
})
|
44
|
-
|
45
|
-
}
|
46
|
-
|
47
|
-
commit('updateDestinationBalance', getTransfer)
|
48
|
-
|
49
|
-
//送金する側
|
50
|
-
|
51
|
-
const myUserDocs = await t.get(
|
52
|
-
|
53
|
-
db.collection('users').where('uid', '==', isMyUid)
|
54
|
-
|
55
|
-
)
|
56
|
-
|
57
|
-
for (const doc of myUserDocs) {
|
58
|
-
|
59
|
-
await t.update(db.collection('users').doc(doc.id), {
|
60
|
-
|
61
|
-
balance: firebase.firestore.FieldValue.increment(-Number(getTransfer))
|
62
|
-
|
63
|
-
})
|
64
|
-
|
65
|
-
}
|
66
|
-
|
67
|
-
commit('updateMyBalance', getTransfer)
|
68
42
|
|
69
43
|
})
|
70
44
|
|
71
|
-
|
45
|
+
commit('updateDestinationBalance', getTransfer)
|
72
46
|
|
73
|
-
|
47
|
+
//送金する側
|
74
48
|
|
49
|
+
await t.update(db.collection('users').doc(senderId), {
|
50
|
+
|
51
|
+
balance: firebase.firestore.FieldValue.increment(-Number(getTransfer))
|
52
|
+
|
75
|
-
}
|
53
|
+
})
|
54
|
+
|
55
|
+
commit('updateMyBalance', getTransfer)
|
56
|
+
|
57
|
+
})
|
58
|
+
|
59
|
+
} catch (error) {
|
60
|
+
|
61
|
+
console.log(error)
|
76
62
|
|
77
63
|
}
|
78
64
|
|
65
|
+
}
|
66
|
+
|
79
67
|
```
|
2
firebase.firestore.FieldValue.increment の説明を追加
test
CHANGED
@@ -7,6 +7,12 @@
|
|
7
7
|
|
8
8
|
|
9
9
|
サーバサイドでも似たようなコードで動作するはずです。
|
10
|
+
|
11
|
+
|
12
|
+
|
13
|
+
ちなみに、`firebase.firestore.FieldValue.increment` は現在の値に対してインクリメントできる機能です。
|
14
|
+
|
15
|
+
参考) https://qiita.com/1amageek/items/665df5a6d9921319e300
|
10
16
|
|
11
17
|
|
12
18
|
|
1
FieldValue.increment を使うように修正しました。
test
CHANGED
@@ -32,7 +32,7 @@
|
|
32
32
|
|
33
33
|
await t.update(db.collection('users').doc(doc.id), {
|
34
34
|
|
35
|
-
balance:
|
35
|
+
balance: firebase.firestore.FieldValue.increment(Number(getTransfer))
|
36
36
|
|
37
37
|
})
|
38
38
|
|
@@ -52,7 +52,7 @@
|
|
52
52
|
|
53
53
|
await t.update(db.collection('users').doc(doc.id), {
|
54
54
|
|
55
|
-
balance:
|
55
|
+
balance: firebase.firestore.FieldValue.increment(-Number(getTransfer))
|
56
56
|
|
57
57
|
})
|
58
58
|
|