From 0fe07b84c6b0535636c62b23e575aa98c00f0d15 Mon Sep 17 00:00:00 2001 From: "C. Fuhrman" Date: Wed, 2 Oct 2024 10:23:56 -0400 Subject: [PATCH] Dependency injection of models to controllers, export controllers from app.js --- .../src/pages/Teacher/Dashboard/Dashboard.tsx | 5 +- server/app.js | 31 ++- server/controllers/folders.js | 7 +- server/controllers/images.js | 44 +-- server/controllers/quiz.js | 250 +++++++++--------- server/controllers/users.js | 8 +- server/models/folders.js | 5 +- server/models/images.js | 8 +- server/models/quiz.js | 40 +-- server/models/users.js | 1 - server/routers/folders.js | 24 +- server/routers/images.js | 8 +- server/routers/quiz.js | 29 +- server/routers/users.js | 5 +- 14 files changed, 250 insertions(+), 215 deletions(-) diff --git a/client/src/pages/Teacher/Dashboard/Dashboard.tsx b/client/src/pages/Teacher/Dashboard/Dashboard.tsx index 7c0bff5..ae24063 100644 --- a/client/src/pages/Teacher/Dashboard/Dashboard.tsx +++ b/client/src/pages/Teacher/Dashboard/Dashboard.tsx @@ -98,8 +98,9 @@ const Dashboard: React.FC = () => { setQuizzes(quizzes as QuizType[]); } else { - console.log("show some quizes") + console.log("show some quizzes") const folderQuizzes = await ApiService.getFolderContent(selectedFolder); + console.log("folderQuizzes: ", folderQuizzes); setQuizzes(folderQuizzes as QuizType[]); } @@ -147,7 +148,7 @@ const Dashboard: React.FC = () => { setQuizzes(quizzes as QuizType[]); } else { - console.log("show some quizes") + console.log("show some quizzes") const folderQuizzes = await ApiService.getFolderContent(selectedFolder); setQuizzes(folderQuizzes as QuizType[]); diff --git a/server/app.js b/server/app.js index 76053ba..ec630dd 100644 --- a/server/app.js +++ b/server/app.js @@ -7,7 +7,35 @@ const dotenv = require('dotenv') const { setupWebsocket } = require("./socket/socket"); const { Server } = require("socket.io"); -//import routers +// instantiate the db +const db = require('./config/db.js'); +// instantiate the models +const users = require('./models/users.js'); +const userModel = new users(db); +const quiz = require('./models/quiz.js'); +const quizModel = new quiz(db); +const folders = require('./models/folders.js'); +const foldersModel = new folders(db, quizModel); +const images = require('./models/images.js'); +const imageModel = new images(db); + +// instantiate the controllers +const usersController = require('./controllers/users.js'); +const usersControllerInstance = new usersController(userModel); +const foldersController = require('./controllers/folders.js'); +const foldersControllerInstance = new foldersController(foldersModel); +const quizController = require('./controllers/quiz.js'); +const quizControllerInstance = new quizController(quizModel, foldersModel); +const imagesController = require('./controllers/images.js'); +const imagesControllerInstance = new imagesController(imageModel); + +// export the controllers +module.exports.users = usersControllerInstance; +module.exports.folders = foldersControllerInstance; +module.exports.quizzes = quizControllerInstance; +module.exports.images = imagesControllerInstance; + +//import routers (instantiate controllers as side effect) const userRouter = require('./routers/users.js'); const folderRouter = require('./routers/folders.js'); const quizRouter = require('./routers/quiz.js'); @@ -15,7 +43,6 @@ const imagesRouter = require('./routers/images.js') // Setup environement dotenv.config(); -const db = require('./config/db.js'); const errorHandler = require("./middleware/errorHandler.js"); // Start app diff --git a/server/controllers/folders.js b/server/controllers/folders.js index 9cd81bb..7bcf8fb 100644 --- a/server/controllers/folders.js +++ b/server/controllers/folders.js @@ -8,10 +8,11 @@ const { MISSING_REQUIRED_PARAMETER, NOT_IMPLEMENTED, FOLDER_NOT_FOUND, FOLDER_AL // controllers must use arrow functions to bind 'this' to the class instance in order to access class properties as callbacks in Express class FoldersController { - constructor() { + constructor(foldersModel) { console.log("FoldersController constructor: db", db) this.db = db; - this.folders = new model(this.db); + this.folders = foldersModel; + // this.quizzes = quizModel; console.log("FoldersController constructor: folders", this.folders); } @@ -266,4 +267,4 @@ class FoldersController { -module.exports = new FoldersController; +module.exports = FoldersController; diff --git a/server/controllers/images.js b/server/controllers/images.js index 757961c..5eeb1d8 100644 --- a/server/controllers/images.js +++ b/server/controllers/images.js @@ -5,52 +5,54 @@ const { MISSING_REQUIRED_PARAMETER, IMAGE_NOT_FOUND } = require('../constants/er class ImagesController { - async upload(req, res, next) { + constructor(imagesModel) { + this.images = imagesModel; + console.log("ImagesController constructor: images", this.images); + } + + upload = async (req, res, next) => { try { const file = req.file; - + if (!file) { throw new AppError(MISSING_REQUIRED_PARAMETER); } - - const id = await model.upload(file, req.user.userId); - + + const id = await this.images.upload(file, req.user.userId); + return res.status(200).json({ id: id }); - } - catch (error) { + } catch (error) { return next(error); } - - } - - async get(req, res, next) { + }; + + get = async (req, res, next) => { try { const { id } = req.params; - + if (!id) { throw new AppError(MISSING_REQUIRED_PARAMETER); } - - const image = await model.get(id); - + + const image = await this.images.get(id); + if (!image) { - throw new AppError(IMAGE_NOT_FOUND) + throw new AppError(IMAGE_NOT_FOUND); } - + // Set Headers for display in browser res.setHeader('Content-Type', image.mime_type); res.setHeader('Content-Disposition', 'inline; filename=' + image.file_name); res.setHeader('Accept-Ranges', 'bytes'); res.setHeader('Cache-Control', 'no-cache, no-store, must-revalidate'); return res.send(image.file_content); - } - catch (error) { + } catch (error) { return next(error); } - } + }; } -module.exports = new ImagesController; \ No newline at end of file +module.exports = ImagesController; diff --git a/server/controllers/quiz.js b/server/controllers/quiz.js index 8b8b247..231b8e2 100644 --- a/server/controllers/quiz.js +++ b/server/controllers/quiz.js @@ -1,186 +1,186 @@ -const model = require('../models/quiz.js'); -const folderModel = require('../models/folders.js'); +// const model = require('../models/quiz.js'); const emailer = require('../config/email.js'); +//const foldersController = require('./folders.js'); +// const db = require('../config/db.js'); const AppError = require('../middleware/AppError.js'); const { MISSING_REQUIRED_PARAMETER, NOT_IMPLEMENTED, QUIZ_NOT_FOUND, FOLDER_NOT_FOUND, QUIZ_ALREADY_EXISTS, GETTING_QUIZ_ERROR, DELETE_QUIZ_ERROR, UPDATE_QUIZ_ERROR, MOVING_QUIZ_ERROR, DUPLICATE_QUIZ_ERROR, COPY_QUIZ_ERROR } = require('../constants/errorCodes'); class QuizController { - async create(req, res, next) { + constructor(quizModel, foldersModel) { + this.folders = foldersModel; + console.log("QuizController constructor: folders", this.folders); + this.quizzes = quizModel; + console.log("QuizController constructor: quizzes", this.quizzes); + } + + create = async (req, res, next) => { try { const { title, content, folderId } = req.body; - + if (!title || !content || !folderId) { throw new AppError(MISSING_REQUIRED_PARAMETER); } - + // Is this folder mine - const owner = await folderModel.getOwner(folderId); - + const owner = await this.folders.getOwner(folderId); + if (owner != req.user.userId) { throw new AppError(FOLDER_NOT_FOUND); } - - const result = await model.create(title, content, folderId, req.user.userId); - + + const result = await this.quizzes.create(title, content, folderId, req.user.userId); + if (!result) { throw new AppError(QUIZ_ALREADY_EXISTS); } - + return res.status(200).json({ message: 'Quiz créé avec succès.' }); - - } - catch (error) { + + } catch (error) { return next(error); } - } - - async get(req, res, next) { + }; + + get = async (req, res, next) => { try { const { quizId } = req.params; - + if (!quizId) { throw new AppError(MISSING_REQUIRED_PARAMETER); } - - - const content = await model.getContent(quizId); - + + const content = await this.quizzes.getContent(quizId); + if (!content) { throw new AppError(GETTING_QUIZ_ERROR); } - + // Is this quiz mine if (content.userId != req.user.userId) { throw new AppError(QUIZ_NOT_FOUND); } - + return res.status(200).json({ data: content }); - - } - catch (error) { + + } catch (error) { return next(error); } - } - - async delete(req, res, next) { + }; + + delete = async (req, res, next) => { try { const { quizId } = req.params; - + if (!quizId) { throw new AppError(MISSING_REQUIRED_PARAMETER); } - + // Is this quiz mine - const owner = await model.getOwner(quizId); - + const owner = await this.quizzes.getOwner(quizId); + if (owner != req.user.userId) { throw new AppError(QUIZ_NOT_FOUND); } - - const result = await model.delete(quizId); - + + const result = await this.quizzes.delete(quizId); + if (!result) { throw new AppError(DELETE_QUIZ_ERROR); } - + return res.status(200).json({ message: 'Quiz supprimé avec succès.' }); - - } - catch (error) { + + } catch (error) { return next(error); } - } - - async update(req, res, next) { + }; + + update = async (req, res, next) => { try { const { quizId, newTitle, newContent } = req.body; - + if (!newTitle || !newContent || !quizId) { throw new AppError(MISSING_REQUIRED_PARAMETER); } - + // Is this quiz mine - const owner = await model.getOwner(quizId); - + const owner = await this.quizzes.getOwner(quizId); + if (owner != req.user.userId) { throw new AppError(QUIZ_NOT_FOUND); } - - const result = await model.update(quizId, newTitle, newContent); - + + const result = await this.quizzes.update(quizId, newTitle, newContent); + if (!result) { throw new AppError(UPDATE_QUIZ_ERROR); } - + return res.status(200).json({ message: 'Quiz mis à jours avec succès.' }); - - } - catch (error) { + + } catch (error) { return next(error); } - } - - async move(req, res, next) { + }; + + move = async (req, res, next) => { try { const { quizId, newFolderId } = req.body; - + if (!quizId || !newFolderId) { throw new AppError(MISSING_REQUIRED_PARAMETER); } - + // Is this quiz mine - const quizOwner = await model.getOwner(quizId); - + const quizOwner = await this.quizzes.getOwner(quizId); + if (quizOwner != req.user.userId) { throw new AppError(QUIZ_NOT_FOUND); } - + // Is this folder mine - const folderOwner = await folderModel.getOwner(newFolderId); - + const folderOwner = await this.folders.getOwner(newFolderId); + if (folderOwner != req.user.userId) { throw new AppError(FOLDER_NOT_FOUND); } - - const result = await model.move(quizId, newFolderId); - + + const result = await this.quizzes.move(quizId, newFolderId); + if (!result) { throw new AppError(MOVING_QUIZ_ERROR); } - + return res.status(200).json({ message: 'Utilisateur déplacé avec succès.' }); - - } - catch (error) { + + } catch (error) { return next(error); } - - } - + }; - async copy(req, res, next) { + copy = async (req, res, next) => { const { quizId, newTitle, folderId } = req.body; - + if (!quizId || !newTitle || !folderId) { throw new AppError(MISSING_REQUIRED_PARAMETER); } - + throw new AppError(NOT_IMPLEMENTED); // const { quizId } = req.params; // const { newUserId } = req.body; - + // try { // //Trouver le quiz a dupliquer // const conn = db.getConnection(); @@ -194,119 +194,117 @@ class QuizController { // //Ajout du duplicata // await conn.collection('quiz').insertOne({ ...quiztoduplicate, userId: new ObjectId(newUserId) }); // res.json(Response.ok("Dossier dupliqué avec succès pour un autre utilisateur")); - + // } catch (error) { // if (error.message.startsWith("Quiz non trouvé")) { // return res.status(404).json(Response.badRequest(error.message)); // } // res.status(500).json(Response.serverError(error.message)); // } - } - - async deleteQuizzesByFolderId(req, res, next) { + }; + + deleteQuizzesByFolderId = async (req, res, next) => { try { const { folderId } = req.body; - + if (!folderId) { throw new AppError(MISSING_REQUIRED_PARAMETER); } - + // Call the method from the Quiz model to delete quizzes by folder ID await Quiz.deleteQuizzesByFolderId(folderId); - + return res.status(200).json({ message: 'Quizzes deleted successfully.' }); } catch (error) { return next(error); } - } - - async duplicate(req, res, next) { - const { quizId } = req.body; - + }; + + duplicate = async (req, res, next) => { + const { quizId } = req.body; + try { - const newQuizId = await model.duplicate(quizId,req.user.userId); + const newQuizId = await this.quizzes.duplicate(quizId, req.user.userId); res.status(200).json({ success: true, newQuizId }); } catch (error) { return next(error); } - } - - async quizExists(title, userId) { + }; + + quizExists = async (title, userId) => { try { - const existingFile = await model.quizExists(title, userId); + const existingFile = await this.quizzes.quizExists(title, userId); return existingFile !== null; } catch (error) { throw new AppError(GETTING_QUIZ_ERROR); } - } - - async Share(req, res, next) { + }; + + share = async (req, res, next) => { try { const { quizId, email } = req.body; - if ( !quizId || !email) { + if (!quizId || !email) { throw new AppError(MISSING_REQUIRED_PARAMETER); - } - + } + const link = `${process.env.FRONTEND_URL}/teacher/Share/${quizId}`; - + emailer.quizShare(email, link); return res.status(200).json({ message: 'Quiz partagé avec succès.' }); - } - catch (error) { + } catch (error) { return next(error); } - } + }; - async getShare(req, res, next) { + getShare = async (req, res, next) => { try { const { quizId } = req.params; - if ( !quizId ) { + if (!quizId) { throw new AppError(MISSING_REQUIRED_PARAMETER); - } - - const content = await model.getContent(quizId); - + } + + const content = await this.quizzes.getContent(quizId); + if (!content) { throw new AppError(GETTING_QUIZ_ERROR); } - + return res.status(200).json({ data: content.title }); - } - catch (error) { + } catch (error) { return next(error); } - } - - async receiveShare(req, res, next) { + }; + + receiveShare = async (req, res, next) => { try { const { quizId, folderId } = req.body; if (!quizId || !folderId) { throw new AppError(MISSING_REQUIRED_PARAMETER); } - - const folderOwner = await folderModel.getOwner(folderId); + + const folderOwner = await this.folders.getOwner(folderId); if (folderOwner != req.user.userId) { throw new AppError(FOLDER_NOT_FOUND); } - const content = await model.getContent(quizId); + const content = await this.quizzes.getContent(quizId); if (!content) { throw new AppError(GETTING_QUIZ_ERROR); } - const result = await model.create(content.title, content.content, folderId, req.user.userId); + const result = await this.quizzes.create(content.title, content.content, folderId, req.user.userId); if (!result) { throw new AppError(QUIZ_ALREADY_EXISTS); } @@ -314,13 +312,11 @@ class QuizController { return res.status(200).json({ message: 'Quiz partagé reçu.' }); - } - catch (error) { + } catch (error) { return next(error); } - } - + }; } -module.exports = new QuizController; \ No newline at end of file +module.exports = QuizController; diff --git a/server/controllers/users.js b/server/controllers/users.js index 4d5c579..6011948 100644 --- a/server/controllers/users.js +++ b/server/controllers/users.js @@ -1,7 +1,5 @@ const emailer = require('../config/email.js'); -const userModel = require('../models/users.js'); const jwt = require('../middleware/jwtToken.js'); -const db = require('../config/db.js'); const AppError = require('../middleware/AppError.js'); const { MISSING_REQUIRED_PARAMETER, LOGIN_CREDENTIALS_ERROR, GENERATE_PASSWORD_ERROR, UPDATE_PASSWORD_ERROR, DELETE_USER_ERROR } = require('../constants/errorCodes'); @@ -9,10 +7,8 @@ const { MISSING_REQUIRED_PARAMETER, LOGIN_CREDENTIALS_ERROR, GENERATE_PASSWORD_E // controllers must use arrow functions to bind 'this' to the class instance in order to access class properties as callbacks in Express class UsersController { - constructor() { - console.log("UsersController constructor: db", db) - this.db = db; - this.users = new userModel(this.db); + constructor(userModel) { + this.users = userModel; console.log("UsersController constructor: users", this.users); } diff --git a/server/models/folders.js b/server/models/folders.js index f831d50..6c92f0d 100644 --- a/server/models/folders.js +++ b/server/models/folders.js @@ -1,11 +1,12 @@ //model // const db = require('../config/db.js') const ObjectId = require('mongodb').ObjectId; -const Quiz = require('./quiz.js'); +// need to access the Quiz model from the Folders model class Folders { - constructor(db) { + constructor(db, quizModel) { this.db = db; + this.quizModel = quizModel; } async create(title, userId) { diff --git a/server/models/images.js b/server/models/images.js index 5dfa954..d427f7a 100644 --- a/server/models/images.js +++ b/server/models/images.js @@ -1,8 +1,12 @@ -const db = require('../config/db.js') +//const db = require('../config/db.js') const { ObjectId } = require('mongodb'); class Images { + constructor(db) { + this.db = db; + } + async upload(file, userId) { await db.connect() const conn = db.getConnection(); @@ -41,4 +45,4 @@ class Images { } -module.exports = new Images; \ No newline at end of file +module.exports = Images; diff --git a/server/models/quiz.js b/server/models/quiz.js index cb8f5a4..42bf132 100644 --- a/server/models/quiz.js +++ b/server/models/quiz.js @@ -1,11 +1,15 @@ -const db = require('../config/db.js') const { ObjectId } = require('mongodb'); class Quiz { + constructor(db) { + console.log("Quiz constructor: db", db) + this.db = db; + } + async create(title, content, folderId, userId) { - await db.connect() - const conn = db.getConnection(); + await this.db.connect() + const conn = this.db.getConnection(); const quizCollection = conn.collection('files'); @@ -28,8 +32,8 @@ class Quiz { } async getOwner(quizId) { - await db.connect() - const conn = db.getConnection(); + await this.db.connect() + const conn = this.db.getConnection(); const quizCollection = conn.collection('files'); @@ -39,8 +43,8 @@ class Quiz { } async getContent(quizId) { - await db.connect() - const conn = db.getConnection(); + await this.db.connect() + const conn = this.db.getConnection(); const quizCollection = conn.collection('files'); @@ -50,8 +54,8 @@ class Quiz { } async delete(quizId) { - await db.connect() - const conn = db.getConnection(); + await this.db.connect() + const conn = this.db.getConnection(); const quizCollection = conn.collection('files'); @@ -62,8 +66,8 @@ class Quiz { return true; } async deleteQuizzesByFolderId(folderId) { - await db.connect(); - const conn = db.getConnection(); + await this.db.connect(); + const conn = this.db.getConnection(); const quizzesCollection = conn.collection('files'); @@ -72,8 +76,8 @@ class Quiz { } async update(quizId, newTitle, newContent) { - await db.connect() - const conn = db.getConnection(); + await this.db.connect() + const conn = this.db.getConnection(); const quizCollection = conn.collection('files'); @@ -85,8 +89,8 @@ class Quiz { } async move(quizId, newFolderId) { - await db.connect() - const conn = db.getConnection(); + await this.db.connect() + const conn = this.db.getConnection(); const quizCollection = conn.collection('files'); @@ -119,8 +123,8 @@ class Quiz { } async quizExists(title, userId) { - await db.connect(); - const conn = db.getConnection(); + await this.db.connect(); + const conn = this.db.getConnection(); const filesCollection = conn.collection('files'); const existingFolder = await filesCollection.findOne({ title: title, userId: userId }); @@ -130,4 +134,4 @@ class Quiz { } -module.exports = new Quiz; \ No newline at end of file +module.exports = Quiz; diff --git a/server/models/users.js b/server/models/users.js index 0d561d5..05d7973 100644 --- a/server/models/users.js +++ b/server/models/users.js @@ -1,5 +1,4 @@ //user -// const db = require('../config/db.js'); const bcrypt = require('bcrypt'); const AppError = require('../middleware/AppError.js'); const { USER_ALREADY_EXISTS } = require('../constants/errorCodes'); diff --git a/server/routers/folders.js b/server/routers/folders.js index e64c18a..a7898ed 100644 --- a/server/routers/folders.js +++ b/server/routers/folders.js @@ -1,18 +1,22 @@ const express = require('express'); const router = express.Router(); const jwt = require('../middleware/jwtToken.js'); +const folders = require('../app.js').folders; -const foldersController = require('../controllers/folders.js') - -router.post("/create", jwt.authenticate, foldersController.create); -router.get("/getUserFolders", jwt.authenticate, foldersController.getUserFolders); -router.get("/getFolderContent/:folderId", jwt.authenticate, foldersController.getFolderContent); -router.delete("/delete/:folderId", jwt.authenticate, foldersController.delete); -router.put("/rename", jwt.authenticate, foldersController.rename); +router.post("/create", jwt.authenticate, folders.create); +router.get("/getUserFolders", jwt.authenticate, folders.getUserFolders); +router.get("/getFolderContent/:folderId", jwt.authenticate, folders.getFolderContent); +router.delete("/delete/:folderId", jwt.authenticate, folders.delete); +router.put("/rename", jwt.authenticate, folders.rename); //router.post("/duplicate", jwt.authenticate, foldersController.duplicate); -router.post("/duplicate", jwt.authenticate, foldersController.duplicate); +router.post("/duplicate", jwt.authenticate, folders.duplicate); -router.post("/copy/:folderId", jwt.authenticate, foldersController.copy); +router.post("/copy/:folderId", jwt.authenticate, folders.copy); -module.exports = router; \ No newline at end of file +module.exports = router; + +// export also folders (the controller) +module.exports.folders = folders; + +// Refer to folders using: const folders = require('../controllers/folders.js').folders; diff --git a/server/routers/images.js b/server/routers/images.js index d9b63b0..3723f45 100644 --- a/server/routers/images.js +++ b/server/routers/images.js @@ -1,15 +1,15 @@ const express = require('express'); const router = express.Router(); +const images = require('../app.js').images; const jwt = require('../middleware/jwtToken.js'); -const imagesController = require('../controllers/images.js') // For getting the image out of the form data const multer = require('multer'); const storage = multer.memoryStorage(); const upload = multer({ storage: storage }); -router.post("/upload", jwt.authenticate, upload.single('image'), imagesController.upload); -router.get("/get/:id", imagesController.get); +router.post("/upload", jwt.authenticate, upload.single('image'), images.upload); +router.get("/get/:id", images.get); -module.exports = router; \ No newline at end of file +module.exports = router; diff --git a/server/routers/quiz.js b/server/routers/quiz.js index c0f7ea2..136e4c9 100644 --- a/server/routers/quiz.js +++ b/server/routers/quiz.js @@ -1,19 +1,22 @@ const express = require('express'); const router = express.Router(); - +const quizzes = require('../app.js').quizzes; const jwt = require('../middleware/jwtToken.js'); -const quizController = require('../controllers/quiz.js') -router.post("/create", jwt.authenticate, quizController.create); -router.get("/get/:quizId", jwt.authenticate, quizController.get); -router.delete("/delete/:quizId", jwt.authenticate, quizController.delete); -router.put("/update", jwt.authenticate, quizController.update); -router.put("/move", jwt.authenticate, quizController.move); +if (!quizzes) { + console.error("quizzes is not defined"); +} -router.post("/duplicate", jwt.authenticate, quizController.duplicate); -router.post("/copy/:quizId", jwt.authenticate, quizController.copy); -router.put("/Share", jwt.authenticate, quizController.Share); -router.get("/getShare/:quizId", jwt.authenticate, quizController.getShare); -router.post("/receiveShare", jwt.authenticate, quizController.receiveShare); +router.post("/create", jwt.authenticate, quizzes.create); +router.get("/get/:quizId", jwt.authenticate, quizzes.get); +router.delete("/delete/:quizId", jwt.authenticate, quizzes.delete); +router.put("/update", jwt.authenticate, quizzes.update); +router.put("/move", jwt.authenticate, quizzes.move); -module.exports = router; \ No newline at end of file +router.post("/duplicate", jwt.authenticate, quizzes.duplicate); +router.post("/copy/:quizId", jwt.authenticate, quizzes.copy); +router.put("/Share", jwt.authenticate, quizzes.share); +router.get("/getShare/:quizId", jwt.authenticate, quizzes.getShare); +router.post("/receiveShare", jwt.authenticate, quizzes.receiveShare); + +module.exports = router; diff --git a/server/routers/users.js b/server/routers/users.js index 649e813..608daa5 100644 --- a/server/routers/users.js +++ b/server/routers/users.js @@ -1,10 +1,7 @@ const express = require('express'); const router = express.Router(); - +const users = require('../app.js').users; const jwt = require('../middleware/jwtToken.js'); -const usersController = require('../controllers/users.js'); -// instantiate the controller -const users = new usersController(); router.post("/register", users.register); router.post("/login", users.login);