Files
recipe-manager/server/routes/friend.ts
Mikayla Dobson a7f3fd6e10 api maintenance
2023-02-18 10:58:58 -06:00

91 lines
3.0 KiB
TypeScript

import { Express, Router } from 'express';
import { restrictAccess } from '../auth/middlewares';
import { UserCtl } from '../controllers';
import { IUser } from '../schemas';
import { StatusCode } from '../util/types';
const UserInstance = new UserCtl();
const router = Router();
export const friendRouter = (app: Express) => {
app.use('/app/friend', router);
router.post('/:targetid', restrictAccess, async (req, res, next) => {
const user = req.user as IUser;
const { targetid } = req.params;
try {
const { code, data } = await UserInstance.addFriendship(user.id as number, targetid);
res.status(code).send(data);
} catch(e) {
next(e);
}
})
// get all friendships for a user
router.get('/', async (req, res, next) => {
const user = req.user as IUser;
const { pending, accepted, targetUser } = req.query;
try {
if (pending) {
const { code, data } = await UserInstance.getPendingFriendRequests(user.id as number);
res.status(code).send(data);
} else if (accepted) {
const { code, data } = await UserInstance.getAcceptedFriends(user.id as number);
res.status(code).send(data);
} else {
if (targetUser) {
const { code, data } = await UserInstance.getFriends(parseInt(targetUser as string));
res.status(code).send(data);
} else {
const { code, data } = await UserInstance.getFriends(user.id as number);
res.status(code).send(data);
}
}
// send server error in case any of these conditions not landing
res.status(StatusCode.ServerError).json({ message: "An unexpected error occurred." });
} catch(e) {
next(e);
}
})
// get one friendship by its id
router.get('/:id', async (req, res, next) => {
const { id } = req.params;
const user = req.user as IUser;
try {
const { code, data } = await UserInstance.getFriendshipByID(id, user.id as number);
res.status(code).send(data);
} catch(e) {
next(e);
}
})
/**
* Update friendship by friendship ID
* allows user who received a friend request to confirm it
* expects body schema of:
* active: boolean
* pending: boolean
* dateterminated: string | null
* receives friendship ID from req.params and checks
* against current user ID from session
*/
router.put('/:id', async (req, res, next) => {
const data = req.body;
const { id } = req.params;
const user = req.user as IUser;
try {
const response = await UserInstance.updateFriendship(id, user.id as number, data);
res.status(response.code).send(response.data);
} catch(e) {
next(e);
}
})
return router;
}