diff --git a/backend/controllers/memberController.js b/backend/controllers/memberController.js index c651565..ac9692f 100644 --- a/backend/controllers/memberController.js +++ b/backend/controllers/memberController.js @@ -124,6 +124,18 @@ const quickUpdateMemberFormHandedOver = async (req, res) => { } }; +const quickDeactivateMember = async (req, res) => { + try { + const { clubId, memberId } = req.params; + const { authcode: userToken } = req.headers; + const result = await MemberService.quickDeactivateMember(userToken, clubId, memberId); + res.status(result.status).json(result.response); + } catch (error) { + console.error('[quickDeactivateMember] - Error:', error); + res.status(500).json({ error: 'Failed to deactivate member' }); + } +}; + const transferMembers = async (req, res) => { try { const { id: clubId } = req.params; @@ -156,4 +168,4 @@ const transferMembers = async (req, res) => { } }; -export { getClubMembers, getWaitingApprovals, setClubMembers, uploadMemberImage, getMemberImage, updateRatingsFromMyTischtennis, rotateMemberImage, transferMembers, quickUpdateTestMembership, quickUpdateMemberFormHandedOver }; \ No newline at end of file +export { getClubMembers, getWaitingApprovals, setClubMembers, uploadMemberImage, getMemberImage, updateRatingsFromMyTischtennis, rotateMemberImage, transferMembers, quickUpdateTestMembership, quickUpdateMemberFormHandedOver, quickDeactivateMember }; \ No newline at end of file diff --git a/backend/routes/memberRoutes.js b/backend/routes/memberRoutes.js index 5549d6f..39ac51d 100644 --- a/backend/routes/memberRoutes.js +++ b/backend/routes/memberRoutes.js @@ -1,4 +1,4 @@ -import { getClubMembers, getWaitingApprovals, setClubMembers, uploadMemberImage, getMemberImage, updateRatingsFromMyTischtennis, rotateMemberImage, transferMembers, quickUpdateTestMembership, quickUpdateMemberFormHandedOver } from '../controllers/memberController.js'; +import { getClubMembers, getWaitingApprovals, setClubMembers, uploadMemberImage, getMemberImage, updateRatingsFromMyTischtennis, rotateMemberImage, transferMembers, quickUpdateTestMembership, quickUpdateMemberFormHandedOver, quickDeactivateMember } from '../controllers/memberController.js'; import express from 'express'; import { authenticate } from '../middleware/authMiddleware.js'; import { authorize } from '../middleware/authorizationMiddleware.js'; @@ -19,5 +19,6 @@ router.post('/rotate-image/:clubId/:memberId', authenticate, authorize('members' router.post('/transfer/:id', authenticate, authorize('members', 'write'), transferMembers); router.post('/quick-update-test-membership/:clubId/:memberId', authenticate, authorize('members', 'write'), quickUpdateTestMembership); router.post('/quick-update-member-form/:clubId/:memberId', authenticate, authorize('members', 'write'), quickUpdateMemberFormHandedOver); +router.post('/quick-deactivate/:clubId/:memberId', authenticate, authorize('members', 'write'), quickDeactivateMember); export default router; diff --git a/backend/services/memberService.js b/backend/services/memberService.js index 3bc2e62..1e534e7 100644 --- a/backend/services/memberService.js +++ b/backend/services/memberService.js @@ -544,6 +544,31 @@ class MemberService { return { status: 500, response: { error: 'Failed to update member form status' } }; } } + + async quickDeactivateMember(userToken, clubId, memberId) { + try { + await checkAccess(userToken, clubId); + const member = await Member.findOne({ where: { id: memberId, clubId: clubId } }); + if (!member) { + return { status: 404, response: { error: 'Member not found in this club' } }; + } + + if (!member.active) { + return { status: 400, response: { error: 'Member is already inactive' } }; + } + + member.active = false; + await member.save(); + + return { + status: 200, + response: { success: true, message: 'Mitglied deaktiviert' } + }; + } catch (error) { + console.error('[quickDeactivateMember] - Error:', error); + return { status: 500, response: { error: 'Failed to deactivate member' } }; + } + } } export default new MemberService(); \ No newline at end of file diff --git a/frontend/src/views/MembersView.vue b/frontend/src/views/MembersView.vue index 3a29d84..6d362b1 100644 --- a/frontend/src/views/MembersView.vue +++ b/frontend/src/views/MembersView.vue @@ -161,15 +161,22 @@ -