Umfangreiche Änderungen für Trainingslogging

This commit is contained in:
Torsten Schulz
2024-09-09 22:51:37 +02:00
parent c65c629210
commit 28bf98a169
32 changed files with 1702 additions and 54 deletions

View 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();

View File

@@ -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();

View 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();