Skip to content

Commit df3feee

Browse files
committed
Add numOfRegistrants handling
1 parent bb9e3c3 commit df3feee

File tree

6 files changed

+47
-2
lines changed

6 files changed

+47
-2
lines changed

ReadMe.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,7 @@ After that, please run
116116
```bash
117117
export DATABASE_URL="postgresql://johndoe:mypassword@localhost:5532/resourceapi?schema=public&statement_timeout=60000"
118118
export MEMBER_DB_URL="postgresql://johndoe:mypassword@localhost:5632/memberdb"
119+
export CHALLENGE_DB_URL="postgresql://johndoe:mypassword@localhost:5732/challengedb"
119120
```
120121

121122
### Create Tables

env.sh

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,3 +29,5 @@ export AUTH_SECRET=
2929
export DATABASE_URL="postgresql://johndoe:mypassword@localhost:5532/resourceapi?schema=public&statement_timeout=60000"
3030

3131
export MEMBER_DB_URL="postgresql://johndoe:mypassword@localhost:5632/memberdb"
32+
33+
export CHALLENGE_DB_URL="postgresql://johndoe:mypassword@localhost:5732/challengedb"

package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,8 @@
1515
"create-tables": "npx prisma migrate dev --schema=./prisma/schema.prisma",
1616
"prisma:generate:resource": "npx prisma generate --schema=./prisma/schema.prisma",
1717
"prisma:generate:member": "npx prisma generate --schema=./prisma/member-schema.prisma",
18-
"prisma:generate": "npm run prisma:generate:resource && npm run prisma:generate:member",
18+
"prisma:generate:challenge": "npx prisma generate --schema=./prisma/challenge-schema.prisma",
19+
"prisma:generate": "npm run prisma:generate:resource && npm run prisma:generate:member && npm run prisma:generate:challenge",
1920
"drop-tables:test": "NODE_ENV=test npx prisma migrate reset",
2021
"clear-tables:test": "NODE_ENV=test node src/scripts/clear-tables.js",
2122
"create-tables:test": "NODE_ENV=test npx prisma migrate dev",

prisma/challenge-schema.prisma

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
generator client {
2+
provider = "prisma-client-js"
3+
output = "../node_modules/@prisma/client-challenge" // Relative path from this file to root node_modules
4+
}
5+
6+
datasource db {
7+
provider = "postgresql"
8+
url = env("CHALLENGE_DB_URL")
9+
}
10+
11+
model Challenge {
12+
id String @id @default(uuid())
13+
numOfRegistrants Int @default(0)
14+
}
15+

src/common/helper.js

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
* This file defines helper methods
33
*/
44
const { PrismaClient } = require('@prisma/client-member')
5+
const { PrismaClient: ChallengePrismaClient } = require('@prisma/client-challenge')
56

67
const _ = require('lodash')
78
const config = require('config')
@@ -19,6 +20,7 @@ const busApiClient = busApi(_.pick(config, ['AUTH0_URL', 'AUTH0_AUDIENCE', 'TOKE
1920

2021
const prisma = require('./prisma').getClient()
2122
const prismaMember = new PrismaClient()
23+
const prismaChallenge = new ChallengePrismaClient()
2224

2325
/**
2426
* Check the error is custom error.
@@ -545,5 +547,7 @@ module.exports = {
545547
checkChallengeGroupAccess,
546548
checkAgreedTerms,
547549
postRequest,
548-
advanceChallengePhase
550+
advanceChallengePhase,
551+
// Challenge DB client (exported for targeted updates)
552+
prismaChallenge
549553
}

src/services/ResourceService.js

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -395,6 +395,17 @@ async function createResource (currentUser, resource) {
395395

396396
logger.debug(`Created resource: ${JSON.stringify(ret)}`)
397397
await helper.postEvent(config.RESOURCE_CREATE_TOPIC, ret)
398+
// Increment challenge registrants on submitter registration
399+
if (resource.roleId === config.SUBMITTER_RESOURCE_ROLE_ID) {
400+
try {
401+
await helper.prismaChallenge.challenge.update({
402+
where: { id: challengeId },
403+
data: { numOfRegistrants: { increment: 1 } }
404+
})
405+
} catch (e) {
406+
logger.warn(`Failed to increment numOfRegistrants for challenge ${challengeId}: ${e}`)
407+
}
408+
}
398409
if (!_.get(challenge, 'task.isTask', false) && resource.roleId === config.SUBMITTER_RESOURCE_ROLE_ID) {
399410
const forumUrl = _.get(challenge, 'discussions[0].url')
400411
let templateId = config.REGISTRATION_EMAIL.SENDGRID_TEMPLATE_ID
@@ -487,6 +498,17 @@ async function deleteResource (currentUser, resource) {
487498

488499
logger.debug(`Deleted resource, posting to Bus API: ${JSON.stringify(ret)}`)
489500
await helper.postEvent(config.RESOURCE_DELETE_TOPIC, ret)
501+
// Decrement challenge registrants on submitter unregistration
502+
if (resource.roleId === config.SUBMITTER_RESOURCE_ROLE_ID) {
503+
try {
504+
await helper.prismaChallenge.challenge.update({
505+
where: { id: challengeId },
506+
data: { numOfRegistrants: { decrement: 1 } }
507+
})
508+
} catch (e) {
509+
logger.warn(`Failed to decrement numOfRegistrants for challenge ${challengeId}: ${e}`)
510+
}
511+
}
490512
return ret
491513
} catch (err) {
492514
logger.error(`Delete Resource Error ${JSON.stringify(err)}`)

0 commit comments

Comments
 (0)