Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
18 commits
Select commit Hold shift + click to select a range
0676faa
Added new type of event, hybrid
wickathou Mar 14, 2024
5ba424e
Added verification to registration gavel login controller to validate…
wickathou Mar 14, 2024
0d8418e
Delete azure-pipelines-production.yml
wickathou Mar 14, 2024
cb2f849
Merge pull request #23 from wickathou/update/multiple-updates
wickathou Mar 14, 2024
1216771
Added styleModifier function to ProjectGridItem to render projects ap…
wickathou Mar 14, 2024
025c6a4
Merge pull request #24 from wickathou/update/multiple-updates
wickathou Mar 14, 2024
34c581a
Merge pull request #779 from wickathou/pre-STAG-14-3-24
wickathou Mar 14, 2024
7e0373c
Added projectId and registrationId properties to exports as organizer
wickathou Mar 14, 2024
591a64d
Merge pull request #780 from wickathou/hotfix/project-participant-exp…
wickathou Mar 14, 2024
c12cefe
Added snackbar error notice to partner review page when fetching proj…
wickathou Mar 18, 2024
cb8b01d
Added optional chaining to partner reviewing page
wickathou Mar 18, 2024
77af2f1
Merge pull request #785 from wickathou/hotfix/project-participant-exp…
wickathou Mar 18, 2024
a5aa099
Modified project controller to return projects for multiple challenge…
wickathou Mar 19, 2024
5666786
Merge pull request #786 from wickathou/fix/partner-review-and-announc…
wickathou Mar 19, 2024
fe49acc
Added votingResults prop to render voting results on winner page for …
wickathou Mar 19, 2024
6b9cc35
Merge pull request #787 from wickathou/hotfix/winner-page-fix
wickathou Mar 19, 2024
2667a1d
Removed unnused packages from RadioScore
wickathou Mar 20, 2024
cddb18a
Merge pull request #788 from wickathou/hotfix/partner-review-scores-n…
wickathou Mar 21, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion backend/common/services/sendgrid.js
Original file line number Diff line number Diff line change
Expand Up @@ -164,7 +164,10 @@ const SendgridService = {
header_image_url = event.coverImage.url
}
let msg
if (event.eventType === EventTypes.physical.id) {
if (
event.eventType === EventTypes.physical.id ||
event.eventType === EventTypes.hybrid.id
) {
msg = SendgridService.buildTemplateMessage(
user.email,
global.gConfig.SENDGRID_GENERIC_TEMPLATE,
Expand Down
26 changes: 26 additions & 0 deletions backend/migrations/28-add-gavel-login-to-registrations.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
const mongoose = require('mongoose')
const Promise = require('bluebird')

module.exports = {
index: 28,
name: '28-add-gavel-login-to-registrations',
description: 'Add gavel login link to registrations',
run: async () => {
const addGavelLogin = await mongoose.model('Registration').updateMany(
{ gavelLogin: { $exists: false } },
{
$set: {
gavelLogin: '',
},
},
)

console.log(
'Done adding gavel login link to registrations',
addGavelLogin.n,
addGavelLogin.nModified,
)

return Promise.resolve()
},
}
1 change: 1 addition & 0 deletions backend/migrations/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ const migrations = [
require('./25-add-emailConfig-to-event'),
require('./26-fix-empty-senderEmail-in-event'),
require('./27-add-experimental-flag-to-events'),
require('./28-add-gavel-login-to-registrations'),
]

const run = async () => {
Expand Down
9 changes: 9 additions & 0 deletions backend/modules/event/controller.js
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,15 @@ controller.isEventOnline = id => {
})
}

controller.isEventHybrid = id => {
Event.findById(id).then(event => {
if (event.eventType === 'hybrid') {
return true
}
return false
})
}

controller.getUnapprovedEvents = () => {
return Event.find({ approved: false })
}
Expand Down
5 changes: 4 additions & 1 deletion backend/modules/event/graphql.js
Original file line number Diff line number Diff line change
Expand Up @@ -714,7 +714,10 @@ const Resolvers = {
)
},
_eventLocationFormatted: parent => {
if (parent.eventType === 'physical') {
if (
parent.eventType === 'physical' ||
parent.eventType === 'hybrid'
) {
return `${parent.eventLocation.city}, ${parent.eventLocation.country}`
}
return 'Online'
Expand Down
9 changes: 6 additions & 3 deletions backend/modules/event/model.js
Original file line number Diff line number Diff line change
Expand Up @@ -105,9 +105,12 @@ const EventSchema = new mongoose.Schema({
type: AddressSchema.mongoose,
required: [
function () {
return this.eventType === EventTypes.physical.id
return (
this.eventType === EventTypes.physical.id ||
this.eventType === EventTypes.hybrid.id
)
},
`is required for physical events`,
`is required for physical or hydrid events`,
],
},
tracksEnabled: false,
Expand Down Expand Up @@ -326,7 +329,7 @@ const EventSchema = new mongoose.Schema({
},
senderName: {
type: String,
default: '',
default: 'Junction team',
trim: true,
maxLength: 100,
},
Expand Down
68 changes: 59 additions & 9 deletions backend/modules/project/controller.js
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
const _ = require('lodash')
const yup = require('yup')
const bcrypt = require('bcrypt')
const Promise = require('bluebird')
const { ProjectSchema } = require('@hackjunction/shared')
const Project = require('./model')
const { ForbiddenError } = require('../../common/errors/errors')
const TeamController = require('../team/controller')
const upload = require('../../misc/gridfs').upload

const controller = {}

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

controller.updateProjectForEventAndTeam = async (event, team, data) => {
const schema = yup.object().shape(ProjectSchema(event))
console.log('data :>> ', data)
const validatedData = await schema.validate(data, { stripUnknown: true })
console.log('validatedData :>> ', validatedData)
const projects = await controller.getProjectsByEventAndTeam(
event._id,
team._id,
Expand All @@ -75,11 +73,11 @@ controller.updateProjectForEventAndTeam = async (event, team, data) => {

controller.generateChallengeLink = async (event, challengeSlug) => {
const hashed = await bcrypt.hash(challengeSlug, global.gConfig.HASH_SALT)
// console.log('inhere challenge :>> ')
return {
hash: hashed,
link: `${global.gConfig.FRONTEND_URL}/projects/${event.slug
}/challenge/${encodeURIComponent(hashed)}`,
link: `${global.gConfig.FRONTEND_URL}/projects/${
event.slug
}/challenge/${encodeURIComponent(hashed)}`,
}
}

Expand All @@ -88,8 +86,9 @@ controller.generateTrackLink = async (event, trackSlug) => {
// console.log('inhere track :>> ')
return {
hash: hashed,
link: `${global.gConfig.FRONTEND_URL}/projects/${event.slug
}/tracks/${encodeURIComponent(hashed)}`,
link: `${global.gConfig.FRONTEND_URL}/projects/${
event.slug
}/tracks/${encodeURIComponent(hashed)}`,
}
}

Expand Down Expand Up @@ -175,7 +174,14 @@ controller.validateToken = async (event, token) => {
if (Challengematches.length === 0 && Trackmatches === 0) {
throw new ForbiddenError('Invalid token')
}
return true
console.log('Matches :>> ', Challengematches, Trackmatches)
if (
(Array.isArray(Challengematches) && Challengematches.length > 0) ||
(Array.isArray(Trackmatches) && Trackmatches.length > 0)
) {
return true
}
return false
}

controller.getFinalProjects = async event => {
Expand Down Expand Up @@ -211,3 +217,47 @@ controller.getFinalists = event => {
return Project.find({ _id: { $in: event.finalists } })
}
module.exports = controller

controller.getDataForPartnerReviewing = async (event, user) => {
const data = {}
const teams = await TeamController.getAllTeamsForEvent(event._id)
const projects = await controller.getProjectPreviewsByEvent(event._id)
const projectsWithExistingTeamsAndFinal = _.filter(projects, project => {
if (project.status === 'final') {
const teamFound = _.find(teams, team => {
return `${team._id}` === `${project.team}`
})
if (teamFound) {
return project
}
}
})

if (event.scoreCriteriaSettings.reviewAnyChallenge) {
data.projects = projectsWithExistingTeamsAndFinal
} else {
const challengeOrg = _.find(
event.recruiters,
recruiter => recruiter.recruiterId === user.sub,
)
if (challengeOrg) {
const challengesArray = []
event.challenges.map(challenge => {
if (challenge.partner === challengeOrg.organization) {
challengesArray.push(challenge.slug)
}
})
const projectsFilteredByChallenge = []

projectsWithExistingTeamsAndFinal.map(project => {
if (_.includes(challengesArray, project.challenges[0])) {
projectsFilteredByChallenge.push(project)
}
})
data.projects = projectsFilteredByChallenge
} else {
data.projects = []
}
}
return data
}
2 changes: 1 addition & 1 deletion backend/modules/project/model.js
Original file line number Diff line number Diff line change
Expand Up @@ -125,7 +125,7 @@ ProjectSchema.post('save', async function (doc, next) {
*/
case ReviewingMethods.gavelPeerReview.id: {
GavelController.ensureGavelProject(doc)
console.log("saved as gavel project")
console.log('saved as gavel project')
break
}
default: {
Expand Down
18 changes: 17 additions & 1 deletion backend/modules/project/routes.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
const express = require('express')

const router = express.Router()
const asyncHandler = require('express-async-handler')

Expand All @@ -12,6 +11,7 @@ const {
canSubmitProject,
isEventOrganiser,
getEventFromParams,
isEventPartner,
} = require('../../common/middleware/events')

router.route('/id/:projectId').get(
Expand All @@ -36,6 +36,22 @@ router
}),
)

router
.route('/:slug/partner-review')
/** Get projects for partner review, only if their status is final, have a team and based on challenges */
.get(
hasToken,
isEventPartner,
getEventFromParams,
asyncHandler(async (req, res) => {
const data = await ProjectController.getDataForPartnerReviewing(
req.event,
req.user,
)
return res.status(200).json(data)
}),
)

router
.route('/:slug/validate')
/** Validate project before submission on UI, non-blocking (doesn't prevent saving to db) */
Expand Down
62 changes: 14 additions & 48 deletions backend/modules/project_score/controller.js
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
const _ = require('lodash')
const Event = require('../event/model')
const Project = require('../project/model')
const { ProjectScore } = require('./model')
Expand Down Expand Up @@ -25,7 +26,6 @@ controller.addProjectScore = async score => {
}
projectScore.averageScore = averageScore
}
console.log('ProjectScore from controller', projectScore)
return projectScore.save()
}

Expand Down Expand Up @@ -54,7 +54,6 @@ controller.updateProjectScore = async (id, updatedProjectScore) => {
}
projectScore.averageScore = averageScore
}
console.log('updated project with token score', projectScore)
await projectScore.save()
return projectScore
}
Expand All @@ -71,7 +70,7 @@ controller.getScoresByEventAndTeamId = (eventId, teamId) => {
})
}

controller.getScoreByProjectId = (
controller.getScoreByProjectId = async (
projectId,
challenge = null,
track = null,
Expand All @@ -88,6 +87,18 @@ controller.getScoreByProjectId = (
return ProjectScore.find(query)
}

controller.getScoreForProjectByReviewerId = async (projectId, reviewerId) => {
const testProjectScore = await controller.getScoreByProjectId(projectId)
if (testProjectScore && testProjectScore.length > 0) {
testProjectScore[0].reviewers.forEach(reviewer => {})
const scoreFromReviewer = _.find(
testProjectScore[0].reviewers,
reviewerScore => reviewerScore.userId === reviewerId,
)
return scoreFromReviewer
}
}

controller.getPublicScores = async eventId => {
return ProjectScore.find({ event: eventId })
.populate({ path: 'event', select: 'name' })
Expand All @@ -101,11 +112,8 @@ const limitDecimals = (number, decimalPlaces) => {

const averageScoreCalculation = (reviewers, globalScore) => {
const allScores = reviewers.map(review => review.score)
console.log('All scores from reviewers', allScores)
allScores.push(globalScore)
console.log('All scores with global score', allScores)
let scoreCount = allScores.length
console.log('Score count', scoreCount)

const scoreSum = allScores.reduce((acc, current) => {
if (current && current > 0) {
Expand All @@ -116,15 +124,10 @@ const averageScoreCalculation = (reviewers, globalScore) => {
}
}, 0)

console.log('Score sum', scoreSum)
console.log('Score count after', scoreCount)
let finalScore = scoreSum / scoreCount
if (!Number.isInteger(finalScore)) {
finalScore = limitDecimals(finalScore, 2)
console.log('Not an integer')
}
console.log('Score to submit', finalScore)
console.log('Score type', typeof finalScore)
return finalScore
}

Expand All @@ -139,39 +142,6 @@ controller.updateProjectScoreWithReviewers = async (
projectScore.track = updatedProjectScore.track
projectScore.challenge = updatedProjectScore.challenge
projectScore.reviewers = updatedProjectScore.reviewers
console.log(
'Updated project score from controller BEFORE save',
projectScore,
)

// const allScores = projectScore.reviewers.map(review => review.score)
// console.log('All scores from reviewers', allScores)
// allScores.push(projectScore.score)
// console.log('All scores with global score', allScores)
// let scoreCount = allScores.length
// console.log('Score count', scoreCount)

// const scoreSum = allScores.reduce((acc, current) => {
// if (current && current > 0) {
// return acc + current
// } else {
// scoreCount = scoreCount - 1
// return acc
// }
// }, 0)
// function limitDecimals(number, decimalPlaces) {
// const multiplier = Math.pow(10, decimalPlaces)
// return Math.floor(number * multiplier) / multiplier
// }
// console.log('Score sum', scoreSum)
// console.log('Score count after', scoreCount)
// let finalScore = scoreSum / scoreCount
// if (!Number.isInteger(finalScore)) {
// finalScore = limitDecimals(finalScore, 2)
// console.log('Not an integer')
// }
// console.log('Score to submit', finalScore)
// console.log('Score type', typeof finalScore)

projectScore.averageScore = projectScore.score

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

await projectScore.save()
console.log(
'Updated project score from controller AFTER save',
projectScore,
)
return projectScore
}

Expand Down
Loading