import { Router } from 'express'; import { PoolModel } from '../models'; import { ObjectID } from 'mongodb'; import requireApiAuth from '../requireApiAuth'; export const router = Router(); router.post('/:poolID/join', async (req, res) => { const userID = req.session.accountID; const poolID = req.params.poolID; await PoolModel.findByIdAndUpdate(poolID, { $addToSet: { participant_ids: userID }, }).exec(); res.json({ status: 'success' }); }); router.post('/:poolID/leave', async (req, res) => { const userID = req.session.accountID; const poolID = req.params.poolID; await PoolModel.findByIdAndUpdate(poolID, { $pull: { participant_ids: userID }, }).exec(); res.json({ status: 'success' }); }); router.get('/:poolID', async (req, res) => { const pool = await PoolModel.findById(new ObjectID(req.params.poolID)).exec(); if (pool) { res.json({ status: 'success', data: pool.toJSON() }); } else { res.json({ status: 'error', error: 'not_found' }); } }); router.post('/', requireApiAuth, async (req, res) => { const userID = req.session.accountID; const { capacity, description, direction, end_time, group_id, start_time, title, type, } = req.body; const pool = new PoolModel(); Object.assign(pool, { author_id: userID, capacity, description, direction, status: 'pending', title, type, participant_ids: [userID], comments: [], create_time: new Date().toISOString(), update_time: new Date().toISOString(), group_id, }); pool .save() .then((pool) => { res.json({ status: 'success', id: pool._id }); }) .catch((err) => { console.error('Error when creating a pool:', err); res.json({ status: 'error' }); }); });