Added groups to diary

This commit is contained in:
Torsten Schulz
2024-10-21 18:21:43 +02:00
parent 47fa81e190
commit f230b73273
17 changed files with 589 additions and 218 deletions

View File

@@ -1,4 +1,6 @@
import DiaryDateActivity from '../models/DiaryDateActivity.js';
import GroupActivity from '../models/GroupActivity.js';
import Group from '../models/Group.js';
import PredefinedActivity from '../models/PredefinedActivity.js';
import { checkAccess } from '../utils/userUtils.js';
import { Op } from 'sequelize';
@@ -9,6 +11,7 @@ class DiaryDateActivityService {
console.log('[DiaryDateActivityService::createActivity] - check user access');
await checkAccess(userToken, clubId);
console.log('[DiaryDateActivityService::createActivity] - add: ', data);
const { activity, ...restData } = data;
let predefinedActivity = await PredefinedActivity.findOne({ where: { name: data.activity } });
if (!predefinedActivity) {
predefinedActivity = await PredefinedActivity.create({
@@ -17,21 +20,20 @@ class DiaryDateActivityService {
duration: data.duration
});
}
restData.predefinedActivityId = predefinedActivity.id;
const maxOrderId = await DiaryDateActivity.max('orderId', {
where: { diaryDateId: data.diaryDateId }
});
const newOrderId = maxOrderId !== null ? maxOrderId + 1 : 1;
const { activity, ...restData } = data;
restData.predefinedActivityId = predefinedActivity.id;
restData.orderId = newOrderId;
console.log('[DiaryDateActivityService::createActivity] - create diary date activity');
return await DiaryDateActivity.create(restData);
}
async updateActivity(userToken, clubId, id, data) {
console.log('[DiaryDateActivityService::upateActivity] - check user access');
console.log('[DiaryDateActivityService::updateActivity] - check user access');
await checkAccess(userToken, clubId);
console.log('[DiaryDateActivityService::updateActivity] - load activit', id);
console.log('[DiaryDateActivityService::updateActivity] - load activity', id);
const activity = await DiaryDateActivity.findByPk(id);
if (!activity) {
console.log('[DiaryDateActivityService::updateActivity] - activity not found');
@@ -53,11 +55,9 @@ class DiaryDateActivityService {
async updateActivityOrder(userToken, clubId, id, newOrderId) {
console.log(`[DiaryDateActivityService::updateActivityOrder] - Start update for activity id: ${id}`);
console.log(`[DiaryDateActivityService::updateActivityOrder] - User token: ${userToken}, Club id: ${clubId}, New order id: ${newOrderId}`);
console.log('[DiaryDateActivityService::updateActivityOrder] - Checking user access');
await checkAccess(userToken, clubId);
console.log('[DiaryDateActivityService::updateActivityOrder] - User access confirmed');
console.log(`[DiaryDateActivityService::updateActivityOrder] - Finding activity with id: ${id}`);
const activity = await DiaryDateActivity.findByPk(id);
if (!activity) {
@@ -65,10 +65,8 @@ class DiaryDateActivityService {
throw new Error('Activity not found');
}
console.log('[DiaryDateActivityService::updateActivityOrder] - Activity found:', activity);
const currentOrderId = activity.orderId;
console.log(`[DiaryDateActivityService::updateActivityOrder] - Current order id: ${currentOrderId}`);
if (newOrderId < currentOrderId) {
console.log(`[DiaryDateActivityService::updateActivityOrder] - Shifting items down. Moving activities with orderId between ${newOrderId} and ${currentOrderId - 1}`);
await DiaryDateActivity.increment(
@@ -96,14 +94,11 @@ class DiaryDateActivityService {
} else {
console.log('[DiaryDateActivityService::updateActivityOrder] - New order id is the same as the current order id. No shift required.');
}
console.log(`[DiaryDateActivityService::updateActivityOrder] - Setting new order id for activity id: ${id}`);
activity.orderId = newOrderId;
console.log('[DiaryDateActivityService::updateActivityOrder] - Saving activity with new order id');
const savedActivity = await activity.save();
console.log('[DiaryDateActivityService::updateActivityOrder] - Activity saved:', savedActivity);
console.log(`[DiaryDateActivityService::updateActivityOrder] - Finished update for activity id: ${id}`);
return savedActivity;
}
@@ -118,13 +113,66 @@ class DiaryDateActivityService {
include: [
{
model: PredefinedActivity,
as: 'predefinedActivity',
as: 'predefinedActivity',
},
{
model: GroupActivity,
as: 'groupActivities',
include: [
{
model: Group,
as: 'groupsGroupActivity'
},
{
model: PredefinedActivity,
as: 'groupPredefinedActivity',
},
],
}
]
});
console.log(`[DiaryDateActivityService::getActivities] - found ${activities.length} activities`);
return activities;
}
async addGroupActivity(userToken, clubId, diaryDateId, groupId, activity) {
console.log('[DiaryDateActivityService::addGroupActivity] Check user access');
await checkAccess(userToken, clubId);
console.log('[DiaryDateActivityService::addGroupActivity] Check diary date');
const diaryDateActivity = await DiaryDateActivity.findOne({
where: {
diaryDateId,
isTimeblock: true,
},
order: [['order_id', 'ASC']],
limit: 1
});
if (!diaryDateActivity) {
console.error('[DiaryDateActivityService::addGroupActivity] Activity not found');
throw new Error('Activity not found');
}
console.log('[DiaryDateActivityService::addGroupActivity] Check group');
const group = await Group.findByPk(groupId);
if (!group || group.diaryDateId !== diaryDateActivity.diaryDateId) {
console.error('[DiaryDateActivityService::addGroupActivity] Group and date don\'t fit');
throw new Error('Group isn\'t related to date');
}
console.log('[DiaryDateActivityService::addGroupActivity] Get predefined activity');
const [predefinedActivity, created] = await PredefinedActivity.findOrCreate({
where: {
name: activity
}
});
console.log('[DiaryDateActivityService::addGroupActivity] Add group activity');
console.log(predefinedActivity);
const activityData = {
diaryDateActivity: diaryDateActivity.id,
groupId: groupId,
customActivity: predefinedActivity.id
}
console.log(activityData);
return await GroupActivity.create(activityData);
}
}
export default new DiaryDateActivityService();

View File

@@ -0,0 +1,43 @@
import { checkAccess } from '../utils/userUtils.js';
import DiaryDate from '../models/DiaryDates.js';
import HttpError from '../exceptions/HttpError.js';
import Group from '../models/Group.js';
class GroupService {
async checkDiaryDateToClub(clubId, dateId) {
const diaryDate = await DiaryDate.findOne({
where: {
id: dateId,
clubId: clubId
}
});
if (!diaryDate) {
throw new HttpError('Datum nicht gefunden oder passt nicht zum Verein', 404);
}
}
async addGroup(userToken, clubId, dateId, name, lead) {
await checkAccess(userToken, clubId);
await this.checkDiaryDateToClub(clubId, dateId);
const group = await Group.create({
diaryDateId: dateId,
name,
lead
});
return group;
}
async getGroups(userToken, clubId, dateId) {
await checkAccess(userToken, clubId);
await this.checkDiaryDateToClub(clubId, dateId);
const groups = await Group.findAll({
where: {
diaryDateId: dateId
}
});
return groups;
}
}
export default new GroupService();

View File

@@ -120,7 +120,7 @@ class MatchService {
const leagues = await League.findAll({
include: [{
model: Match,
as: 'leagueMatches', // Verwendung des Alias 'leagueMatches'
as: 'leagueMatches',
where: {
seasonId: season.id,
clubId: clubId