43 lines
1.4 KiB
TypeScript
43 lines
1.4 KiB
TypeScript
|
|
import { Router } from 'express';
|
||
|
|
import { projects, projectMembers } from '../db';
|
||
|
|
import { requireAuth } from '../middleware/auth';
|
||
|
|
import { createProjectStorage } from '../storage';
|
||
|
|
import { RJLog } from '../../src/library-ts/node/log/RJLog';
|
||
|
|
|
||
|
|
const router = Router();
|
||
|
|
router.use(requireAuth);
|
||
|
|
|
||
|
|
router.get('/', (_req, res) => res.json(projects.all()));
|
||
|
|
|
||
|
|
router.post('/', (req, res) => {
|
||
|
|
const { name } = req.body as { name?: string };
|
||
|
|
if (!name) { res.status(400).json({ error: 'Name required' }); return; }
|
||
|
|
const project = projects.create({ name, owner_id: req.session.userId! });
|
||
|
|
createProjectStorage(project.id);
|
||
|
|
res.json(project);
|
||
|
|
});
|
||
|
|
|
||
|
|
router.delete('/:id', (req, res) => {
|
||
|
|
|
||
|
|
RJLog.log( "Deleting:", req.params.id );
|
||
|
|
projects.delete(req.params.id);
|
||
|
|
res.json({ ok: true });
|
||
|
|
});
|
||
|
|
|
||
|
|
router.get('/:id/members', (req, res) => {
|
||
|
|
res.json(projectMembers.forProject(req.params.id));
|
||
|
|
});
|
||
|
|
|
||
|
|
router.post('/:id/members', (req, res) => {
|
||
|
|
const { member_type, member_id, role } = req.body as { member_type?: 'user' | 'group'; member_id?: string; role?: string };
|
||
|
|
if (!member_type || !member_id) { res.status(400).json({ error: 'member_type and member_id required' }); return; }
|
||
|
|
res.json(projectMembers.add({ project_id: req.params.id, member_type, member_id, role: role ?? 'viewer' }));
|
||
|
|
});
|
||
|
|
|
||
|
|
router.delete('/:id/members/:memberId', (req, res) => {
|
||
|
|
projectMembers.remove(req.params.memberId);
|
||
|
|
res.json({ ok: true });
|
||
|
|
});
|
||
|
|
|
||
|
|
export default router;
|