Files
timelapse-backend/routes/projectRoutes.js

92 lines
3.3 KiB
JavaScript

const express = require('express');
const router = express.Router();
const serverError = require('../utils/serverError');
const database_manager = require('../src/database/database_manager');
const storage_manager = require('../src/data/storage_manager');
router.get('/projects', async (req, res) => {
try {
const projects = await database_manager.project.get_all_projects();
res.json(projects);
} catch (error) {
serverError.sendError('Error getting all projects:', res, error, 500);
}
});
router.get('/projects/:id', async (req, res) => {
const projectId = req.params.id;
if (!projectId || isNaN(projectId)) {
return res.status(400).json({ error: 'Invalid project ID' });
}
try {
const project = await database_manager.project.get_project_by_id(projectId);
res.json(project);
} catch (error) {
serverError.sendError('Error getting project by ID:', res, error, 500);
}
});
router.get('/projects/:id/videos', async (req, res) => {
const projectId = req.params.id;
if (!projectId || isNaN(projectId)) {
return res.status(400).json({ error: 'Invalid project ID' });
}
try {
const videos = await database_manager.video.get_videos_by_project_id(projectId);
if (videos.length === 0) {
return res.status(404).json({ error: 'No videos found for this project' });
}
res.json(videos);
} catch (error) {
serverError.sendError('Error getting videos by project ID:', res, error, 500);
}
});
router.get('/projects/:id/measurements', async (req, res) => {
const projectId = req.params.id;
if (!projectId || isNaN(projectId)) {
return res.status(400).json({ error: 'Invalid project ID' });
}
try {
const measurements = await database_manager.measurement.get_measurements_by_project_id(projectId);
if (measurements.length === 0) {
return res.status(404).json({ error: 'No measurements found for this project' });
}
res.json(measurements);
} catch (error) {
serverError.sendError('Error getting measurements by project ID:', res, error, 500);
}
});
router.post('/projects', async (req, res) => {
const { name, description } = req.body;
if (!name || !description) {
return res.status(400).json({ error: 'Name and description are required' });
}
try {
const date = new Date();
const default_status = 0;
const project = await database_manager.project.create_project(name, description, date, default_status);
storage_manager.project.createProjectDirectory(project.id);
res.status(201).json({ message: 'Project added successfully', id: project.id });
} catch (error) {
serverError.sendError('Error creating project:', res, error, 500);
}
});
router.delete('/projects/:id', async (req, res) => {
const projectId = req.params.id;
if (!projectId || isNaN(projectId)) {
return res.status(400).json({ error: 'Invalid project ID' });
}
try {
storage_manager.project.deleteProjectDirectory(projectId);
await database_manager.project.delete_project(projectId);
res.status(200).json({ message: 'Project deleted successfully', id: projectId });
} catch (error) {
serverError.sendError('Error deleting project:', res, error, 500);
}
});
module.exports = router;