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
10 changes: 7 additions & 3 deletions backend/modules/project/controller.js
Original file line number Diff line number Diff line change
Expand Up @@ -213,10 +213,12 @@ controller.exportProjects = async projectIds => {

return exportData
}
controller.getFinalists = event => {
return Project.find({ _id: { $in: event.finalists } })
controller.getFinalists = async event => {
const finalistProjects = await Project.find({
_id: { $in: event.finalists },
})
return finalistProjects
}
module.exports = controller

controller.getDataForPartnerReviewing = async (event, user) => {
const data = {}
Expand Down Expand Up @@ -261,3 +263,5 @@ controller.getDataForPartnerReviewing = async (event, user) => {
}
return data
}

module.exports = controller
7 changes: 1 addition & 6 deletions backend/modules/project/model.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ const AchievementSchema = require('../../common/schemas/Achievement')
const GavelController = require('../reviewing/gavel/controller')
const WebhookService = require('../../common/services/webhook')
const CustomAnswer = require('@hackjunction/shared/schemas/CustomAnswer')
const ProjectDefaultFields = require('@hackjunction/shared/constants/project-default-fields')
// const ProjectDefaultFields = require('@hackjunction/shared/constants/project-default-fields')
// const AnswersSchema = require('@hackjunction/shared/schemas/Answers')

const ProjectSchema = new mongoose.Schema({
Expand Down Expand Up @@ -70,11 +70,6 @@ const ProjectSchema = new mongoose.Schema({
submissionFormAnswers: {
type: [CustomAnswer.mongoose],
},
// TODO default fields
// enabledFields: {
// type: [String],
// default: ProjectDefaultFields,
// },
})

ProjectSchema.set('timestamps', true)
Expand Down
51 changes: 49 additions & 2 deletions backend/modules/winner-votes/controller.js
Original file line number Diff line number Diff line change
@@ -1,8 +1,56 @@
const _ = require('lodash')
const WinnerVote = require('./model')
const projectController = require('../project/controller')
const tokenVotingController = require('../voting-token/controller')

const controller = {}

controller.getFinalistProjectsWithAllVotes = async event => {
const finalistProjects = await projectController.getFinalists(event)
const finalistProjectsWithVotes = finalistProjects.map(project => {
const projectObject = project.toObject()
projectObject.votingData = {
totalVotes: 0,
userVotes: 0,
tokenVotes: 0,
}
return projectObject
})
const userVotes = await controller.getVotesForEvent(event)
const tokenVotes = await tokenVotingController.getVotesByProject(event._id)
if (userVotes) {
userVotes.map(v => {
const projectWithVotes = _.find(
finalistProjectsWithVotes,
project => project._id.toString() === v.project,
)
if (projectWithVotes) {
projectWithVotes.votingData.userVotes = v.votes
}
})
}
if (tokenVotes) {
tokenVotes.map(v => {
const projectWithVotes = _.find(
finalistProjectsWithVotes,
project => project._id.toString() === v.project,
)
if (projectWithVotes) {
projectWithVotes.votingData.tokenVotes = v.votes
}
})
}
finalistProjectsWithVotes.forEach(project => {
project.votingData.totalVotes =
project.votingData.userVotes + project.votingData.tokenVotes
})
const sortedProjects = _.sortBy(
finalistProjectsWithVotes,
n => -1 * n.votingData.totalVotes,
)
return sortedProjects
}

controller.getVotesForEvent = async event => {
const votes = await WinnerVote.find({ event: event._id }).lean()
const grouped = _.groupBy(votes, 'project')
Expand All @@ -14,8 +62,7 @@ controller.getVotesForEvent = async event => {
})
return result
}, [])
const sorted = _.sortBy(results, n => -1 * n.votes)
return sorted
return results
}

module.exports = controller
106 changes: 74 additions & 32 deletions backend/modules/winner-votes/routes.js
Original file line number Diff line number Diff line change
Expand Up @@ -12,55 +12,97 @@ const {
isEventOrganiser,
} = require('../../common/middleware/events')

const votingController = require('./controller')

const getProjectsWithVotesForEvent = asyncHandler(async (req, res) => {
const finalistProjectsWithAllVotes =
await votingController.getFinalistProjectsWithAllVotes(req.event)
return res.status(200).json(finalistProjectsWithAllVotes)
})

const getVote = asyncHandler(async (req, res) => {
const vote = await WinnerVote.findOne({
event: req.event._id,
user: req.user.sub,
})

return res.status(200).json(vote)
})

const submitVote = asyncHandler(async (req, res) => {
const vote = await WinnerVote.findOne({
event: req.event._id,
user: req.user.sub,
})
if (vote) {
vote.project = req.body.projectId
const result = await vote.save()
return res.status(200).json(result)
}
const newVote = new WinnerVote({
event: req.event._id,
user: req.user.sub,
project: req.body.projectId,
})
const result = await newVote.save()
return res.status(200).json(result)
})

router
.route('/:slug')
.get(
hasToken,
hasRegisteredToEvent,
asyncHandler(async (req, res) => {
const vote = await WinnerVote.findOne({
event: req.event._id,
user: req.user.sub,
})
getVote,
// asyncHandler(async (req, res) => {
// const vote = await WinnerVote.findOne({
// event: req.event._id,
// user: req.user.sub,
// })

return res.status(200).json(vote)
}),
// return res.status(200).json(vote)
// }),
)
.post(
hasToken,
hasRegisteredToEvent,
asyncHandler(async (req, res) => {
const vote = await WinnerVote.findOne({
event: req.event._id,
user: req.user.sub,
})
if (vote) {
vote.project = req.body.projectId
const result = await vote.save()
return res.status(200).json(result)
}
const newVote = new WinnerVote({
event: req.event._id,
user: req.user.sub,
project: req.body.projectId,
})
const result = await newVote.save()
return res.status(200).json(result)
}),
submitVote,
// asyncHandler(async (req, res) => {
// const vote = await WinnerVote.findOne({
// event: req.event._id,
// user: req.user.sub,
// })
// if (vote) {
// vote.project = req.body.projectId
// const result = await vote.save()
// return res.status(200).json(result)
// }
// const newVote = new WinnerVote({
// event: req.event._id,
// user: req.user.sub,
// project: req.body.projectId,
// })
// const result = await newVote.save()
// return res.status(200).json(result)
// }),
)

router.route('/:slug/results').get(
hasToken,
isEventOrganiser,
asyncHandler(async (req, res) => {
const votes = await WinnerVote.find({
event: req.event._id,
})
getProjectsWithVotesForEvent,
// asyncHandler(async (req, res) => {
// const votes = await WinnerVote.find({
// event: req.event._id,
// })

const grouped = _.groupBy(votes, 'project')
// const grouped = _.groupBy(votes, 'project')
// console.log('Grouped votes:', grouped)
// getProjectsWithVotesForEvent(req, res)

return res.status(200).json(grouped)
}),
// return res.status(200).json(grouped)
// }
)
// )

module.exports = router
Loading