From edcfd8130aaa40d2d177194f2ae844bd9a450c30 Mon Sep 17 00:00:00 2001 From: Torsten Schulz Date: Wed, 25 Sep 2024 17:23:01 +0200 Subject: [PATCH] Fixed members handling --- backend/controllers/memberController.js | 24 +++++++++++++++++------- backend/routes/memberRoutes.js | 8 ++++---- backend/services/memberService.js | 22 +++++++++++++--------- backend/utils/userUtils.js | 15 ++++++++++----- frontend/src/views/DiaryView.vue | 6 +++--- frontend/src/views/MembersView.vue | 18 +++++++++--------- 6 files changed, 56 insertions(+), 37 deletions(-) diff --git a/backend/controllers/memberController.js b/backend/controllers/memberController.js index f815467..1172179 100644 --- a/backend/controllers/memberController.js +++ b/backend/controllers/memberController.js @@ -1,10 +1,14 @@ import MemberService from "../services/memberService.js"; const getClubMembers = async(req, res) => { + console.log('----->getClubMembers'); try { const { authcode: userToken } = req.headers; - const { id: clubId } = req.params; - res.status(200).json(await MemberService.getClubMembers(userToken, clubId)); + const { id: clubId, showAll } = req.params; + if (showAll === null) { + showAll = false; + } + res.status(200).json(await MemberService.getClubMembers(userToken, clubId, showAll)); } catch(error) { console.log('[getClubMembers] - Error: ', error); res.status(500).json({ error: 'systemerror' }); @@ -12,6 +16,7 @@ const getClubMembers = async(req, res) => { } const getWaitingApprovals = async(req, res) => { + console.log('----->setClubMembers'); try { console.log('[getWaitingApprovals] - Start'); const { id: clubId } = req.params; @@ -29,11 +34,16 @@ const getWaitingApprovals = async(req, res) => { } const setClubMembers = async (req, res) => { - const { id: memberId, firstname: firstName, lastname: lastName, street, city, birthdate, phone, email, active } = req.body; - const { id: clubId } = req.params; - const { authcode: userToken } = req.headers; - const addResult = await MemberService.setClubMember(userToken, clubId, memberId, firstName, lastName, street, city, birthdate, phone, email, active); - res.status(addResult.status || 500).json(addResult.response); + try { + const { id: memberId, firstname: firstName, lastname: lastName, street, city, birthdate, phone, email, active } = req.body; + const { id: clubId } = req.params; + const { authcode: userToken } = req.headers; + const addResult = await MemberService.setClubMember(userToken, clubId, memberId, firstName, lastName, street, city, birthdate, phone, email, active); + res.status(addResult.status || 500).json(addResult.response); + } catch (error) { + console.error('[setClubMembers] - Error:', error); + res.status(500).json({ error: 'Failed to upload image' }); + } } const uploadMemberImage = async (req, res) => { diff --git a/backend/routes/memberRoutes.js b/backend/routes/memberRoutes.js index 0619353..436e830 100644 --- a/backend/routes/memberRoutes.js +++ b/backend/routes/memberRoutes.js @@ -8,10 +8,10 @@ const router = express.Router(); const storage = multer.memoryStorage(); const upload = multer({ storage: storage }); -router.post('/:clubId/image/:memberId', authenticate, upload.single('image'), uploadMemberImage); -router.get('/:clubId/image/:memberId', authenticate, getMemberImage); -router.get('/:id', authenticate, getClubMembers); -router.post('/:id', authenticate, setClubMembers); +router.post('/image/:clubId/:memberId', authenticate, upload.single('image'), uploadMemberImage); +router.get('/image/:clubId/:memberId', authenticate, getMemberImage); +router.get('/get/:id/:showAll', authenticate, getClubMembers); +router.post('/set/:id', authenticate, setClubMembers); router.get('/notapproved/:id', authenticate, getWaitingApprovals); export default router; diff --git a/backend/services/memberService.js b/backend/services/memberService.js index bbd5ac3..301b403 100644 --- a/backend/services/memberService.js +++ b/backend/services/memberService.js @@ -17,16 +17,22 @@ class MemberService { where: { clubId: clubId, approved: false, - userId: user.id + userId: user.id } - }); + }); } - getClubMembers(userToken, clubId) { + getClubMembers(userToken, clubId, showAll) { console.log('[getClubMembers] - Check access'); checkAccess(userToken, clubId); console.log('[getClubMembers] - Find members'); - return Member.findAll({ where: { clubId: clubId } }) + const where = { + clubId: clubId + }; + if (!showAll) { + where.active = true; + } + return Member.findAll({ where }) .then(members => { return members.map(member => { const imagePath = path.join('images', 'members', `${member.id}.jpg`); @@ -66,7 +72,7 @@ class MemberService { member.birthDate = birthdate; member.phone = phone; member.email = email; - member.active = active; // Active status setzen + member.active = active; await member.save(); } else { await Member.create({ @@ -78,15 +84,13 @@ class MemberService { phone: phone, email: email, clubId: clubId, - active: active // Active status setzen + active: active }); } - console.log('[setClubMembers] - load club members'); - const members = await this.getClubMembers(userToken, clubId); console.log('[setClubMembers] - return response'); return { status: 200, - response: members, + response: { result: "success" }, } } catch (error) { console.log(error); diff --git a/backend/utils/userUtils.js b/backend/utils/userUtils.js index 13655b8..c90652d 100644 --- a/backend/utils/userUtils.js +++ b/backend/utils/userUtils.js @@ -35,10 +35,15 @@ export const hasUserClubAccess = async(userId, clubId) => { } export const checkAccess = async(userToken, clubId) => { - const user = await getUserByToken(userToken); - if (!await hasUserClubAccess(user.id, clubId)) { - console.log('no club access'); - const err = new HttpError('noaccess', 403); - throw err; + try { + const user = await getUserByToken(userToken); + if (!await hasUserClubAccess(user.id, clubId)) { + console.log('no club access'); + const err = new HttpError('noaccess', 403); + throw err; + } + } catch (error) { + console.log(error); + throw error; } } \ No newline at end of file diff --git a/frontend/src/views/DiaryView.vue b/frontend/src/views/DiaryView.vue index dd5ed33..934c1d4 100644 --- a/frontend/src/views/DiaryView.vue +++ b/frontend/src/views/DiaryView.vue @@ -302,7 +302,7 @@ export default { } }, async loadMembers() { - const response = await apiClient.get(`/clubmembers/${this.currentClub}`); + const response = await apiClient.get(`/clubmembers/get/${this.currentClub}/false`); this.members = response.data; }, async loadParticipants(dateId) { @@ -630,7 +630,7 @@ export default { }, async loadMemberImage(member) { try { - const response = await apiClient.get(`/clubmembers/${this.currentClub}/image/${member.id}`, { + const response = await apiClient.get(`/clubmembers/image/${this.currentClub}/${member.id}`, { responseType: 'blob', }); const imageUrl = URL.createObjectURL(response.data); @@ -664,7 +664,7 @@ export default { }, async loadMemberImage(member) { try { - const response = await apiClient.get(`/clubmembers/${this.currentClub}/image/${member.id}`, { + const response = await apiClient.get(`/clubmembers/image/${this.currentClub}/${member.id}`, { responseType: 'blob', }); this.imageUrl = URL.createObjectURL(response.data); diff --git a/frontend/src/views/MembersView.vue b/frontend/src/views/MembersView.vue index 45e9c00..da0c7b5 100644 --- a/frontend/src/views/MembersView.vue +++ b/frontend/src/views/MembersView.vue @@ -125,7 +125,10 @@ export default { }, methods: { async init() { - const response = await apiClient.get(`/clubmembers/${this.currentClub}`); + await this.loadMembers(); + }, + async loadMembers() { + const response = await apiClient.get(`/clubmembers/get/${this.currentClub}/true`); this.members = response.data; this.members.forEach(member => { this.loadMemberImage(member); @@ -149,8 +152,6 @@ export default { onFileSelected(event) { const file = event.target.files[0]; this.memberImage = file; - - // Bildvorschau erstellen if (file) { const reader = new FileReader(); reader.onload = (e) => { @@ -174,8 +175,8 @@ export default { let response; try { - response = await apiClient.post(`/clubmembers/${this.currentClub}`, memberData); - this.members = response.data; + response = await apiClient.post(`/clubmembers/set/${this.currentClub}`, memberData); + this.loadMembers(); } catch (error) { console.error("Fehler beim Speichern des Mitglieds:", error); return; @@ -186,7 +187,7 @@ export default { formData.append('image', this.memberImage); formData.append('clubId', this.currentClub); try { - await apiClient.post(`/clubmembers/${this.currentClub}/image/${this.memberToEdit.id}`, formData, { + await apiClient.post(`/clubmembers/image/${this.currentClub}/${this.memberToEdit.id}`, formData, { headers: { 'Content-Type': 'multipart/form-data' } @@ -210,8 +211,7 @@ export default { this.newEmail = member.email; this.newActive = member.active; try { - const response = await apiClient.get(`/clubmembers/${member.id}/image`, { - params: { clubId: this.currentClub }, + const response = await apiClient.get(`/clubmembers/image/${member.id}`, { responseType: 'blob' }); this.memberImagePreview = URL.createObjectURL(response.data); @@ -265,7 +265,7 @@ export default { }, async loadMemberImage(member) { try { - const response = await apiClient.get(`/clubmembers/${this.currentClub}/image/${member.id}`, { + const response = await apiClient.get(`/clubmembers/image/${this.currentClub}/${member.id}`, { responseType: 'blob', }); const imageUrl = URL.createObjectURL(response.data);