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;