89 lines
2.9 KiB
JavaScript
89 lines
2.9 KiB
JavaScript
const { WorshipLeader } = require('../models');
|
|
const { Op } = require('sequelize');
|
|
|
|
function normalizeLeaderPayload(body) {
|
|
const code = String(body.code || '').trim();
|
|
const name = String(body.name || '').trim();
|
|
const aliases = String(body.aliases || '').trim();
|
|
const active = body.active === undefined ? true : !!body.active;
|
|
return { code, name, aliases, active };
|
|
}
|
|
|
|
exports.getAllWorshipLeaders = async (req, res) => {
|
|
try {
|
|
const includeInactive = String(req.query?.includeInactive || '').toLowerCase();
|
|
const wantsInactive = includeInactive === '1' || includeInactive === 'true' || includeInactive === 'yes';
|
|
|
|
const where = wantsInactive ? undefined : { active: true };
|
|
const leaders = await WorshipLeader.findAll({
|
|
where,
|
|
order: [['code', 'ASC']],
|
|
});
|
|
res.json(leaders);
|
|
} catch (error) {
|
|
console.error('getAllWorshipLeaders:', error);
|
|
res.status(500).json({ error: 'Failed to fetch worship leaders' });
|
|
}
|
|
};
|
|
|
|
exports.createWorshipLeader = async (req, res) => {
|
|
try {
|
|
const payload = normalizeLeaderPayload(req.body || {});
|
|
if (!payload.code || !payload.name) {
|
|
return res.status(400).json({ message: 'code und name sind Pflichtfelder.' });
|
|
}
|
|
const existing = await WorshipLeader.findOne({ where: { code: payload.code } });
|
|
if (existing) {
|
|
return res.status(409).json({ message: `Kürzel "${payload.code}" existiert bereits.` });
|
|
}
|
|
const created = await WorshipLeader.create(payload);
|
|
res.status(201).json(created);
|
|
} catch (error) {
|
|
console.error('createWorshipLeader:', error);
|
|
res.status(500).json({ error: 'Failed to create worship leader' });
|
|
}
|
|
};
|
|
|
|
exports.updateWorshipLeader = async (req, res) => {
|
|
try {
|
|
const { id } = req.params;
|
|
const leader = await WorshipLeader.findByPk(id);
|
|
if (!leader) {
|
|
return res.status(404).json({ message: 'Worship leader not found' });
|
|
}
|
|
|
|
const payload = normalizeLeaderPayload(req.body || {});
|
|
if (!payload.code || !payload.name) {
|
|
return res.status(400).json({ message: 'code und name sind Pflichtfelder.' });
|
|
}
|
|
|
|
const codeClash = await WorshipLeader.findOne({
|
|
where: { code: payload.code, id: { [Op.ne]: id } },
|
|
});
|
|
if (codeClash) {
|
|
return res.status(409).json({ message: `Kürzel "${payload.code}" existiert bereits.` });
|
|
}
|
|
|
|
await leader.update(payload);
|
|
res.json(leader);
|
|
} catch (error) {
|
|
console.error('updateWorshipLeader:', error);
|
|
res.status(500).json({ error: 'Failed to update worship leader' });
|
|
}
|
|
};
|
|
|
|
exports.deleteWorshipLeader = async (req, res) => {
|
|
try {
|
|
const { id } = req.params;
|
|
const deleted = await WorshipLeader.destroy({ where: { id } });
|
|
if (!deleted) {
|
|
return res.status(404).json({ message: 'Worship leader not found' });
|
|
}
|
|
res.status(204).json();
|
|
} catch (error) {
|
|
console.error('deleteWorshipLeader:', error);
|
|
res.status(500).json({ error: 'Failed to delete worship leader' });
|
|
}
|
|
};
|
|
|