Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
64 changes: 55 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,43 @@ 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 challengeData = _.find(
event.challenges,
challenge => challenge.partner === challengeOrg.organization,
)
const projectsFilteredByChallenge = _.filter(
projectsWithExistingTeamsAndFinal,
project => _.includes(project.challenges, challengeData.slug),
)
data.projects = projectsFilteredByChallenge
data.challenge = challengeData
} 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
2 changes: 0 additions & 2 deletions backend/modules/project_score/routes.js
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,6 @@ const {
isEventPartner,
isOrganiserOrCanSubmitProject,
} = require('../../common/middleware/events')
const { registrationAccepted } = require('../email-task/types')

const addProjectScore = asyncHandler(async (req, res) => {
console.log('addProjectScore is running')
Expand Down Expand Up @@ -127,7 +126,6 @@ router.get(
getScoreByProjectId,
)


router.post('/event/:slug', hasToken, isEventOrganiser, addProjectScore)
router.put('/event/:slug/:id', hasToken, isEventOrganiser, updateProjectScore)

Expand Down
Loading