Skip to content

Commit d5b0768

Browse files
authored
Merge pull request #423 from mapswipe/firebase-counter
Fix for "Project Contributor Count is broken" #420
2 parents 7fe31ac + 2bdf8fb commit d5b0768

File tree

2 files changed

+59
-76
lines changed

2 files changed

+59
-76
lines changed

firebase/functions/index.js

Lines changed: 51 additions & 69 deletions
Original file line numberDiff line numberDiff line change
@@ -34,62 +34,19 @@ exports.counter = functions.database.ref('/v2/results/{projectId}/{groupId}/{use
3434
const groupRequiredCountRef = admin.database().ref('/v2/groups/'+context.params.projectId+'/'+context.params.groupId+'/requiredCount')
3535
const numberOfTasksRef = admin.database().ref('/v2/groups/'+context.params.projectId+'/'+context.params.groupId+'/numberOfTasks')
3636

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')
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')
4544

4645
const startTimeRef = admin.database().ref('/v2/results/'+context.params.projectId+'/'+context.params.groupId+'/'+context.params.userId+'/startTime')
4746
const endTimeRef = admin.database().ref('/v2/results/'+context.params.projectId+'/'+context.params.groupId+'/'+context.params.userId+'/endTime')
4847
const timeSpentMappingRef = admin.database().ref('/v2/results/'+context.params.projectId+'/'+context.params.groupId+'/'+context.params.userId+'/timeSpentMappingRef')
4948

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-
7949
// 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-
9350
const groupContributionCount = groupContributionCountRef.transaction((currentCount) => {
9451
return currentCount + 1
9552
});
@@ -107,22 +64,12 @@ exports.counter = functions.database.ref('/v2/results/{projectId}/{groupId}/{use
10764
})
10865
promises.push(taskContributionCount)
10966

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)
67+
// Counters for tasks and groups per user and per project
68+
const projectGroupContributionCount = projectGroupContributionCountRef.transaction((currentCount) => {
69+
return currentCount + 1
70+
});
71+
promises.push(projectGroupContributionCount)
12472

125-
// counters for tasks and groups per user and per project
12673
const projectTaskContributionCount = numberOfTasksRef.once('value')
12774
.then((dataSnapshot) => {
12875
const numberOfTasks = dataSnapshot.val()
@@ -135,11 +82,31 @@ exports.counter = functions.database.ref('/v2/results/{projectId}/{groupId}/{use
13582
})
13683
promises.push(projectTaskContributionCount)
13784

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

144111
// // TODO: Does not work
145112
// const timeSpentMapping = timeSpentMappingRef.set((timeSpentMapping) => {
@@ -163,6 +130,21 @@ exports.counter = functions.database.ref('/v2/results/{projectId}/{groupId}/{use
163130
})
164131

165132

133+
exports.counter_2 = functions.database.ref('/v2/users/{userId}/contributions/{projectId}/').onCreate((snapshot, context) => {
134+
// Firebase Realtime Database references
135+
const contributorCountRef = admin.database().ref('/v2/projects/'+context.params.projectId+'/contributorCount')
136+
const projectContributionCountRef = admin.database().ref('/v2/users/'+context.params.userId+'/projectContributionCount')
137+
138+
projectContributionCountRef.transaction((currentCount) => {
139+
return currentCount + 1
140+
})
141+
contributorCountRef.transaction((currentCount) => {
142+
return currentCount + 1
143+
})
144+
})
145+
146+
147+
166148
// Increment project.resultCount by group.numberOfTasks.
167149
// Or (Depending of increase or decrease of group.RequiredCount)
168150
// Increment project.resultCount by group.numberOfTasks
@@ -291,4 +273,4 @@ exports.decProjectProgress = functions.database.ref('/v2/projects/{projectId}/re
291273
})
292274
})
293275
return projectProgress
294-
})
276+
})

mapswipe_workers/mapswipe_workers/project_types/base/project.py

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -50,26 +50,27 @@ def __init__(self, project_draft):
5050
True if successful. False otherwise.
5151
"""
5252

53+
self.contributorCount = 0
5354
self.created = dt.datetime.now()
5455
self.createdBy = project_draft["createdBy"]
55-
self.groups = list()
5656
self.groupMaxSize = project_draft.get("groupMaxSize", 0)
57-
self.resultCount = 0
57+
self.groups = list()
5858
self.image = project_draft["image"]
5959
self.isFeatured = False
6060
self.lookFor = project_draft["lookFor"]
6161
self.name = project_draft["name"]
62-
self.requiredResults = 0
6362
self.progress = 0
6463
self.projectDetails = project_draft["projectDetails"]
6564
self.projectId = project_draft["projectDraftId"]
66-
self.projectType = int(project_draft["projectType"])
67-
self.verificationNumber = project_draft["verificationNumber"]
68-
self.projectTopic = project_draft.get("projectTopic", None)
69-
self.projectRegion = project_draft.get("projectRegion", None)
7065
self.projectNumber = project_draft.get("projectNumber", None)
66+
self.projectRegion = project_draft.get("projectRegion", None)
67+
self.projectTopic = project_draft.get("projectTopic", None)
68+
self.projectType = int(project_draft["projectType"])
7169
self.requestingOrganisation = project_draft.get("requestingOrganisation", None)
70+
self.requiredResults = 0
71+
self.resultCount = 0
7272
self.teamId = project_draft.get("teamId", None)
73+
self.verificationNumber = project_draft["verificationNumber"]
7374
if not self.teamId:
7475
self.status = "inactive" # this is a public project
7576
else:

0 commit comments

Comments
 (0)