plugin-voting/routes/forms.js
2025-11-03 14:01:07 +02:00

170 lines
3.6 KiB
JavaScript

const express = require('express');
const router = express.Router();
const { FormRepository } = require('../repositories');
const logger = require('../../../src/utils/logger');
/**
* Get all forms for the site
* GET /api/plugins/voting/forms
*/
router.get('/', async (req, res) => {
try {
const siteId = req.query.site_id || req.user?.siteId;
const formRepo = new FormRepository();
const filters = { site_id: siteId };
const options = {
orderBy: 'created_at',
orderDirection: 'desc'
};
const forms = await formRepo.findWithFilters(filters, options);
res.json({
success: true,
data: forms
});
} catch (error) {
logger.error('Failed to get forms:', error);
res.status(500).json({
success: false,
error: 'Failed to retrieve forms',
message: error.message
});
}
});
/**
* Get a specific form by ID
* GET /api/plugins/voting/forms/:id
*/
router.get('/:id', async (req, res) => {
try {
const { id } = req.params;
const formRepo = new FormRepository();
const form = await formRepo.findOne({ id });
if (!form) {
return res.status(404).json({
success: false,
error: 'Form not found'
});
}
res.json({
success: true,
data: form
});
} catch (error) {
logger.error('Failed to get form:', error);
res.status(500).json({
success: false,
error: 'Failed to retrieve form',
message: error.message
});
}
});
/**
* Create or update a form
* POST /api/plugins/voting/forms
*/
router.post('/', async (req, res) => {
try {
const formRepo = new FormRepository();
const formData = {
...req.body,
created_by: req.user?.id,
created_at: new Date().toISOString(),
updated_at: new Date().toISOString()
};
const form = await formRepo.create(formData);
res.status(201).json({
success: true,
data: form,
message: 'Form created successfully'
});
} catch (error) {
logger.error('Failed to create form:', error);
res.status(500).json({
success: false,
error: 'Failed to create form',
message: error.message
});
}
});
/**
* Update a form
* PUT /api/plugins/voting/forms/:id
*/
router.put('/:id', async (req, res) => {
try {
const { id } = req.params;
const formRepo = new FormRepository();
const updateData = {
...req.body,
updated_at: new Date().toISOString()
};
const form = await formRepo.updateById(id, updateData);
if (!form) {
return res.status(404).json({
success: false,
error: 'Form not found'
});
}
res.json({
success: true,
data: form,
message: 'Form updated successfully'
});
} catch (error) {
logger.error('Failed to update form:', error);
res.status(500).json({
success: false,
error: 'Failed to update form',
message: error.message
});
}
});
/**
* Delete a form
* DELETE /api/plugins/voting/forms/:id
*/
router.delete('/:id', async (req, res) => {
try {
const { id } = req.params;
const formRepo = new FormRepository();
const deleted = await formRepo.deleteById(id);
if (!deleted) {
return res.status(404).json({
success: false,
error: 'Form not found'
});
}
res.json({
success: true,
message: 'Form deleted successfully'
});
} catch (error) {
logger.error('Failed to delete form:', error);
res.status(500).json({
success: false,
error: 'Failed to delete form',
message: error.message
});
}
});
module.exports = router;