@@ -5,84 +5,70 @@ const functions = require('firebase-functions')
55const admin = require ( 'firebase-admin' )
66admin . 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 contributions across Projects
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 contributions on a distict 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,10 +119,10 @@ 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 const promises_2 = [ ]
135-
136126 // Firebase Realtime Database references
137127 const contributorCountRef = admin . database ( ) . ref ( '/v2/projects/' + context . params . projectId + '/contributorCount' )
138128 const projectContributionCountRef = admin . database ( ) . ref ( '/v2/users/' + context . params . userId + '/projectContributionCount' )
@@ -150,8 +140,6 @@ exports.counter_2 = functions.database.ref('/v2/users/{userId}/contributions/{pr
150140 return Promise . all ( promises_2 )
151141} )
152142
153-
154-
155143// Increment project.resultCount by group.numberOfTasks.
156144// Or (Depending of increase or decrease of group.RequiredCount)
157145// Increment project.resultCount by group.numberOfTasks
@@ -162,7 +150,7 @@ exports.counter_2 = functions.database.ref('/v2/users/{userId}/contributions/{pr
162150exports . projectCounter = functions . database . ref ( '/v2/groups/{projectId}/{groupId}/requiredCount/' ) . onUpdate ( ( groupRequiredCount , context ) => {
163151 const groupNumberOfTasksRef = admin . database ( ) . ref ( '/v2/groups/' + context . params . projectId + '/' + context . params . groupId + '/numberOfTasks' )
164152 const projectResultCountRef = admin . database ( ) . ref ( '/v2/projects/' + context . params . projectId + '/resultCount' )
165- const projectRequiredResultsRef = admin . database ( ) . ref ( '/v2/projects/' + context . params . projectId + '/requiredResults' )
153+ const projectRequiredResultsRef = admin . database ( ) . ref ( '/v2/projects/' + context . params . projectId + '/requiredResults' )
166154
167155 // if requiredCount ref does not contain any data do nothing
168156 if ( ! groupRequiredCount . after . exists ( ) ) {
@@ -237,7 +225,7 @@ exports.calcGroupProgress = functions.database.ref('/v2/groups/{projectId}/{grou
237225// Gets triggered when project.resultCount gets changed.
238226exports . incProjectProgress = functions . database . ref ( '/v2/projects/{projectId}/resultCount/' ) . onUpdate ( ( projectResultCount , context ) => {
239227 const projectRequiredResultsRef = admin . database ( ) . ref ( '/v2/projects/' + context . params . projectId + '/requiredResults' )
240- const projectProgressRef = admin . database ( ) . ref ( '/v2/projects/' + context . params . projectId + '/progress' )
228+ const projectProgressRef = admin . database ( ) . ref ( '/v2/projects/' + context . params . projectId + '/progress' )
241229
242230 // if requiredCount ref does not contain any data do nothing
243231 if ( ! projectResultCount . after . exists ( ) ) {
@@ -263,7 +251,7 @@ exports.incProjectProgress = functions.database.ref('/v2/projects/{projectId}/re
263251exports . decProjectProgress = functions . database . ref ( '/v2/projects/{projectId}/requiredResults/' ) . onUpdate ( ( projectRequiredResults , context ) => {
264252
265253 const projectResultCountRef = admin . database ( ) . ref ( '/v2/projects/' + context . params . projectId + '/resultCount' )
266- const projectProgressRef = admin . database ( ) . ref ( '/v2/projects/' + context . params . projectId + '/progress' )
254+ const projectProgressRef = admin . database ( ) . ref ( '/v2/projects/' + context . params . projectId + '/progress' )
267255
268256 // if requiredCount ref does not contain any data do nothing
269257 if ( ! projectRequiredResults . after . exists ( ) ) {
0 commit comments