rojects/source/server/routes/groups.ts

41 lines
1.2 KiB
TypeScript
Raw Permalink Normal View History

import { Router } from 'express';
import { groups, groupMembers } from '../db';
2026-07-17 12:00:16 +00:00
import { requireAuth } from '../../auth-connector/source/server/auth';
const router = Router();
router.use(requireAuth);
router.get('/', (_req, res) => res.json(groups.all()));
router.post('/', (req, res) => {
const { name } = req.body as { name?: string };
if (!name) { res.status(400).json({ error: 'Name required' }); return; }
try {
res.json(groups.create({ name }));
} catch {
res.status(409).json({ error: 'Group name already taken' });
}
});
router.delete('/:id', (req, res) => {
groups.delete(req.params.id);
res.json({ ok: true });
});
router.get('/:id/members', (req, res) => {
res.json(groupMembers.forGroup(req.params.id));
});
router.post('/:id/members', (req, res) => {
const { member_type, member_id } = req.body as { member_type?: 'user' | 'group'; member_id?: string };
if (!member_type || !member_id) { res.status(400).json({ error: 'member_type and member_id required' }); return; }
res.json(groupMembers.add({ group_id: req.params.id, member_type, member_id }));
});
router.delete('/:id/members/:memberId', (req, res) => {
groupMembers.remove(req.params.memberId);
res.json({ ok: true });
});
export default router;