@@ -4,10 +4,10 @@ import passport from 'passport'; | |||||
import authRoutes from './authentication/routes'; | import authRoutes from './authentication/routes'; | ||||
import { connectToDatabaseServer } from './db-utils'; | import { connectToDatabaseServer } from './db-utils'; | ||||
import sendGridMail from '@sendgrid/mail'; | import sendGridMail from '@sendgrid/mail'; | ||||
import { userProfileRoutes } from './user-profile/routes'; | |||||
import { userProfileRoutes } from './user-profile/profile-routes'; | |||||
import { categoryRoutes } from './user-profile/category-routes'; | import { categoryRoutes } from './user-profile/category-routes'; | ||||
import { shelfRoutes } from './user-profile/shelf-routes'; | import { shelfRoutes } from './user-profile/shelf-routes'; | ||||
import { wordRoutes } from './user-profile/word-routes'; | |||||
import { libraryRoutes } from './library/library-routes'; | |||||
const SENDGRID_API_KEY = process.env.SENDGRID_API_KEY || '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'; | const SENDGRID_API_KEY = process.env.SENDGRID_API_KEY || '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'; | ||||
@@ -22,7 +22,7 @@ app.use('/auth/', authRoutes); | |||||
app.use('/user/', userProfileRoutes); | app.use('/user/', userProfileRoutes); | ||||
app.use('/category/', categoryRoutes); | app.use('/category/', categoryRoutes); | ||||
app.use('/shelf/', shelfRoutes); | app.use('/shelf/', shelfRoutes); | ||||
app.use('/library/', wordRoutes); | |||||
app.use('/library/', libraryRoutes); | |||||
app.get('/', (request, response) => { | app.get('/', (request, response) => { | ||||
response.send('Server running @ port' + app.get('port')); | response.send('Server running @ port' + app.get('port')); | ||||
@@ -3,13 +3,13 @@ import passport from 'passport'; | |||||
import { DB_NAME, getDatabaseClient } from '../db-utils'; | import { DB_NAME, getDatabaseClient } from '../db-utils'; | ||||
import { Word } from '../models/word'; | import { Word } from '../models/word'; | ||||
export const wordRoutes = express.Router(); | |||||
export const libraryRoutes = express.Router(); | |||||
export const jwtAuthentication = passport.authenticate('jwt', { session: false }); | export const jwtAuthentication = passport.authenticate('jwt', { session: false }); | ||||
// Get All Words | // Get All Words | ||||
wordRoutes.get('/all/', jwtAuthentication, async (request, response) => { | |||||
libraryRoutes.get('/all/', jwtAuthentication, async (request, response) => { | |||||
const wordCollection = getDatabaseClient().db(DB_NAME).collection<Word>('words'); | const wordCollection = getDatabaseClient().db(DB_NAME).collection<Word>('words'); | ||||
const allWords = await wordCollection.find().toArray(); | const allWords = await wordCollection.find().toArray(); | ||||
@@ -20,7 +20,7 @@ wordRoutes.get('/all/', jwtAuthentication, async (request, response) => { | |||||
return; | return; | ||||
}); | }); | ||||
wordRoutes.get('/search/', jwtAuthentication, async (request, response) => { | |||||
libraryRoutes.get('/search/', jwtAuthentication, async (request, response) => { | |||||
const wordCollection = getDatabaseClient().db(DB_NAME).collection<Word>('words'); | const wordCollection = getDatabaseClient().db(DB_NAME).collection<Word>('words'); | ||||
if (!request.body.name) { | if (!request.body.name) { | ||||
@@ -39,7 +39,7 @@ wordRoutes.get('/search/', jwtAuthentication, async (request, response) => { | |||||
return; | return; | ||||
}); | }); | ||||
wordRoutes.post('/add/', jwtAuthentication, async (request, response) => { | |||||
libraryRoutes.post('/add/', jwtAuthentication, async (request, response) => { | |||||
const wordCollection = getDatabaseClient().db(DB_NAME).collection<Word>('words'); | const wordCollection = getDatabaseClient().db(DB_NAME).collection<Word>('words'); | ||||
if (!request.body.name || request.body.grammaticalDetails) { | if (!request.body.name || request.body.grammaticalDetails) { |
@@ -16,7 +16,7 @@ interface AddedWord { | |||||
isArchived: boolean, | isArchived: boolean, | ||||
} | } | ||||
export interface Shelf { | |||||
interface Shelf { | |||||
name: string, | name: string, | ||||
description?: string, | description?: string, | ||||
viewType: viewPermissionType, | viewType: viewPermissionType, | ||||
@@ -24,7 +24,7 @@ export interface Shelf { | |||||
addedWords?: Array<AddedWord> | addedWords?: Array<AddedWord> | ||||
} | } | ||||
interface MongoAddedWord extends Omit<AddedWord, "word"> { | |||||
export interface MongoAddedWord extends Omit<AddedWord, "word"> { | |||||
word: string, | word: string, | ||||
} | } | ||||
@@ -1,10 +1,11 @@ | |||||
import { ObjectId } from 'bson'; | |||||
import { ObjectID, ObjectId } from 'bson'; | |||||
import express from 'express'; | import express from 'express'; | ||||
import passport from 'passport'; | import passport from 'passport'; | ||||
import { MongoCategory } from '../models/category'; | import { MongoCategory } from '../models/category'; | ||||
import { DB_NAME } from '../db-utils'; | import { DB_NAME } from '../db-utils'; | ||||
import { getDatabaseClient } from '../db-utils'; | import { getDatabaseClient } from '../db-utils'; | ||||
import { MongoShelf } from '../models/shelf'; | |||||
import { MongoAddedWord, MongoShelf } from '../models/shelf'; | |||||
import { Word } from '../models/word'; | |||||
export const shelfRoutes = express.Router(); | export const shelfRoutes = express.Router(); | ||||
@@ -97,6 +98,8 @@ shelfRoutes.post('/add/', jwtAuthentication, async (request, response) => { | |||||
// Update shelf | // Update shelf | ||||
shelfRoutes.put('/update/', jwtAuthentication, async (request, response) => { | shelfRoutes.put('/update/', jwtAuthentication, async (request, response) => { | ||||
const shelfCollection = getDatabaseClient().db(DB_NAME).collection<MongoShelf>('shelves'); | const shelfCollection = getDatabaseClient().db(DB_NAME).collection<MongoShelf>('shelves'); | ||||
const wordCollection = getDatabaseClient().db(DB_NAME).collection<Word>('words'); | |||||
const updatedAddedWords: Array<MongoAddedWord> = request.body.addedWords ? request.body.addedWords : []; | |||||
const currentShelf = await shelfCollection.findOne({ | const currentShelf = await shelfCollection.findOne({ | ||||
_id: new ObjectId(request.body._id) | _id: new ObjectId(request.body._id) | ||||
@@ -115,6 +118,29 @@ shelfRoutes.put('/update/', jwtAuthentication, async (request, response) => { | |||||
} | } | ||||
} | } | ||||
for (let i = 0; i < updatedAddedWords.length; i += 1) { | |||||
if (!updatedAddedWords[i].word || !updatedAddedWords[i].isArchived || | |||||
!updatedAddedWords[i].isFavourite || !updatedAddedWords[i].nextRevisionDateTime || | |||||
!updatedAddedWords[i].notes || !updatedAddedWords[i].revisionHistory || !updatedAddedWords[i].spaceBetweenRecall) { | |||||
response.status(400); | |||||
response.send("Missing key in " + JSON.stringify(updatedAddedWords[i])); | |||||
return; | |||||
} | |||||
const wordId = updatedAddedWords[i].word; | |||||
const matchedWord = await wordCollection.findOne({ | |||||
_id: new ObjectId(wordId) | |||||
}); | |||||
if (!matchedWord) { | |||||
response.status(400); | |||||
response.send("Word with ID " + updatedAddedWords[i] + " is not present in the library" ); | |||||
return; | |||||
} | |||||
} | |||||
try { | try { | ||||
await shelfCollection.updateOne({ | await shelfCollection.updateOne({ | ||||
_id: new ObjectId(request.body._id), | _id: new ObjectId(request.body._id), | ||||
@@ -122,6 +148,7 @@ shelfRoutes.put('/update/', jwtAuthentication, async (request, response) => { | |||||
$set: { | $set: { | ||||
name: request.body.name ? request.body.name : currentShelf.name, | name: request.body.name ? request.body.name : currentShelf.name, | ||||
description: request.body.description ? request.body.description : currentShelf.description, | description: request.body.description ? request.body.description : currentShelf.description, | ||||
addedWords: updatedAddedWords, | |||||
isArchived: request.body.isArchived !== undefined ? request.body.isArchived : currentShelf.isArchived | isArchived: request.body.isArchived !== undefined ? request.body.isArchived : currentShelf.isArchived | ||||
} | } | ||||
}); | }); | ||||