Skip to content

Commit 4949987

Browse files
author
matthias_schaub
committed
Make code more readable.
1 parent 2bdf8fb commit 4949987

File tree

1 file changed

+38
-49
lines changed

1 file changed

+38
-49
lines changed

firebase/functions/index.js

Lines changed: 38 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -5,84 +5,70 @@ const functions = require('firebase-functions')
55
const admin = require('firebase-admin')
66
admin.initializeApp()
77

8-
// Increments or Decrements various counter
9-
//
10-
// Gets triggered when new results of the group are written to the database.
11-
exports.counter = functions.database.ref('/v2/results/{projectId}/{groupId}/{userId}/').onCreate((snapshot, context) => {
12-
const promises = []
8+
// Increments or decrements various counters of User and Group once new reults are pushed.
9+
// Gets triggered when new results of a group are written to the database.
10+
exports.resultCounter = functions.database.ref('/v2/results/{projectId}/{groupId}/{userId}/').onCreate((snapshot, context) => {
11+
const promises = [] // List of promises to return
1312
const result = snapshot.val()
1413

1514
// if result ref does not contain all required attributes we don't updated counters
1615
// e.g. due to some error when uploading from client
1716
if (!result.hasOwnProperty('results')) {
18-
console.log('no results attribute for /v2/results/'+context.params.projectId+'/'+context.params.groupId+'/'+context.params.userId )
17+
console.log('no results attribute for ' + snapshot.ref)
1918
console.log('will not update counters')
2019
return null
2120
} else if (!result.hasOwnProperty('endTime')) {
22-
console.log('no endTime attribute for /v2/results/'+context.params.projectId+'/'+context.params.groupId+'/'+context.params.userId )
21+
console.log('no endTime attribute for ' + snapshot.ref)
2322
console.log('will not update counters')
2423
return null
2524
} else if (!result.hasOwnProperty('startTime')) {
26-
console.log('no startTime attribute for /v2/results/'+context.params.projectId+'/'+context.params.groupId+'/'+context.params.userId )
25+
console.log('no startTime attribute for ' + snapshot.ref)
2726
console.log('will not update counters')
2827
return null
2928
}
3029

31-
3230
// Firebase Realtime Database references
33-
const groupFinishedCountRef = admin.database().ref('/v2/groups/'+context.params.projectId+'/'+context.params.groupId+'/finishedCount')
34-
const groupRequiredCountRef = admin.database().ref('/v2/groups/'+context.params.projectId+'/'+context.params.groupId+'/requiredCount')
35-
const numberOfTasksRef = admin.database().ref('/v2/groups/'+context.params.projectId+'/'+context.params.groupId+'/numberOfTasks')
36-
37-
const taskContributionCountRef = admin.database().ref('/v2/users/'+context.params.userId+'/taskContributionCount')
38-
const groupContributionCountRef = admin.database().ref('/v2/users/'+context.params.userId+'/groupContributionCount')
39-
const projectContributionsRef = admin.database().ref('/v2/users/'+context.params.userId+'/contributions/'+context.params.projectId)
40-
const groupContributionsRef = admin.database().ref('/v2/users/'+context.params.userId+'/contributions/'+context.params.projectId +'/'+context.params.groupId)
41-
const projectTaskContributionCountRef = admin.database().ref('/v2/users/'+context.params.userId+'/contributions/'+context.params.projectId+'/taskContributionCount')
42-
const projectGroupContributionCountRef = admin.database().ref('/v2/users/'+context.params.userId+'/contributions/'+context.params.projectId+'/groupContributionCount')
43-
const totalTimeSpentMappingRef = admin.database().ref('/v2/users/'+context.params.userId+'/timeSpentMapping')
31+
const groupRef = admin.database().ref('/v2/groups/' + context.params.projectId + '/' + context.params.groupId)
32+
const userRef = admin.database().ref('/v2/users/' + context.params.userId)
33+
const userContributionRef = userRef.child('contributions/' + context.params.projectId)
4434

45-
const startTimeRef = admin.database().ref('/v2/results/'+context.params.projectId+'/'+context.params.groupId+'/'+context.params.userId+'/startTime')
46-
const endTimeRef = admin.database().ref('/v2/results/'+context.params.projectId+'/'+context.params.groupId+'/'+context.params.userId+'/endTime')
47-
const timeSpentMappingRef = admin.database().ref('/v2/results/'+context.params.projectId+'/'+context.params.groupId+'/'+context.params.userId+'/timeSpentMappingRef')
48-
49-
// Counter for users
50-
const groupContributionCount = groupContributionCountRef.transaction((currentCount) => {
35+
// Counter for User
36+
const totalGroupContributionCount = userRef.child('groupContributionCount').transaction((currentCount) => {
5137
return currentCount + 1
5238
});
53-
promises.push(groupContributionCount)
39+
promises.push(totalGroupContributionCount)
5440

55-
const taskContributionCount = numberOfTasksRef.once('value')
41+
const totalTaskContributionCount = groupRef.child('numberOfTasks').once('value')
5642
.then((dataSnapshot) => {
5743
const numberOfTasks = dataSnapshot.val()
5844
return numberOfTasks
5945
})
6046
.then((numberOfTasks) => {
61-
return taskContributionCountRef.transaction((currentCount) => {
47+
return userRef.child('taskContributionCount').transaction((currentCount) => {
6248
return currentCount + numberOfTasks
6349
})
6450
})
65-
promises.push(taskContributionCount)
51+
promises.push(totalTaskContributionCount)
6652

67-
// Counters for tasks and groups per user and per project
68-
const projectGroupContributionCount = projectGroupContributionCountRef.transaction((currentCount) => {
53+
// Counter for User per Project
54+
const groupContributionCount = userContributionRef.child('groupContributionCount').transaction((currentCount) => {
6955
return currentCount + 1
7056
});
71-
promises.push(projectGroupContributionCount)
57+
promises.push(groupContributionCount)
7258

73-
const projectTaskContributionCount = numberOfTasksRef.once('value')
59+
const taskContributionCount = groupRef.child('numberOfTasks').once('value')
7460
.then((dataSnapshot) => {
7561
const numberOfTasks = dataSnapshot.val()
7662
return numberOfTasks
7763
})
7864
.then((numberOfTasks) => {
79-
return projectTaskContributionCountRef.transaction((currentCount) => {
65+
return userContributionRef.child('taskContributionCount').transaction((currentCount) => {
8066
return currentCount + numberOfTasks
8167
})
8268
})
83-
promises.push(projectTaskContributionCount)
69+
promises.push(taskContributionCount)
8470

85-
const contributions = groupContributionsRef.once('value')
71+
const contributionTime = userContributionRef.child(context.params.groupId).once('value')
8672
.then((dataSnapshot) => {
8773
if (dataSnapshot.exists()) {
8874
return null
@@ -92,23 +78,27 @@ exports.counter = functions.database.ref('/v2/results/{projectId}/{groupId}/{use
9278
'startTime': result['startTime'],
9379
'endTime': result['endTime']
9480
}
95-
return groupContributionsRef.set(data)
81+
return userContributionRef.child(context.params.groupId).set(data)
9682
}
9783
})
98-
promises.push(contributions)
84+
promises.push(contributionTime)
9985

100-
// Counter for groups
101-
const groupFinishedCount = groupFinishedCountRef.transaction((currentCount) => {
86+
// Counter for Group
87+
const groupFinishedCount = groupRef.child('finishedCount').transaction((currentCount) => {
10288
return currentCount + 1
10389
})
10490
promises.push(groupFinishedCount)
10591

106-
const groupRequiredCount = groupRequiredCountRef.transaction((currentCount) => {
92+
const groupRequiredCount = groupRef.child('requiredCount').transaction((currentCount) => {
10793
return currentCount - 1
10894
})
10995
promises.push(groupRequiredCount)
11096

11197
// // TODO: Does not work
98+
// const startTimeRef = admin.database().ref('/v2/results/'+context.params.projectId+'/'+context.params.groupId+'/'+context.params.userId+'/startTime')
99+
// const endTimeRef = admin.database().ref('/v2/results/'+context.params.projectId+'/'+context.params.groupId+'/'+context.params.userId+'/endTime')
100+
// const timeSpentMappingRef = admin.database().ref('/v2/results/'+context.params.projectId+'/'+context.params.groupId+'/'+context.params.userId+'/timeSpentMappingRef')
101+
//
112102
// const timeSpentMapping = timeSpentMappingRef.set((timeSpentMapping) => {
113103
// const startTime = startTimeRef.once('value')
114104
// .then((startTimePromise) => {
@@ -129,8 +119,9 @@ exports.counter = functions.database.ref('/v2/results/{projectId}/{groupId}/{use
129119
return Promise.all(promises)
130120
})
131121

132-
133-
exports.counter_2 = functions.database.ref('/v2/users/{userId}/contributions/{projectId}/').onCreate((snapshot, context) => {
122+
// Counters to keep track of contributors and project contributions of Project and User.
123+
// Gets triggered when User contributes to new project.
124+
exports.contributionCounter = functions.database.ref('/v2/users/{userId}/contributions/{projectId}/').onCreate((snapshot, context) => {
134125
// Firebase Realtime Database references
135126
const contributorCountRef = admin.database().ref('/v2/projects/'+context.params.projectId+'/contributorCount')
136127
const projectContributionCountRef = admin.database().ref('/v2/users/'+context.params.userId+'/projectContributionCount')
@@ -143,8 +134,6 @@ exports.counter_2 = functions.database.ref('/v2/users/{userId}/contributions/{pr
143134
})
144135
})
145136

146-
147-
148137
// Increment project.resultCount by group.numberOfTasks.
149138
// Or (Depending of increase or decrease of group.RequiredCount)
150139
// Increment project.resultCount by group.numberOfTasks
@@ -155,7 +144,7 @@ exports.counter_2 = functions.database.ref('/v2/users/{userId}/contributions/{pr
155144
exports.projectCounter = functions.database.ref('/v2/groups/{projectId}/{groupId}/requiredCount/').onUpdate((groupRequiredCount, context) => {
156145
const groupNumberOfTasksRef = admin.database().ref('/v2/groups/'+context.params.projectId+'/'+context.params.groupId+'/numberOfTasks')
157146
const projectResultCountRef = admin.database().ref('/v2/projects/'+context.params.projectId+'/resultCount')
158-
const projectRequiredResultsRef = admin.database().ref('/v2/projects/'+context.params.projectId+'/requiredResults')
147+
const projectRequiredResultsRef = admin.database().ref('/v2/projects/'+context.params.projectId+'/requiredResults')
159148

160149
// if requiredCount ref does not contain any data do nothing
161150
if (!groupRequiredCount.after.exists()) {
@@ -230,7 +219,7 @@ exports.calcGroupProgress = functions.database.ref('/v2/groups/{projectId}/{grou
230219
// Gets triggered when project.resultCount gets changed.
231220
exports.incProjectProgress = functions.database.ref('/v2/projects/{projectId}/resultCount/').onUpdate((projectResultCount, context) => {
232221
const projectRequiredResultsRef = admin.database().ref('/v2/projects/'+context.params.projectId+'/requiredResults')
233-
const projectProgressRef = admin.database().ref('/v2/projects/'+context.params.projectId+'/progress')
222+
const projectProgressRef = admin.database().ref('/v2/projects/'+context.params.projectId+'/progress')
234223

235224
// if requiredCount ref does not contain any data do nothing
236225
if (!projectResultCount.after.exists()) {
@@ -256,7 +245,7 @@ exports.incProjectProgress = functions.database.ref('/v2/projects/{projectId}/re
256245
exports.decProjectProgress = functions.database.ref('/v2/projects/{projectId}/requiredResults/').onUpdate((projectRequiredResults, context) => {
257246

258247
const projectResultCountRef = admin.database().ref('/v2/projects/'+context.params.projectId+'/resultCount')
259-
const projectProgressRef = admin.database().ref('/v2/projects/'+context.params.projectId+'/progress')
248+
const projectProgressRef = admin.database().ref('/v2/projects/'+context.params.projectId+'/progress')
260249

261250
// if requiredCount ref does not contain any data do nothing
262251
if (!projectRequiredResults.after.exists()) {

0 commit comments

Comments
 (0)