diff --git a/src/app.ts b/src/app.ts index 099f8a4..45dd2ee 100644 --- a/src/app.ts +++ b/src/app.ts @@ -6,6 +6,7 @@ import { StatusCodes } from 'http-status-codes'; import authRouter from './routes/auth'; import algorithmRouter from './routes/algorithm'; import userRouter from './routes/user'; +import projectsRouter from './routes/projects'; import cookieParser from 'cookie-parser'; const app = express(); const port = 3001; @@ -42,6 +43,7 @@ app.get('/', (req: Request, res: Response) => { app.use('/auth', authRouter); app.use('/algorithm', algorithmRouter); app.use('/user', userRouter); +app.use('/projects', projectsRouter); if (process.env.NODE_ENV !== 'test') { app.listen(port, () => { diff --git a/src/routes/projects/index.ts b/src/routes/projects/index.ts new file mode 100644 index 0000000..467bf10 --- /dev/null +++ b/src/routes/projects/index.ts @@ -0,0 +1,20 @@ +import express, { Router, Request, Response } from 'express'; +import { validateAndExtractAuthToken } from '../../utils/middleware/authToken.middleware'; +import projectsManager from '../../utils/services/projects.manager'; + +const router: Router = express.Router(); + +router.post( + '/create', + validateAndExtractAuthToken(), + async (req: Request, res: Response) => { + const userId = req.userId; + + const { status, response } = await projectsManager.createProject( + userId ?? '' + ); + res.status(status).send({ response }); + } +); + +export default router; diff --git a/src/utils/services/projects.manager.ts b/src/utils/services/projects.manager.ts new file mode 100644 index 0000000..d2fe517 --- /dev/null +++ b/src/utils/services/projects.manager.ts @@ -0,0 +1,54 @@ +import { StatusCodes } from 'http-status-codes'; +import { DatabaseManager } from './database.manager'; +import { ObjectId } from 'mongodb'; + +class ProjectsManager { + private static instance: ProjectsManager; + private userDatabaseManager = new DatabaseManager('Users'); + private projectsDatabaseManager = new DatabaseManager('Projects'); + + private constructor() {} + + public static getInstance(): ProjectsManager { + if (!ProjectsManager.instance) { + ProjectsManager.instance = new ProjectsManager(); + } + return ProjectsManager.instance; + } + + public async createProject( + userId: string + ): Promise<{ status: number; response: string }> { + try { + const user = await this.userDatabaseManager.findOne({ + _id: new ObjectId(userId), + }); + if (!user) { + return { status: StatusCodes.NOT_FOUND, response: 'User not found' }; + } + const projects = await this.projectsDatabaseManager.find({ + user: new ObjectId(userId), + }); + const result = await this.projectsDatabaseManager.create({ + user: new ObjectId(userId), + name: `New Project ${projects.length + 1}`, + participants: 10, + registrants: 0, + group_size: 2, + preferences: 0, + }); + if (result.acknowledged) { + return { status: StatusCodes.OK, response: 'Created project' }; + } + } catch (err) { + console.error('Failed to create project:', err); + } + return { + status: StatusCodes.INTERNAL_SERVER_ERROR, + response: 'Failed to created project', + }; + } +} + +const projectsManager = ProjectsManager.getInstance(); +export default projectsManager;