Skip to content

Commit

Permalink
submissionDataSetRefId on result
Browse files Browse the repository at this point in the history
  • Loading branch information
WrathfulSpatula committed Jan 18, 2024
1 parent 9123a77 commit 6ce9cf8
Show file tree
Hide file tree
Showing 4 changed files with 74 additions and 8 deletions.
6 changes: 6 additions & 0 deletions metriq-api/migrations/017-890_DataSets.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,12 @@ module.exports = {
type: Sequelize.BOOLEAN,
allowNull: false,
defaultValue: false
}, { transaction: t }),
queryInterface.addColumn('results', 'submissionDataSetRefId',
{
type: Sequelize.INTEGER,
allowNull: true,
references: { model: 'submissionPlatformRefs', key: 'id' }
}, { transaction: t })
])
})
Expand Down
48 changes: 41 additions & 7 deletions metriq-api/service/resultService.js
Original file line number Diff line number Diff line change
Expand Up @@ -29,13 +29,14 @@ class ResultService extends ModelService {
' SELECT t.id FROM tasks AS t ' +
' JOIN c on c.id = t."taskId" ' +
') ' +
'SELECT r.*, s.name AS "submissionName", s."contentUrl" AS "submissionUrl", s.id AS "submissionId", CASE WHEN t.id = ' + taskId + ' THEN m.name ELSE m.name || \' | \' || t.name END AS "methodName", COALESCE(p.name, \'\') as "platformName" FROM "submissionTaskRefs" AS str ' +
'SELECT r.*, s.name AS "submissionName", s."contentUrl" AS "submissionUrl", s.id AS "submissionId", CASE WHEN t.id = ' + taskId + ' THEN m.name ELSE m.name || \' | \' || t.name END AS "methodName", COALESCE(d.name, \'\') as "dataSetName", COALESCE(p.name, \'\') as "platformName" FROM "submissionTaskRefs" AS str ' +
' RIGHT JOIN c on c.id = str."taskId" ' +
' JOIN results AS r on r."submissionTaskRefId" = str.id AND r."deletedAt" IS NULL ' +
' LEFT JOIN submissions AS s on str."submissionId" = s.id AND s."deletedAt" IS NULL ' +
' LEFT JOIN "submissionMethodRefs" AS smr on r."submissionMethodRefId" = smr.id AND smr."deletedAt" IS NULL ' +
' LEFT JOIN methods AS m on smr."methodId" = m.id ' +
' LEFT JOIN "submissionPlatformRefs" AS spr on r."submissionPlatformRefId" = spr.id AND spr."deletedAt" IS NULL ' +
' LEFT JOIN platforms AS d on spr."dataSetId" = p.id ' +
' LEFT JOIN platforms AS p on spr."platformId" = p.id ' +
' LEFT JOIN tasks AS t on str."taskId" = t.id ' +
' WHERE str."deletedAt" IS NULL;'
Expand All @@ -48,13 +49,14 @@ class ResultService extends ModelService {
' SELECT t.id FROM tasks AS t ' +
' JOIN c on c.id = t."taskId" ' +
') ' +
'SELECT r.*, s.name AS "submissionName", s.id as "submissionId", CASE WHEN t.id = ' + taskId + ' THEN m.name ELSE m.name || \' | \' || t.name END AS "methodName", COALESCE(p.name, \'\') as "platformName" FROM "submissionTaskRefs" AS str ' +
'SELECT r.*, s.name AS "submissionName", s.id as "submissionId", CASE WHEN t.id = ' + taskId + ' THEN m.name ELSE m.name || \' | \' || t.name END AS "methodName", COALESCE(d.name, \'\') as "dataSetName", COALESCE(p.name, \'\') as "platformName" FROM "submissionTaskRefs" AS str ' +
' RIGHT JOIN c on c.id = str."taskId" ' +
' JOIN results AS r on r."submissionTaskRefId" = str.id AND r."deletedAt" IS NULL ' +
' LEFT JOIN submissions AS s on str."submissionId" = s.id AND s."deletedAt" IS NULL ' +
' LEFT JOIN "submissionMethodRefs" AS smr on r."submissionMethodRefId" = smr.id AND smr."deletedAt" IS NULL ' +
' LEFT JOIN methods AS m on smr."methodId" = m.id ' +
' LEFT JOIN "submissionPlatformRefs" AS spr on r."submissionPlatformRefId" = spr.id AND spr."deletedAt" IS NULL ' +
' LEFT JOIN platforms AS d on spr."dataSetId" = p.id ' +
' LEFT JOIN platforms AS p on spr."platformId" = p.id ' +
' LEFT JOIN tasks AS t on str."taskId" = t.id ' +
' WHERE str."deletedAt" IS NULL AND s.id = ' + submissionId + ';'
Expand All @@ -67,13 +69,14 @@ class ResultService extends ModelService {
' SELECT t.id FROM methods AS t ' +
' JOIN c on c.id = t."methodId" ' +
') ' +
'SELECT r.*, s.name AS "submissionName", s.id AS "submissionId", COALESCE(p.name, \'\') as "platformName" FROM "submissionMethodRefs" AS smr ' +
'SELECT r.*, s.name AS "submissionName", s.id AS "submissionId", COALESCE(d.name, \'\') as "dataSetName", COALESCE(p.name, \'\') as "platformName" FROM "submissionMethodRefs" AS smr ' +
' RIGHT JOIN c on c.id = smr."methodId" ' +
' JOIN results AS r on r."submissionMethodRefId" = smr.id AND r."deletedAt" IS NULL ' +
' LEFT JOIN submissions AS s on smr."submissionId" = s.id AND s."deletedAt" IS NULL ' +
' LEFT JOIN "submissionTaskRefs" AS str on r."submissionTaskRefId" = str.id AND str."deletedAt" IS NULL ' +
' LEFT JOIN methods AS m on smr."methodId" = m.id ' +
' LEFT JOIN "submissionPlatformRefs" AS spr on r."submissionPlatformRefId" = spr.id AND spr."deletedAt" IS NULL ' +
' LEFT JOIN platforms AS d on spr."dataSetId" = p.id ' +
' LEFT JOIN platforms AS p on spr."platformId" = p.id ' +
' LEFT JOIN tasks AS t on str."taskId" = t.id ' +
' WHERE str."deletedAt" IS NULL AND s.id=' + submissionId + ';'
Expand All @@ -86,14 +89,15 @@ class ResultService extends ModelService {
' SELECT t.id FROM platforms AS t ' +
' JOIN c on c.id = t."platformId" ' +
') ' +
'SELECT r.*, s.name AS "submissionName", s.id as "submissionId", COALESCE(p.name, \'\') as "platformName" FROM "submissionPlatformRefs" AS spr ' +
'SELECT r.*, s.name AS "submissionName", s.id as "submissionId", COALESCE(d.name, \'\') as "dataSetName", COALESCE(p.name, \'\') as "platformName" FROM "submissionPlatformRefs" AS spr ' +
' RIGHT JOIN c on c.id = spr."platformId" ' +
' JOIN results AS r on r."submissionPlatformRefId" = spr.id AND r."deletedAt" IS NULL ' +
' LEFT JOIN submissions AS s on spr."submissionId" = s.id AND s."deletedAt" IS NULL ' +
' LEFT JOIN "submissionMethodRefs" AS smr on r."submissionMethodRefId" = smr.id AND smr."deletedAt" IS NULL ' +
' LEFT JOIN methods AS m on smr."methodId" = m.id ' +
' LEFT JOIN "submissionTaskRefs" AS str on r."submissionTaskRefId" = spr.id AND str."deletedAt" IS NULL ' +
' LEFT JOIN tasks AS t on str."taskId" = t.id ' +
' LEFT JOIN platforms AS d on spr."dataSetId" = p.id ' +
' LEFT JOIN platforms AS p on spr."platformId" = p.id ' +
' WHERE str."deletedAt" IS NULL AND s.id = ' + submissionId + ';'
}
Expand Down Expand Up @@ -147,11 +151,26 @@ class ResultService extends ModelService {

// Platform must be not null and valid (present in database) for a valid result object.
if (reqBody.platform) {
result.submissionPlatformRefId = (await submissionPlatformRefService.getByFks(submissionId, parseInt(reqBody.platform))).id
const platform = (await submissionPlatformRefService.getByFks(submissionId, parseInt(reqBody.platform)))
if (platform.isDataSet) {
return { success: false, error: 'Invalid platform reference specified.' }
}
result.submissionPlatformRefId = platform.id
} else {
result.submissionPlatformRefId = null
}

// Data Set must be not null and valid (present in database) for a valid result object.
if (reqBody.dataSet) {
const dataSet = (await submissionPlatformRefService.getByFks(submissionId, parseInt(reqBody.dataSet)))
if (!dataSet.isDataSet) {
return { success: false, error: 'Invalid dataSet reference specified.' }
}
result.submissionDataSetRefId = platform.id
} else {
result.submissionDataSetRefId = null
}

result.userId = userId
result.submissionId = submissionId
result.submissionTaskRefId = (await submissionTaskRefService.getByFks(submissionId, parseInt(reqBody.task))).id
Expand Down Expand Up @@ -205,13 +224,28 @@ class ResultService extends ModelService {
return { success: false, error: 'Result requires method to be defined.' }
}

// If specified, platform must valid (present in database) for a valid result object.
// Platform must be not null and valid (present in database) for a valid result object.
if (reqBody.platform) {
result.submissionPlatformRefId = (await submissionPlatformRefService.getByFks(reqBody.submissionId, parseInt(reqBody.platform))).id
const platform = (await submissionPlatformRefService.getByFks(submissionId, parseInt(reqBody.platform)))
if (platform.isDataSet) {
return { success: false, error: 'Invalid platform reference specified.' }
}
result.submissionPlatformRefId = platform.id
} else {
result.submissionPlatformRefId = null
}

// Data Set must be not null and valid (present in database) for a valid result object.
if (reqBody.dataSet) {
const dataSet = (await submissionPlatformRefService.getByFks(submissionId, parseInt(reqBody.dataSet)))
if (!dataSet.isDataSet) {
return { success: false, error: 'Invalid dataSet reference specified.' }
}
result.submissionDataSetRefId = platform.id
} else {
result.submissionDataSetRefId = null
}

result.submissionTaskRefId = (await submissionTaskRefService.getByFks(reqBody.submissionId, parseInt(reqBody.task))).id
result.submissionMethodRefId = (await submissionMethodRefService.getByFks(reqBody.submissionId, parseInt(reqBody.method))).id
result.isHigherBetter = reqBody.isHigherBetter
Expand Down
15 changes: 15 additions & 0 deletions metriq-api/service/submissionDataSetRefService.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
// submissionMethodRefService.js

// Base class
const SubmissionRefService = require('./submissionRefService')
// Database Model
const db = require('../models/index')
const SubmissionPlatformRef = db.submissionPlatformRef

class SubmissionPlatformRefService extends SubmissionRefService {
constructor () {
super('dataSetId', SubmissionPlatformRef)
}
}

module.exports = SubmissionPlatformRefService
13 changes: 12 additions & 1 deletion metriq-api/service/submissionService.js
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,8 @@ const SubmissionMethodRefService = require('./submissionMethodRefService')
const submissionMethodRefService = new SubmissionMethodRefService()
const PlatformService = require('./platformService')
const platformService = new PlatformService()
const SubmissionDataSetRefService = require('./submissionDataSetRefService')
const submissionDataSetRefService = new SubmissionDataSetRefService()
const SubmissionPlatformRefService = require('./submissionPlatformRefService')
const submissionPlatformRefService = new SubmissionPlatformRefService()
const LikeService = require('./likeService')
Expand Down Expand Up @@ -246,6 +248,10 @@ class SubmissionService extends ModelService {
await this.parseRefList(submission.id, userId, reqBody.methods, methodService, submissionMethodRefService, 'Method in method reference list not found.')
}

if (reqBody.dataSets) {
await this.parseRefList(submission.id, userId, reqBody.platforms, platformService, submissionDataSetRefService, 'Data set in data sets reference list not found.')
}

if (reqBody.platforms) {
await this.parseRefList(submission.id, userId, reqBody.platforms, platformService, submissionPlatformRefService, 'Platform in platform reference list not found.')
}
Expand Down Expand Up @@ -344,7 +350,12 @@ class SubmissionService extends ModelService {

if (reqBody.methods !== undefined) {
const refs = await submissionMethodRefService.getBySubmission(submissionId)
await this.parseRefList(submissionId, userId, reqBody.methods, methodService, submissionMethodRefService, 'Method in method reference list not found.', refs)
await this.parseRefList(submissionId, userId, reqBody.methods, methodService, submissionMethodRefService, 'Method in task reference list not found.', refs)
}

if (reqBody.dataSets !== undefined) {
const refs = await submissionDataSetRefService.deleteBySubmission(submissionId)
await this.parseRefList(submissionId, userId, reqBody.platforms, platformService, submissionDataSetRefService, 'Data set in data set reference list not found.', refs)
}

if (reqBody.platforms !== undefined) {
Expand Down

0 comments on commit 6ce9cf8

Please sign in to comment.