feat: implement QTTR status tracking and update mechanism
All checks were successful
Deploy tt-tagebuch / deploy (push) Successful in 56s
All checks were successful
Deploy tt-tagebuch / deploy (push) Successful in 56s
This commit is contained in:
@@ -15,6 +15,8 @@ import MemberProfileChangeRequest from '../models/MemberProfileChangeRequest.js'
|
||||
import MemberEventResponse from '../models/MemberEventResponse.js';
|
||||
import Participant from '../models/Participant.js';
|
||||
import DiaryDate from '../models/DiaryDates.js';
|
||||
import Club from '../models/Club.js';
|
||||
import myTischtennisService from '../services/myTischtennisService.js';
|
||||
|
||||
import { devLog } from '../utils/logger.js';
|
||||
const getClubMembers = async(req, res) => {
|
||||
@@ -164,6 +166,15 @@ const updateRatingsFromMyTischtennis = async (req, res) => {
|
||||
const { id: clubId } = req.params;
|
||||
const { authcode: userToken } = req.headers;
|
||||
const result = await MemberService.updateRatingsFromMyTischtennis(userToken, clubId);
|
||||
if (result.status >= 200 && result.status < 300) {
|
||||
await myTischtennisService.logUpdateAttempt(
|
||||
req.user.id,
|
||||
true,
|
||||
result.response?.message || 'TTR/QTTR manuell aktualisiert',
|
||||
null,
|
||||
result.response?.updated || 0
|
||||
);
|
||||
}
|
||||
res.status(result.status).json(result.response);
|
||||
} catch (error) {
|
||||
console.error('[updateRatingsFromMyTischtennis] - Error:', error);
|
||||
@@ -171,6 +182,33 @@ const updateRatingsFromMyTischtennis = async (req, res) => {
|
||||
}
|
||||
};
|
||||
|
||||
const getNextQttrPublication = (now = new Date()) => {
|
||||
const year = now.getFullYear();
|
||||
const dates = [1, 4, 7, 11].map((month) => new Date(year, month, 11));
|
||||
let cutoff = dates.find((date) => date >= new Date(now.getFullYear(), now.getMonth(), now.getDate()));
|
||||
if (!cutoff) cutoff = new Date(year + 1, 1, 11);
|
||||
const availableFrom = new Date(cutoff); availableFrom.setDate(availableFrom.getDate() + 3);
|
||||
const availableUntil = new Date(cutoff); availableUntil.setDate(availableUntil.getDate() + 7);
|
||||
return { cutoff, availableFrom, availableUntil };
|
||||
};
|
||||
|
||||
const getRatingsStatus = async (req, res) => {
|
||||
try {
|
||||
const clubId = Number(req.params.id);
|
||||
const club = await Club.findByPk(clubId, { attributes: ['lastQttrValueChangeAt'] });
|
||||
const next = getNextQttrPublication();
|
||||
res.json({
|
||||
lastQttrValueChangeAt: club?.lastQttrValueChangeAt || null,
|
||||
nextQttrCutoff: next.cutoff,
|
||||
expectedAvailableFrom: next.availableFrom,
|
||||
expectedAvailableUntil: next.availableUntil,
|
||||
});
|
||||
} catch (error) {
|
||||
console.error('[getRatingsStatus] - Error:', error);
|
||||
res.status(500).json({ error: 'QTTR-Status konnte nicht geladen werden.' });
|
||||
}
|
||||
};
|
||||
|
||||
const getMemberTtrHistory = async (req, res) => {
|
||||
try {
|
||||
const { clubId, memberId } = req.params;
|
||||
@@ -630,6 +668,7 @@ export {
|
||||
uploadMemberImage,
|
||||
getMemberImage,
|
||||
updateRatingsFromMyTischtennis,
|
||||
getRatingsStatus,
|
||||
getMemberTtrHistory,
|
||||
refreshMemberTtrHistory,
|
||||
rotateMemberImage,
|
||||
|
||||
Reference in New Issue
Block a user