From 7f5c43e1b30604ea4a15fc457a74fe1a4e0c13e7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Diana=20L=C3=B3pez=20Alvas?= Date: Wed, 29 Nov 2023 15:20:10 -0300 Subject: [PATCH] upsert shared challenge --- src/api/routes/creatorChallenges.ts | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/src/api/routes/creatorChallenges.ts b/src/api/routes/creatorChallenges.ts index f449479..10787ae 100644 --- a/src/api/routes/creatorChallenges.ts +++ b/src/api/routes/creatorChallenges.ts @@ -1,15 +1,24 @@ import * as express from 'express' import { syncHandler, AuthenticatedRequest } from './utils' import { tokenAuth, tryy, onlyIfAuth } from './middlewares' -import { CreatorChallenge, CreatorChallengeModel } from '../../models/creatorChallenge' +import { CreatorChallengeModel } from '../../models/creatorChallenge' const router = express.Router() +const upsertChallenge = async (_id, user, body) => { + let challenge = await CreatorChallengeModel.findOne({ _id, user }).exec() + if (!challenge) { + challenge = await CreatorChallengeModel.create({ ...body }) + } else { + await challenge.set(body).save() + } + return challenge +} + router.post('/share', tryy(tokenAuth), onlyIfAuth, syncHandler(async (req: AuthenticatedRequest, res) => { const { user, body } = req body.user = user - - res.json(await CreatorChallengeModel.create({...body})) + res.json(await CreatorChallengeModel.create({ ...body })) })) router.get('/sharedChallenge/:_id', (async (req: AuthenticatedRequest, res) => { @@ -20,9 +29,8 @@ router.get('/sharedChallenge/:_id', (async (req: AuthenticatedRequest, res) => { router.put('/share/:_id', tryy(tokenAuth), onlyIfAuth, syncHandler(async (req: AuthenticatedRequest, res) => { const { _id } = req.params as any - const challenge = await CreatorChallengeModel.findOne({ _id }).exec() - await challenge.set(req.body).save() - res.json(challenge) + const { user, body } = req + res.json(await upsertChallenge(_id, user, body)) }))