170 lines
3.6 KiB
JavaScript
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;
|
|
|