Skip to content

Commit 9c86932

Browse files
vermeide zu viele function triggers beim löschen von /spezifisch in neueSaison.ts
1 parent ab0bd6c commit 9c86932

4 files changed

Lines changed: 129 additions & 24 deletions

File tree

functions/package-lock.json

Lines changed: 80 additions & 17 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

functions/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
"dependencies": {
1616
"@google-cloud/tasks": "^2.3.6",
1717
"firebase-admin": "^9.8.0",
18-
"firebase-functions": "^3.14.1"
18+
"firebase-functions": "^3.20.1"
1919
},
2020
"devDependencies": {
2121
"firebase-functions-test": "^0.2.0",

functions/src/passeAnzahlFahrerAn.ts

Lines changed: 24 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,27 @@ async function passeAnzahlFahrerAn(data: { schule: string, klasse: string, name:
2222
await datenbank.ref().update(updates)
2323
}
2424

25-
const passeAnzahlFahrerAnRef = functions.region(region).database.ref("/spezifisch/fahrer/{fahrer}")
26-
export const increment = passeAnzahlFahrerAnRef.onCreate((snap, context) => passeAnzahlFahrerAn(snap.val(), context.params.fahrer))
27-
export const decrement = passeAnzahlFahrerAnRef.onDelete((snap, context) => passeAnzahlFahrerAn(snap.val(), context.params.fahrer, true))
25+
export const onFahrerChange = functions.region(region).database.ref("/spezifisch/fahrer")
26+
.onWrite(async (change) => {
27+
if (!change.after.exists()) return null; // Bulk delete skip
28+
29+
const before = change.before.val() || {};
30+
const after = change.after.val() || {};
31+
32+
const beforeKeys = Object.keys(before);
33+
const afterKeys = Object.keys(after);
34+
35+
const addedKeys = afterKeys.filter(key => !before[key]);
36+
const deletedKeys = beforeKeys.filter(key => !after[key]);
37+
38+
const promises = [];
39+
for (const key of addedKeys) {
40+
promises.push(passeAnzahlFahrerAn(after[key], key));
41+
}
42+
for (const key of deletedKeys) {
43+
promises.push(passeAnzahlFahrerAn(before[key], key, true));
44+
}
45+
46+
return Promise.all(promises);
47+
});
48+

functions/src/passeStreckeUndAnzahlStreckenAn.ts

Lines changed: 24 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,27 @@ async function passeStreckeUndAnzahlStreckenAn(data: { strecke: number, fahrer:
3232
await datenbank.ref().update(updates)
3333
}
3434

35-
const passeStreckeUndAnzahlStreckenAnRef = functions.region(region).database.ref("/spezifisch/strecken/{strecke}")
36-
export const increment = passeStreckeUndAnzahlStreckenAnRef.onCreate(snap => passeStreckeUndAnzahlStreckenAn(snap.val()))
37-
export const decrement = passeStreckeUndAnzahlStreckenAnRef.onDelete(snap => passeStreckeUndAnzahlStreckenAn(snap.val(), true))
35+
export const onStreckenChange = functions.region(region).database.ref("/spezifisch/strecken")
36+
.onWrite(async (change) => {
37+
if (!change.after.exists()) return null; // Bulk delete skip
38+
39+
const before = change.before.val() || {};
40+
const after = change.after.val() || {};
41+
42+
const beforeKeys = Object.keys(before);
43+
const afterKeys = Object.keys(after);
44+
45+
const addedKeys = afterKeys.filter(key => !before[key]);
46+
const deletedKeys = beforeKeys.filter(key => !after[key]);
47+
48+
const promises = [];
49+
for (const key of addedKeys) {
50+
promises.push(passeStreckeUndAnzahlStreckenAn(after[key]));
51+
}
52+
for (const key of deletedKeys) {
53+
promises.push(passeStreckeUndAnzahlStreckenAn(before[key], true));
54+
}
55+
56+
return Promise.all(promises);
57+
});
58+

0 commit comments

Comments
 (0)