Skip to content

Commit b42c361

Browse files
author
matthias_schaub
committed
Refactor counter for first user contribution to a project into seperate database trigger function.
1 parent 3ba024e commit b42c361

File tree

1 file changed

+54
-69
lines changed

1 file changed

+54
-69
lines changed

firebase/functions/index.js

Lines changed: 54 additions & 69 deletions
Original file line numberDiff line numberDiff line change
@@ -30,66 +30,26 @@ exports.counter = functions.database.ref('/v2/results/{projectId}/{groupId}/{use
3030

3131

3232
// Firebase Realtime Database references
33+
const contributorCountRef = admin.database().ref('/v2/projects/'+context.params.projectId+'/contributorCount')
34+
3335
const groupFinishedCountRef = admin.database().ref('/v2/groups/'+context.params.projectId+'/'+context.params.groupId+'/finishedCount')
3436
const groupRequiredCountRef = admin.database().ref('/v2/groups/'+context.params.projectId+'/'+context.params.groupId+'/requiredCount')
3537
const numberOfTasksRef = admin.database().ref('/v2/groups/'+context.params.projectId+'/'+context.params.groupId+'/numberOfTasks')
3638

37-
const contributorsCountRef = admin.database().ref('/v2/projects/'+context.params.projectId+'/contributorCount')
38-
39-
const taskContributionCountRef = admin.database().ref('/v2/users/'+context.params.userId+'/taskContributionCount')
40-
const groupContributionCountRef = admin.database().ref('/v2/users/'+context.params.userId+'/groupContributionCount')
41-
const projectContributionCountRef = admin.database().ref('/v2/users/'+context.params.userId+'/projectContributionCount')
42-
const contributionsRef = admin.database().ref('/v2/users/'+context.params.userId+'/contributions/'+context.params.projectId)
43-
const groupContributionsRef = admin.database().ref('/v2/users/'+context.params.userId+'/contributions/'+context.params.projectId +'/'+context.params.groupId)
44-
const totalTimeSpentMappingRef = admin.database().ref('/v2/users/'+context.params.userId+'/timeSpentMapping')
39+
const taskContributionCountRef = admin.database().ref('/v2/users/'+context.params.userId+'/taskContributionCount')
40+
const groupContributionCountRef = admin.database().ref('/v2/users/'+context.params.userId+'/groupContributionCount')
41+
const projectContributionCountRef = admin.database().ref('/v2/users/'+context.params.userId+'/projectContributionCount')
42+
const projectContributionsRef = admin.database().ref('/v2/users/'+context.params.userId+'/contributions/'+context.params.projectId)
43+
const groupContributionsRef = admin.database().ref('/v2/users/'+context.params.userId+'/contributions/'+context.params.projectId +'/'+context.params.groupId)
44+
const projectTaskContributionCountRef = admin.database().ref('/v2/users/'+context.params.userId+'/contributions/'+context.params.projectId+'/taskContributionCount')
45+
const projectGroupContributionCountRef = admin.database().ref('/v2/users/'+context.params.userId+'/contributions/'+context.params.projectId+'/groupContributionCount')
46+
const totalTimeSpentMappingRef = admin.database().ref('/v2/users/'+context.params.userId+'/timeSpentMapping')
4547

4648
const startTimeRef = admin.database().ref('/v2/results/'+context.params.projectId+'/'+context.params.groupId+'/'+context.params.userId+'/startTime')
4749
const endTimeRef = admin.database().ref('/v2/results/'+context.params.projectId+'/'+context.params.groupId+'/'+context.params.userId+'/endTime')
4850
const timeSpentMappingRef = admin.database().ref('/v2/results/'+context.params.projectId+'/'+context.params.groupId+'/'+context.params.userId+'/timeSpentMappingRef')
4951

50-
// references for project based counters for tasks and groups
51-
const projectTaskContributionCountRef = admin.database().ref('/v2/users/'+context.params.userId+'/contributions/'+context.params.projectId+'/taskContributionCount')
52-
const projectGroupContributionCountRef = admin.database().ref('/v2/users/'+context.params.userId+'/contributions/'+context.params.projectId+'/groupContributionCount')
53-
54-
// Counter for groups
55-
const groupFinishedCount = groupFinishedCountRef.transaction((currentCount) => {
56-
return currentCount + 1
57-
})
58-
promises.push(groupFinishedCount)
59-
60-
const groupRequiredCount = groupRequiredCountRef.transaction((currentCount) => {
61-
return currentCount - 1
62-
})
63-
promises.push(groupRequiredCount)
64-
65-
// Counter for projects
66-
const contributorsCount = contributionsRef.once('value')
67-
.then((dataSnapshot) => {
68-
if (dataSnapshot.exists()) {
69-
return null
70-
}
71-
else {
72-
return contributorsCountRef.transaction((currentCount) => {
73-
return currentCount + 1
74-
})
75-
}
76-
})
77-
promises.push(contributorsCount)
78-
7952
// Counter for users
80-
const projectContributionCount = contributionsRef.once('value')
81-
.then((dataSnapshot) => {
82-
if (dataSnapshot.exists()) {
83-
return null
84-
}
85-
else {
86-
return projectContributionCountRef.transaction((currentCount) => {
87-
return currentCount + 1
88-
})
89-
}
90-
})
91-
promises.push(projectContributionCount)
92-
9353
const groupContributionCount = groupContributionCountRef.transaction((currentCount) => {
9454
return currentCount + 1
9555
});
@@ -107,22 +67,12 @@ exports.counter = functions.database.ref('/v2/results/{projectId}/{groupId}/{use
10767
})
10868
promises.push(taskContributionCount)
10969

110-
const contributions = groupContributionsRef.once('value')
111-
.then((dataSnapshot) => {
112-
if (dataSnapshot.exists()) {
113-
return null
114-
}
115-
else {
116-
const data = {
117-
'startTime': result['startTime'],
118-
'endTime': result['endTime']
119-
}
120-
return groupContributionsRef.set(data)
121-
}
122-
})
123-
promises.push(contributions)
70+
// Counters for tasks and groups per user and per project
71+
const projectGroupContributionCount = projectGroupContributionCountRef.transaction((currentCount) => {
72+
return currentCount + 1
73+
});
74+
promises.push(projectGroupContributionCount)
12475

125-
// counters for tasks and groups per user and per project
12676
const projectTaskContributionCount = numberOfTasksRef.once('value')
12777
.then((dataSnapshot) => {
12878
const numberOfTasks = dataSnapshot.val()
@@ -135,11 +85,31 @@ exports.counter = functions.database.ref('/v2/results/{projectId}/{groupId}/{use
13585
})
13686
promises.push(projectTaskContributionCount)
13787

88+
const contributions = groupContributionsRef.once('value')
89+
.then((dataSnapshot) => {
90+
if (dataSnapshot.exists()) {
91+
return null
92+
}
93+
else {
94+
const data = {
95+
'startTime': result['startTime'],
96+
'endTime': result['endTime']
97+
}
98+
return groupContributionsRef.set(data)
99+
}
100+
})
101+
promises.push(contributions)
102+
138103
// Counter for groups
139-
const projectGroupContributionCount = projectGroupContributionCountRef.transaction((currentCount) => {
104+
const groupFinishedCount = groupFinishedCountRef.transaction((currentCount) => {
140105
return currentCount + 1
141-
});
142-
promises.push(projectGroupContributionCount)
106+
})
107+
promises.push(groupFinishedCount)
108+
109+
const groupRequiredCount = groupRequiredCountRef.transaction((currentCount) => {
110+
return currentCount - 1
111+
})
112+
promises.push(groupRequiredCount)
143113

144114
// // TODO: Does not work
145115
// const timeSpentMapping = timeSpentMappingRef.set((timeSpentMapping) => {
@@ -163,6 +133,21 @@ exports.counter = functions.database.ref('/v2/results/{projectId}/{groupId}/{use
163133
})
164134

165135

136+
exports.counter_2 = functions.database.ref('/v2/users/{userId}/contributions/{projectId}/').onCreate((snapshot, context) => {
137+
// Firebase Realtime Database references
138+
const contributorCountRef = admin.database().ref('/v2/projects/'+context.params.projectId+'/contributorCount')
139+
const projectContributionCountRef = admin.database().ref('/v2/users/'+context.params.userId+'/projectContributionCount')
140+
141+
projectContributionCountRef.transaction((currentCount) => {
142+
return currentCount + 1
143+
})
144+
contributorCountRef.transaction((currentCount) => {
145+
return currentCount + 1
146+
})
147+
})
148+
149+
150+
166151
// Increment project.resultCount by group.numberOfTasks.
167152
// Or (Depending of increase or decrease of group.RequiredCount)
168153
// Increment project.resultCount by group.numberOfTasks
@@ -291,4 +276,4 @@ exports.decProjectProgress = functions.database.ref('/v2/projects/{projectId}/re
291276
})
292277
})
293278
return projectProgress
294-
})
279+
})

0 commit comments

Comments
 (0)