58 lines
2.6 KiB
JavaScript
58 lines
2.6 KiB
JavaScript
const { createPool, listPools, updatePoolState } = require('../../services/pool/PoolService');
|
|
|
|
module.exports = {
|
|
async create(req, res) {
|
|
try {
|
|
const { pool_name, description, price, pool_type, is_active } = req.body || {};
|
|
const actorUserId = req.user && req.user.userId;
|
|
if (!pool_name) return res.status(400).json({ success: false, message: 'Pool name is required' });
|
|
if (!price || price < 0) return res.status(400).json({ success: false, message: 'Valid price is required' });
|
|
if (pool_type && !['coffee', 'other'].includes(pool_type)) {
|
|
return res.status(400).json({ success: false, message: 'Invalid pool_type. Allowed: coffee, other' });
|
|
}
|
|
const pool = await createPool({ pool_name, description, price, pool_type, is_active, created_by: actorUserId });
|
|
return res.status(201).json({ success: true, data: pool });
|
|
} catch (e) {
|
|
if (e && (e.code === 'ER_DUP_ENTRY' || e.errno === 1062)) {
|
|
return res.status(409).json({ success: false, message: 'Pool name already exists' });
|
|
}
|
|
if (e && e.status === 400) {
|
|
return res.status(400).json({ success: false, message: e.message });
|
|
}
|
|
console.error('[PoolController.create]', e);
|
|
return res.status(500).json({ success: false, message: 'Internal server error' });
|
|
}
|
|
},
|
|
|
|
async list(req, res) {
|
|
try {
|
|
console.debug('[PoolController.list] GET /api/admin/pools');
|
|
const pools = await listPools();
|
|
return res.status(200).json({ success: true, data: pools });
|
|
} catch (e) {
|
|
console.error('[PoolController.list] error', e);
|
|
return res.status(500).json({ success: false, message: 'Internal server error' });
|
|
}
|
|
},
|
|
|
|
// Update pool active status
|
|
async updateActive(req, res) {
|
|
try {
|
|
const { id } = req.params || {};
|
|
const { is_active } = req.body || {};
|
|
const actorUserId = req.user && req.user.userId;
|
|
if (!id) return res.status(400).json({ success: false, message: 'id is required' });
|
|
if (typeof is_active !== 'boolean') {
|
|
return res.status(400).json({ success: false, message: 'is_active must be a boolean' });
|
|
}
|
|
const updated = await updatePoolState(id, is_active, actorUserId);
|
|
return res.status(200).json({ success: true, data: updated });
|
|
} catch (e) {
|
|
if (e && e.status === 400) {
|
|
return res.status(400).json({ success: false, message: e.message });
|
|
}
|
|
console.error('[PoolController.updateActive]', e);
|
|
return res.status(500).json({ success: false, message: 'Internal server error' });
|
|
}
|
|
}
|
|
}; |