diff --git a/routes/root.js b/routes/root.js index 0e9b722..3209106 100644 --- a/routes/root.js +++ b/routes/root.js @@ -259,7 +259,7 @@ route.get('/claims/:id', auth.adminOnly, (req, res) => { if (!claim) throw new Error('No claim found') pullUrlDetail = getUrlDetails(claim["pullUrl"]) issueUrlDetail = getUrlDetails(claim["issueUrl"]) - du.getConflictedClaims(claim,issueUrlDetail,pullUrlDetail.type) + du.getConflictedClaims(claim.id,issueUrlDetail,pullUrlDetail.type) .then(conflictedClaims => { if(conflictedClaims.length === 0) res.render('pages/claims/id',{claim, hasConflict: false }) @@ -277,13 +277,32 @@ route.get('/claims/:id', auth.adminOnly, (req, res) => { }) route.post('/claims/:id/update', auth.adminOnly, (req, res) => { - du.updateClaim(req.params.id, req.body) - .then(result => { - res.redirect('/claims/' + req.params.id) - }) - .catch(error => { - res.send('Error updating claim') + if(req.body.status === 'accepted') { + du.getClaimById(req.params.id) + .then(claim => { + issueUrlDetail = getUrlDetails(claim["issueUrl"]) + pullUrlType = getUrlDetails(claim["pullUrl"]).type + du.rejectConflicts(req.params.id,issueUrlDetail,pullUrlType) + .then(result => { + du.updateClaim(req.params.id, req.body) + .then(result => { + res.redirect('/claims/' + req.params.id) + }) + .catch(error => { + res.send('Error updating claim') + }) + }) }) + } + else { + du.updateClaim(req.params.id, req.body) + .then(result => { + res.redirect('/claims/' + req.params.id) + }) + .catch(error => { + res.send('Error updating claim') + }) + } }) route.get('/claims/:id/edit', auth.ensureLoggedInGithub, auth.ensureUserCanEdit, (req, res) => { diff --git a/utils/datautils.js b/utils/datautils.js index 503a30f..1d63a27 100644 --- a/utils/datautils.js +++ b/utils/datautils.js @@ -5,6 +5,7 @@ const db = require('./db') const fs = require('fs') const consts = require('./consts') const {Op} = require('sequelize') +const { getUrlDetails } = require('./urlUtils') function getContestPeriod(year) { if (year) @@ -78,7 +79,7 @@ function delClaim(claimId) { }) } -function getConflictedClaims(claim,issueUrlDetail,pullUrlType) { +function getConflictedClaims(claimId,issueUrlDetail,pullUrlType) { projectName = '/' + issueUrlDetail.project + '/' issueId = '/' + issueUrlDetail.id pullUrlType = projectName + pullUrlType + '/' @@ -92,12 +93,40 @@ function getConflictedClaims(claim,issueUrlDetail,pullUrlType) { ] }, { pullUrl: { [Op.like]: '%' + pullUrlType + '%' } }, - { id : { [Op.ne] : claim.id } } + { id : { [Op.ne] : claimId } } ] } }) } +function rejectConflicts(claimId,issueUrlDetail,pullUrlType) { + console.log(issueUrlDetail) + projectName = '/' + issueUrlDetail.project + '/' + issueId = '/' + issueUrlDetail.id + pullUrlType = projectName + pullUrlType + '/' + return db.Claim.update( + { + status: "rejected", + reason: "Conflicting with other claim", + }, + { + where: { + [Op.and] : [ + { + [Op.or] : [ + { issueUrl: { [Op.like]: '%' + projectName + '%' + issueId } }, + { issueUrl: { [Op.like]: '%' + projectName + '%' + issueId + '/' } } + ] + }, + { pullUrl: { [Op.like]: '%' + pullUrlType + '%' } }, + { id : { [Op.ne] : claimId } } + ] + }, + returning: true + } + ) +} + function updateClaim(claimId, { status, reason, bounty }) { const claim = { action: 'update', @@ -252,5 +281,6 @@ module.exports = { updateClaim, getCounts, getConflictedClaims, - getResourceFromUrl + getResourceFromUrl, + rejectConflicts, } diff --git a/views/pages/claims/id.hbs b/views/pages/claims/id.hbs index db0a943..be7bc95 100644 --- a/views/pages/claims/id.hbs +++ b/views/pages/claims/id.hbs @@ -128,6 +128,15 @@ window.location.href = conflictId } + {{#equal conflictedClaim.status "claimed"}} + {{conflictedClaim.status}} + {{/equal}} + {{#equal conflictedClaim.status "accepted"}} + {{conflictedClaim.status}} + {{/equal}} + {{#equal conflictedClaim.status "rejected"}} + {{conflictedClaim.status}} + {{/equal}}