Files
web-cad/backend/src/routes/projects.ts
T

45 lines
1.5 KiB
TypeScript
Raw Normal View History

/**
* Projects Routes CRUD for projects
*/
import type { FastifyInstance } from 'fastify';
import type { DatabaseInterface, DBProject } from '../database/DatabaseInterface.js';
export function registerProjectRoutes(fastify: FastifyInstance, db: DatabaseInterface) {
// List all projects
fastify.get('/api/projects', async () => {
return db.listProjects();
});
// Get single project
fastify.get('/api/projects/:id', async (request, reply) => {
const { id } = request.params as { id: string };
const project = db.getProject(id);
if (!project) return reply.code(404).send({ error: 'Project not found' });
return project;
});
// Create project
fastify.post('/api/projects', async (request, reply) => {
const body = request.body as Partial<DBProject>;
if (!body.name) return reply.code(400).send({ error: 'Name is required' });
return reply.code(201).send(db.createProject(body));
});
// Update project
fastify.patch('/api/projects/:id', async (request, reply) => {
const { id } = request.params as { id: string };
const body = request.body as Partial<DBProject>;
const updated = db.updateProject(id, body);
if (!updated) return reply.code(404).send({ error: 'Project not found' });
return updated;
});
// Delete project
fastify.delete('/api/projects/:id', async (request, reply) => {
const { id } = request.params as { id: string };
const ok = db.deleteProject(id);
if (!ok) return reply.code(404).send({ error: 'Project not found' });
return reply.code(204).send();
});
}