import express from 'express'; import passport from 'passport'; import { DB_NAME, getDatabaseClient } from '../db-utils'; import { MongoUser } from '../models/user'; import { ObjectId } from 'bson'; import { Word } from '../models/word'; export const userProfileRoutes = express.Router(); export const jwtAuthentication = passport.authenticate('jwt', { session: false }); userProfileRoutes.get('/profile/', jwtAuthentication, async (request, response) => { const user: MongoUser = (request.user as any); response.json({ _id: user._id, name: user.name, email: user.email, isVerified: user.isVerified, categories: user.categories, uncategorised: user.uncategorised, favouriteWords: user.favouriteWords, }); return; }); // Add favourite word userProfileRoutes.post('/favourite-words/', jwtAuthentication, async (request, response) => { const user: MongoUser = (request.user as any); const userCollection = getDatabaseClient().db(DB_NAME).collection('users'); const wordCollection = getDatabaseClient().db(DB_NAME).collection('words'); if (!user.favouriteWords) { user.favouriteWords = []; } if (!request.body.wordId) { response.status(400); response.send("Missing wordID"); return; } else if (user.favouriteWords.includes(request.body.wordId)) { response.status(400); response.send("WordID already present"); return; } const matchedWord = await wordCollection.findOne({ _id: new ObjectId(request.body.wordId) }); if (!matchedWord) { response.status(400); response.send("Word not present in the library"); return; } user.favouriteWords.push(request.body.wordId); const updatedUser = await userCollection.updateOne({ _id: new ObjectId(user._id) }, { $set: { favouriteWords: user.favouriteWords } }); if (updatedUser.acknowledged) { response.sendStatus(200); } else { response.sendStatus(500); } return; }); // Update favourite word userProfileRoutes.put('/favourite-words/', jwtAuthentication, async (request, response) => { const user: MongoUser = (request.user as any); const userCollection = getDatabaseClient().db(DB_NAME).collection('users'); if (!request.body.favouriteWords) { response.status(400); response.send("Missing favouriteWords param"); return; } const updatedUser = await userCollection.updateOne({ _id: new ObjectId(user._id) }, { $set: { favouriteWords: request.body.favouriteWords } }); if (updatedUser.acknowledged) { response.sendStatus(200); } else { response.sendStatus(500); } return; });