Umfangreiche Änderungen für Trainingslogging
This commit is contained in:
60
backend/services/diaryMemberService.js
Normal file
60
backend/services/diaryMemberService.js
Normal file
@@ -0,0 +1,60 @@
|
||||
import DiaryMemberNote from '../models/DiaryMemberNote.js';
|
||||
import DiaryMemberTag from '../models/DiaryMemberTag.js';
|
||||
import { DiaryTag } from '../models/DiaryTag.js';
|
||||
import { checkAccess } from '../utils/userUtils.js';
|
||||
|
||||
class DiaryMemberService {
|
||||
async addNoteToMember(userToken, clubId, diaryDateId, memberId, content) {
|
||||
await checkAccess(userToken, clubId);
|
||||
const existingNote = await DiaryMemberNote.findOne({ where: { diaryDateId, memberId, content } });
|
||||
if (!existingNote) {
|
||||
await DiaryMemberNote.create({ diaryDateId, memberId, content });
|
||||
}
|
||||
}
|
||||
|
||||
async getNotesForMember(userToken, clubId, diaryDateId, memberId) {
|
||||
await checkAccess(userToken, clubId);
|
||||
return await DiaryMemberNote.findAll({ where: { diaryDateId, memberId }, order: [['createdAt', 'DESC']] });
|
||||
}
|
||||
|
||||
async addTagToMemberAndDate(userToken, clubId, diaryDateId, memberId, tagId) {
|
||||
await checkAccess(userToken, clubId);
|
||||
const existingTag = await DiaryMemberTag.findOne({ where: { diaryDateId, memberId, tagId } });
|
||||
if (!existingTag) {
|
||||
await DiaryMemberTag.create({ diaryDateId, memberId, tagId });
|
||||
}
|
||||
}
|
||||
|
||||
async getTagsForMemberAndDate(userToken, clubId, diaryDateId, memberId) {
|
||||
await checkAccess(userToken, clubId);
|
||||
return await DiaryMemberTag.findAll({
|
||||
where: { diaryDateId, memberId },
|
||||
include: [{ model: DiaryTag, as: 'tag' }]
|
||||
});
|
||||
}
|
||||
|
||||
async removeNoteFromMember(userToken, clubId, diaryDateId, memberId, content) {
|
||||
await checkAccess(userToken, clubId);
|
||||
|
||||
const note = await DiaryMemberNote.findOne({ where: { diaryDateId, memberId, content } });
|
||||
if (note) {
|
||||
await note.destroy();
|
||||
} else {
|
||||
throw new Error('Die Notiz existiert nicht.');
|
||||
}
|
||||
}
|
||||
|
||||
async removeTagFromMemberAndDate(userToken, clubId, diaryDateId, memberId, tag) {
|
||||
await checkAccess(userToken, clubId);
|
||||
const tagLink = await DiaryMemberTag.findOne({ where: { diaryDateId, memberId, tagId: tag.id } });
|
||||
if (tagLink) {
|
||||
await tagLink.destroy();
|
||||
} else {
|
||||
console.log(diaryDateId, memberId, tagId);
|
||||
throw new Error('Das Tag ist nicht verknüpft.');
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
export default new DiaryMemberService();
|
||||
@@ -1,5 +1,8 @@
|
||||
import DiaryDate from '../models/DiaryDates.js';
|
||||
import Club from '../models/Club.js';
|
||||
import DiaryNote from '../models/DiaryNote.js';
|
||||
import { DiaryTag } from '../models/DiaryTag.js';
|
||||
import DiaryDateTag from '../models/DiaryDateTag.js';
|
||||
import { checkAccess } from '../utils/userUtils.js';
|
||||
import HttpError from '../exceptions/HttpError.js';
|
||||
|
||||
@@ -15,9 +18,12 @@ class DiaryService {
|
||||
console.log('[DiaryService::getDatesForClub] - Load diary dates');
|
||||
const dates = await DiaryDate.findAll({
|
||||
where: { clubId },
|
||||
include: [
|
||||
{ model: DiaryNote, as: 'diaryNotes' }, // Der Alias für DiaryNote ist korrekt
|
||||
{ model: DiaryTag, as: 'diaryTags' }, // Hier muss der Alias auf 'diaryTags' geändert werden
|
||||
],
|
||||
order: [['date', 'ASC'], ['trainingStart', 'ASC']]
|
||||
});
|
||||
|
||||
return dates;
|
||||
}
|
||||
|
||||
@@ -42,7 +48,7 @@ class DiaryService {
|
||||
date: parsedDate,
|
||||
clubId,
|
||||
trainingStart: trainingStart || null,
|
||||
trainingEnd: trainingEnd || null,
|
||||
trainingEnd: trainingEnd || null,
|
||||
});
|
||||
|
||||
return newDate;
|
||||
@@ -65,6 +71,74 @@ class DiaryService {
|
||||
await diaryDate.save();
|
||||
return diaryDate;
|
||||
}
|
||||
|
||||
async addNoteToDate(userToken, diaryDateId, content) {
|
||||
console.log('[DiaryService::addNoteToDate] - Add note');
|
||||
await checkAccess(userToken, diaryDateId);
|
||||
await DiaryNote.create({ diaryDateId, content });
|
||||
return await DiaryNote.findAll({ where: { diaryDateId }, order: [['createdAt', 'DESC']] });
|
||||
}
|
||||
|
||||
async deleteNoteFromDate(userToken, noteId) {
|
||||
console.log('[DiaryService::deleteNoteFromDate] - Delete note');
|
||||
const note = await DiaryNote.findByPk(noteId);
|
||||
if (!note) {
|
||||
throw new HttpError('Note not found', 404);
|
||||
}
|
||||
await checkAccess(userToken, note.diaryDateId);
|
||||
await note.destroy();
|
||||
return await DiaryNote.findAll({ where: { diaryDateId: note.diaryDateId }, order: [['createdAt', 'DESC']] });
|
||||
}
|
||||
|
||||
async addTagToDate(userToken, diaryDateId, tagName) {
|
||||
console.log('[DiaryService::addTagToDate] - Add tag');
|
||||
await checkAccess(userToken, diaryDateId);
|
||||
let tag = await DiaryTag.findOne({ where: { name: tagName } });
|
||||
if (!tag) {
|
||||
tag = await DiaryTag.create({ name: tagName });
|
||||
}
|
||||
const diaryDate = await DiaryDate.findByPk(diaryDateId);
|
||||
await diaryDate.addTag(tag);
|
||||
return await diaryDate.getTags();
|
||||
}
|
||||
|
||||
async addTagToDiaryDate(userToken, clubId, diaryDateId, tagId) {
|
||||
checkAccess(userToken, clubId);
|
||||
console.log(`[DiaryService::addTagToDiaryDate] - diaryDateId: ${diaryDateId}, tagId: ${tagId}`);
|
||||
const diaryDate = await DiaryDate.findByPk(diaryDateId);
|
||||
if (!diaryDate) {
|
||||
throw new HttpError('DiaryDate not found', 404);
|
||||
}
|
||||
const existingEntry = await DiaryDateTag.findOne({
|
||||
where: { diaryDateId, tagId }
|
||||
});
|
||||
if (existingEntry) {
|
||||
return;
|
||||
}
|
||||
const tag = await DiaryTag.findByPk(tagId);
|
||||
if (!tag) {
|
||||
throw new HttpError('Tag not found', 404);
|
||||
}
|
||||
await DiaryDateTag.create({
|
||||
diaryDateId,
|
||||
tagId
|
||||
})
|
||||
return diaryDate.getDiaryTags();
|
||||
}
|
||||
|
||||
async getDiaryNotesForDateAndMember(diaryDateId, memberId) {
|
||||
console.log('[DiaryService::getDiaryNotesForDateAndMember] - Fetching notes');
|
||||
return await DiaryNote.findAll({
|
||||
where: { diaryDateId, memberId },
|
||||
order: [['createdAt', 'DESC']]
|
||||
});
|
||||
}
|
||||
|
||||
async removeTagFromDiaryDate(userToken, clubId, tagId) {
|
||||
await checkAccess(userToken, clubId);
|
||||
await DiaryDateTag.destroy({ where: { tagId } });
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
export default DiaryService;
|
||||
export default new DiaryService();
|
||||
|
||||
29
backend/services/memberNoteService.js
Normal file
29
backend/services/memberNoteService.js
Normal file
@@ -0,0 +1,29 @@
|
||||
import MemberNote from '../models/MemberNote.js';
|
||||
import { checkAccess } from '../utils/userUtils.js';
|
||||
|
||||
class MemberNoteService {
|
||||
async addNoteToMember(userToken, clubId, memberId, content) {
|
||||
await checkAccess(userToken, clubId);
|
||||
return await MemberNote.create({ memberId, content });
|
||||
}
|
||||
|
||||
async getNotesForMember(userToken, clubId, memberId) {
|
||||
console.log(userToken, clubId);
|
||||
await checkAccess(userToken, clubId);
|
||||
return await MemberNote.findAll({
|
||||
where: { memberId },
|
||||
order: [['createdAt', 'DESC']]
|
||||
});
|
||||
}
|
||||
|
||||
async deleteNoteForMember(userToken, clubId, noteId) {
|
||||
await checkAccess(userToken, clubId);
|
||||
const note = await MemberNote.findByPk(noteId);
|
||||
if (!note) {
|
||||
throw new Error('Note not found');
|
||||
}
|
||||
await note.destroy();
|
||||
}
|
||||
}
|
||||
|
||||
export default new MemberNoteService();
|
||||
Reference in New Issue
Block a user