Skip to content

Commit

Permalink
Insertone to upsert (#750)
Browse files Browse the repository at this point in the history
* Changed insertOne to findAndModify

* On documentDb it looks like insertOne is no longer supported?
* Updated to findAndModify with upsert as true

* dd error

* add error to delete

* Funnel errors to logger

* Funnel errors to logger

* add back consent

* unsure about null consent

* fx test

* Fix test

* additional logs

* Added additional logs
  • Loading branch information
Elkrival authored Jun 4, 2024
1 parent 8079f14 commit 60f0ffa
Show file tree
Hide file tree
Showing 4 changed files with 37 additions and 24 deletions.
28 changes: 20 additions & 8 deletions server/controllers/api/assessmentDayDataController/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -43,12 +43,21 @@ const AssessmentDayDataController = {
query
)
console.log('PARTICIPANT DATA')
console.dir({ participantAssessmentData }, { depth: null })
console.dir(
{
participantAssessmentData,
metadata,
assessment_variables,
Consent,
query,
},
{ depth: null }
)
let sortedDayData = participant_assessments
let maxDayInDayData = Math.max(
...participant_assessments.map((pa) => pa.day)
)

console.dir(participant_assessments, { depth: null })
if (participantAssessmentData) {
sortedDayData = sortDayData(
participantAssessmentData,
Expand All @@ -57,22 +66,22 @@ const AssessmentDayDataController = {
maxDayInDayData = Math.max(
...sortedDayData.map((dayData) => dayData.day)
)

console.log('Participant data update')
await AssessmentDayDataModel.update(appDb, query, {
...participantAssessmentData,
...metadata,
Consent: parsedConsent,
daysInStudy: maxDayInDayData,
dayData: sortedDayData,
})
console.log('After AssessmentDayDataModel.update')
} else {
await AssessmentDayDataModel.create(appDb, {
console.log('NEW PARTICIPANT DATA UPSERT')
await AssessmentDayDataModel.upsert(appDb, query, {
...metadata,
Consent: parsedConsent,
dayData: participant_assessments,
})
console.log('After AssessmentDayDataModel.create')
console.log('After AssessmentDayDataModel.upsert')
}

const studyMetadata = await SiteMetadataModel.findOne(appDb, {
Expand All @@ -82,6 +91,7 @@ const AssessmentDayDataController = {
console.dir({ studyMetadata }, { depth: null })

if (!studyMetadata) {
console.log('new site metadata')
await SiteMetadataModel.upsert(
appDb,
{ study },
Expand Down Expand Up @@ -110,6 +120,7 @@ const AssessmentDayDataController = {
console.dir({ isParticipantInDocument }, { depth: null })

if (isParticipantInDocument) {
console.log('participant update site metadata upsert')
await SiteMetadataModel.upsert(
appDb,
{ participants: { $elemMatch: { participant } } },
Expand All @@ -123,6 +134,7 @@ const AssessmentDayDataController = {
console.log('After participant in document')
console.dir({ isParticipantInDocument }, { depth: null })
} else {
console.log('new participant site metadata upsert')
await SiteMetadataModel.upsert(
appDb,
{ study },
Expand Down Expand Up @@ -176,14 +188,14 @@ const AssessmentDayDataController = {
return next(err)
}
},
destroy: async (req, res) => {
destroy: async (req, res, next) => {
try {
const { appDb } = req.app.locals
await appDb.collection(collections.assessmentDayData).drop()

return res.status(200)
} catch (error) {
return res.status(400).json({ message: error.message })
next(error)
}
},
}
Expand Down
4 changes: 2 additions & 2 deletions server/controllers/api/siteMetadataController/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import SiteMetadataModel from '../../../models/SiteMetadataModel'
import { collections } from '../../../utils/mongoCollections'

const SiteMetadataController = {
create: async (req, res) => {
create: async (req, res, next) => {
try {
const { appDb } = req.app.locals
const { metadata, participants } = req.body
Expand Down Expand Up @@ -67,7 +67,7 @@ const SiteMetadataController = {

return res.status(200).json({ data: 'Metadata imported successfully.' })
} catch (error) {
return res.status(401).json({ message: error.message })
next(error)
}
},
destroy: async (req, res) => {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -213,7 +213,7 @@ describe('siteMetadataController', () => {
})

describe('When unsuccessful', () => {
it('returns a status of 200 and a success data message', async () => {
it('it passess error to next', async () => {
const body = createSiteMetadata({
metadata: {
filetype: 'text/csv',
Expand Down Expand Up @@ -249,17 +249,13 @@ describe('siteMetadataController', () => {

const request = createRequest({ body })
const response = createResponse()
const error = new Error('some error')

request.app.locals.appDb.findOne.mockRejectedValueOnce(
new Error('some error')
)

await SiteMetadataController.create(request, response)
request.app.locals.appDb.findOne.mockRejectedValueOnce(error)
const next = jest.fn()
await SiteMetadataController.create(request, response, next)

expect(response.status).toHaveBeenCalledWith(401)
expect(response.json).toHaveBeenCalledWith({
message: 'some error',
})
expect(next).toHaveBeenCalledWith(error)
})
})
})
Expand Down
13 changes: 9 additions & 4 deletions server/models/AssessmentDayDataModel/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,15 @@ const AssessmentDayDataModel = {
.toArray(),
findOne: async (db, query) =>
await db.collection(collections.assessmentDayData).findOne(query),
create: async (db, participantData) =>
await db
.collection(collections.assessmentDayData)
.insertOne(participantData),
upsert: async (db, query, updatedAttributes) =>
await db.collection(collections.assessmentDayData).findOneAndUpdate(
query,
{ $set: updatedAttributes },
{
upsert: true,
returnDocument: 'after',
}
),
createMany: async (db, assessmentDayData) =>
await db
.collection(collections.assessmentDayData)
Expand Down

0 comments on commit 60f0ffa

Please sign in to comment.