Skip to content

Commit efe40e3

Browse files
authored
Merge pull request #784 from hackjunction/STAG
Update - Syncing PROD with STAG
2 parents 24d6ee8 + cddb18a commit efe40e3

88 files changed

Lines changed: 1684 additions & 1807 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

backend/common/services/sendgrid.js

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -164,7 +164,10 @@ const SendgridService = {
164164
header_image_url = event.coverImage.url
165165
}
166166
let msg
167-
if (event.eventType === EventTypes.physical.id) {
167+
if (
168+
event.eventType === EventTypes.physical.id ||
169+
event.eventType === EventTypes.hybrid.id
170+
) {
168171
msg = SendgridService.buildTemplateMessage(
169172
user.email,
170173
global.gConfig.SENDGRID_GENERIC_TEMPLATE,
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
const mongoose = require('mongoose')
2+
const Promise = require('bluebird')
3+
4+
module.exports = {
5+
index: 28,
6+
name: '28-add-gavel-login-to-registrations',
7+
description: 'Add gavel login link to registrations',
8+
run: async () => {
9+
const addGavelLogin = await mongoose.model('Registration').updateMany(
10+
{ gavelLogin: { $exists: false } },
11+
{
12+
$set: {
13+
gavelLogin: '',
14+
},
15+
},
16+
)
17+
18+
console.log(
19+
'Done adding gavel login link to registrations',
20+
addGavelLogin.n,
21+
addGavelLogin.nModified,
22+
)
23+
24+
return Promise.resolve()
25+
},
26+
}

backend/migrations/index.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ const migrations = [
3131
require('./25-add-emailConfig-to-event'),
3232
require('./26-fix-empty-senderEmail-in-event'),
3333
require('./27-add-experimental-flag-to-events'),
34+
require('./28-add-gavel-login-to-registrations'),
3435
]
3536

3637
const run = async () => {

backend/modules/event/controller.js

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,15 @@ controller.isEventOnline = id => {
4242
})
4343
}
4444

45+
controller.isEventHybrid = id => {
46+
Event.findById(id).then(event => {
47+
if (event.eventType === 'hybrid') {
48+
return true
49+
}
50+
return false
51+
})
52+
}
53+
4554
controller.getUnapprovedEvents = () => {
4655
return Event.find({ approved: false })
4756
}

backend/modules/event/graphql.js

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -714,7 +714,10 @@ const Resolvers = {
714714
)
715715
},
716716
_eventLocationFormatted: parent => {
717-
if (parent.eventType === 'physical') {
717+
if (
718+
parent.eventType === 'physical' ||
719+
parent.eventType === 'hybrid'
720+
) {
718721
return `${parent.eventLocation.city}, ${parent.eventLocation.country}`
719722
}
720723
return 'Online'

backend/modules/event/model.js

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -105,9 +105,12 @@ const EventSchema = new mongoose.Schema({
105105
type: AddressSchema.mongoose,
106106
required: [
107107
function () {
108-
return this.eventType === EventTypes.physical.id
108+
return (
109+
this.eventType === EventTypes.physical.id ||
110+
this.eventType === EventTypes.hybrid.id
111+
)
109112
},
110-
`is required for physical events`,
113+
`is required for physical or hydrid events`,
111114
],
112115
},
113116
tracksEnabled: false,
@@ -326,7 +329,7 @@ const EventSchema = new mongoose.Schema({
326329
},
327330
senderName: {
328331
type: String,
329-
default: '',
332+
default: 'Junction team',
330333
trim: true,
331334
maxLength: 100,
332335
},

backend/modules/project/controller.js

Lines changed: 59 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
1+
const _ = require('lodash')
12
const yup = require('yup')
23
const bcrypt = require('bcrypt')
34
const Promise = require('bluebird')
45
const { ProjectSchema } = require('@hackjunction/shared')
56
const Project = require('./model')
67
const { ForbiddenError } = require('../../common/errors/errors')
78
const TeamController = require('../team/controller')
8-
const upload = require('../../misc/gridfs').upload
99

1010
const controller = {}
1111

@@ -60,9 +60,7 @@ controller.createProjectForEventAndTeam = async (event, team, data) => {
6060

6161
controller.updateProjectForEventAndTeam = async (event, team, data) => {
6262
const schema = yup.object().shape(ProjectSchema(event))
63-
console.log('data :>> ', data)
6463
const validatedData = await schema.validate(data, { stripUnknown: true })
65-
console.log('validatedData :>> ', validatedData)
6664
const projects = await controller.getProjectsByEventAndTeam(
6765
event._id,
6866
team._id,
@@ -75,11 +73,11 @@ controller.updateProjectForEventAndTeam = async (event, team, data) => {
7573

7674
controller.generateChallengeLink = async (event, challengeSlug) => {
7775
const hashed = await bcrypt.hash(challengeSlug, global.gConfig.HASH_SALT)
78-
// console.log('inhere challenge :>> ')
7976
return {
8077
hash: hashed,
81-
link: `${global.gConfig.FRONTEND_URL}/projects/${event.slug
82-
}/challenge/${encodeURIComponent(hashed)}`,
78+
link: `${global.gConfig.FRONTEND_URL}/projects/${
79+
event.slug
80+
}/challenge/${encodeURIComponent(hashed)}`,
8381
}
8482
}
8583

@@ -88,8 +86,9 @@ controller.generateTrackLink = async (event, trackSlug) => {
8886
// console.log('inhere track :>> ')
8987
return {
9088
hash: hashed,
91-
link: `${global.gConfig.FRONTEND_URL}/projects/${event.slug
92-
}/tracks/${encodeURIComponent(hashed)}`,
89+
link: `${global.gConfig.FRONTEND_URL}/projects/${
90+
event.slug
91+
}/tracks/${encodeURIComponent(hashed)}`,
9392
}
9493
}
9594

@@ -175,7 +174,14 @@ controller.validateToken = async (event, token) => {
175174
if (Challengematches.length === 0 && Trackmatches === 0) {
176175
throw new ForbiddenError('Invalid token')
177176
}
178-
return true
177+
console.log('Matches :>> ', Challengematches, Trackmatches)
178+
if (
179+
(Array.isArray(Challengematches) && Challengematches.length > 0) ||
180+
(Array.isArray(Trackmatches) && Trackmatches.length > 0)
181+
) {
182+
return true
183+
}
184+
return false
179185
}
180186

181187
controller.getFinalProjects = async event => {
@@ -211,3 +217,47 @@ controller.getFinalists = event => {
211217
return Project.find({ _id: { $in: event.finalists } })
212218
}
213219
module.exports = controller
220+
221+
controller.getDataForPartnerReviewing = async (event, user) => {
222+
const data = {}
223+
const teams = await TeamController.getAllTeamsForEvent(event._id)
224+
const projects = await controller.getProjectPreviewsByEvent(event._id)
225+
const projectsWithExistingTeamsAndFinal = _.filter(projects, project => {
226+
if (project.status === 'final') {
227+
const teamFound = _.find(teams, team => {
228+
return `${team._id}` === `${project.team}`
229+
})
230+
if (teamFound) {
231+
return project
232+
}
233+
}
234+
})
235+
236+
if (event.scoreCriteriaSettings.reviewAnyChallenge) {
237+
data.projects = projectsWithExistingTeamsAndFinal
238+
} else {
239+
const challengeOrg = _.find(
240+
event.recruiters,
241+
recruiter => recruiter.recruiterId === user.sub,
242+
)
243+
if (challengeOrg) {
244+
const challengesArray = []
245+
event.challenges.map(challenge => {
246+
if (challenge.partner === challengeOrg.organization) {
247+
challengesArray.push(challenge.slug)
248+
}
249+
})
250+
const projectsFilteredByChallenge = []
251+
252+
projectsWithExistingTeamsAndFinal.map(project => {
253+
if (_.includes(challengesArray, project.challenges[0])) {
254+
projectsFilteredByChallenge.push(project)
255+
}
256+
})
257+
data.projects = projectsFilteredByChallenge
258+
} else {
259+
data.projects = []
260+
}
261+
}
262+
return data
263+
}

backend/modules/project/model.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,7 @@ ProjectSchema.post('save', async function (doc, next) {
125125
*/
126126
case ReviewingMethods.gavelPeerReview.id: {
127127
GavelController.ensureGavelProject(doc)
128-
console.log("saved as gavel project")
128+
console.log('saved as gavel project')
129129
break
130130
}
131131
default: {

backend/modules/project/routes.js

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
const express = require('express')
2-
32
const router = express.Router()
43
const asyncHandler = require('express-async-handler')
54

@@ -12,6 +11,7 @@ const {
1211
canSubmitProject,
1312
isEventOrganiser,
1413
getEventFromParams,
14+
isEventPartner,
1515
} = require('../../common/middleware/events')
1616

1717
router.route('/id/:projectId').get(
@@ -36,6 +36,22 @@ router
3636
}),
3737
)
3838

39+
router
40+
.route('/:slug/partner-review')
41+
/** Get projects for partner review, only if their status is final, have a team and based on challenges */
42+
.get(
43+
hasToken,
44+
isEventPartner,
45+
getEventFromParams,
46+
asyncHandler(async (req, res) => {
47+
const data = await ProjectController.getDataForPartnerReviewing(
48+
req.event,
49+
req.user,
50+
)
51+
return res.status(200).json(data)
52+
}),
53+
)
54+
3955
router
4056
.route('/:slug/validate')
4157
/** Validate project before submission on UI, non-blocking (doesn't prevent saving to db) */

backend/modules/project_score/controller.js

Lines changed: 14 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
const _ = require('lodash')
12
const Event = require('../event/model')
23
const Project = require('../project/model')
34
const { ProjectScore } = require('./model')
@@ -25,7 +26,6 @@ controller.addProjectScore = async score => {
2526
}
2627
projectScore.averageScore = averageScore
2728
}
28-
console.log('ProjectScore from controller', projectScore)
2929
return projectScore.save()
3030
}
3131

@@ -54,7 +54,6 @@ controller.updateProjectScore = async (id, updatedProjectScore) => {
5454
}
5555
projectScore.averageScore = averageScore
5656
}
57-
console.log('updated project with token score', projectScore)
5857
await projectScore.save()
5958
return projectScore
6059
}
@@ -71,7 +70,7 @@ controller.getScoresByEventAndTeamId = (eventId, teamId) => {
7170
})
7271
}
7372

74-
controller.getScoreByProjectId = (
73+
controller.getScoreByProjectId = async (
7574
projectId,
7675
challenge = null,
7776
track = null,
@@ -88,6 +87,18 @@ controller.getScoreByProjectId = (
8887
return ProjectScore.find(query)
8988
}
9089

90+
controller.getScoreForProjectByReviewerId = async (projectId, reviewerId) => {
91+
const testProjectScore = await controller.getScoreByProjectId(projectId)
92+
if (testProjectScore && testProjectScore.length > 0) {
93+
testProjectScore[0].reviewers.forEach(reviewer => {})
94+
const scoreFromReviewer = _.find(
95+
testProjectScore[0].reviewers,
96+
reviewerScore => reviewerScore.userId === reviewerId,
97+
)
98+
return scoreFromReviewer
99+
}
100+
}
101+
91102
controller.getPublicScores = async eventId => {
92103
return ProjectScore.find({ event: eventId })
93104
.populate({ path: 'event', select: 'name' })
@@ -101,11 +112,8 @@ const limitDecimals = (number, decimalPlaces) => {
101112

102113
const averageScoreCalculation = (reviewers, globalScore) => {
103114
const allScores = reviewers.map(review => review.score)
104-
console.log('All scores from reviewers', allScores)
105115
allScores.push(globalScore)
106-
console.log('All scores with global score', allScores)
107116
let scoreCount = allScores.length
108-
console.log('Score count', scoreCount)
109117

110118
const scoreSum = allScores.reduce((acc, current) => {
111119
if (current && current > 0) {
@@ -116,15 +124,10 @@ const averageScoreCalculation = (reviewers, globalScore) => {
116124
}
117125
}, 0)
118126

119-
console.log('Score sum', scoreSum)
120-
console.log('Score count after', scoreCount)
121127
let finalScore = scoreSum / scoreCount
122128
if (!Number.isInteger(finalScore)) {
123129
finalScore = limitDecimals(finalScore, 2)
124-
console.log('Not an integer')
125130
}
126-
console.log('Score to submit', finalScore)
127-
console.log('Score type', typeof finalScore)
128131
return finalScore
129132
}
130133

@@ -139,39 +142,6 @@ controller.updateProjectScoreWithReviewers = async (
139142
projectScore.track = updatedProjectScore.track
140143
projectScore.challenge = updatedProjectScore.challenge
141144
projectScore.reviewers = updatedProjectScore.reviewers
142-
console.log(
143-
'Updated project score from controller BEFORE save',
144-
projectScore,
145-
)
146-
147-
// const allScores = projectScore.reviewers.map(review => review.score)
148-
// console.log('All scores from reviewers', allScores)
149-
// allScores.push(projectScore.score)
150-
// console.log('All scores with global score', allScores)
151-
// let scoreCount = allScores.length
152-
// console.log('Score count', scoreCount)
153-
154-
// const scoreSum = allScores.reduce((acc, current) => {
155-
// if (current && current > 0) {
156-
// return acc + current
157-
// } else {
158-
// scoreCount = scoreCount - 1
159-
// return acc
160-
// }
161-
// }, 0)
162-
// function limitDecimals(number, decimalPlaces) {
163-
// const multiplier = Math.pow(10, decimalPlaces)
164-
// return Math.floor(number * multiplier) / multiplier
165-
// }
166-
// console.log('Score sum', scoreSum)
167-
// console.log('Score count after', scoreCount)
168-
// let finalScore = scoreSum / scoreCount
169-
// if (!Number.isInteger(finalScore)) {
170-
// finalScore = limitDecimals(finalScore, 2)
171-
// console.log('Not an integer')
172-
// }
173-
// console.log('Score to submit', finalScore)
174-
// console.log('Score type', typeof finalScore)
175145

176146
projectScore.averageScore = projectScore.score
177147

@@ -191,10 +161,6 @@ controller.updateProjectScoreWithReviewers = async (
191161
// projectScore.averageScore = projectScore.score +
192162

193163
await projectScore.save()
194-
console.log(
195-
'Updated project score from controller AFTER save',
196-
projectScore,
197-
)
198164
return projectScore
199165
}
200166

0 commit comments

Comments
 (0)