에버리지, 회원추가 로직 수정

This commit is contained in:
2025-10-23 12:38:39 +09:00
parent 76f5b572e8
commit ce1aee67d6
2 changed files with 110 additions and 21 deletions
+60 -9
View File
@@ -1020,8 +1020,27 @@ exports.updateEventScore = async (req, res) => {
totalScore: score + handicap
});
// 캐시 무효화 추가
await averageService.invalidateMemberAverageCache(scoreRecord.participantId);
// 캐시 무효화: participantId -> memberId로 변환 후 무효화 및 워밍업
try {
const ep = await EventParticipant.findOne({
where: { id: scoreRecord.participantId },
attributes: ['memberId'],
});
if (ep && ep.memberId) {
await averageService.invalidateMemberAverageCache(ep.memberId);
// clubId 조회 후 워밍업
try {
const ev = await Event.findOne({ where: { id: eventId }, attributes: ['clubId'] });
if (ev && ev.clubId) {
await averageService.calculateMemberAverageByClubSetting(ep.memberId, ev.clubId);
}
} catch (e2) {
console.error('에버리지 워밍업 실패(updateEventScore):', e2);
}
}
} catch (e) {
console.error('에버리지 캐시 무효화 실패(updateEventScore):', e);
}
// 업데이트된 레코드 조회
const updatedScore = await EventScore.findOne({
@@ -1093,14 +1112,23 @@ exports.deleteEventScore = async (req, res) => {
await score.destroy();
// 점수 삭제 시 해당 회원의 에버리지 시 무효화
if (score.participant && score.participant.Member) {
try {
await averageService.invalidateMemberAverageCache(score.participant.Member.id);
console.log(`회원 ${score.participant.Member.id}의 에버리지 캡시 무효화 완료`);
} catch (error) {
console.error(`회원 ${score.participant.Member.id}의 에버리지 캡시 무효화 오류:`, error);
// 점수 삭제 시 해당 회원의 에버리지 시 무효화 및 워밍업
try {
const memberId = score.EventParticipant?.Member?.id;
if (memberId) {
await averageService.invalidateMemberAverageCache(memberId);
console.log(`회원 ${memberId}의 에버리지 캐시 무효화 완료`);
// clubId는 상단 검증 단계의 req.body에서 확보됨
if (clubId) {
try {
await averageService.calculateMemberAverageByClubSetting(memberId, clubId);
} catch (e2) {
console.error('에버리지 워밍업 실패(deleteEventScore):', e2);
}
}
}
} catch (error) {
console.error('에버리지 캐시 무효화 오류(deleteEventScore):', error);
}
res.json({
@@ -1131,6 +1159,12 @@ exports.deleteParticipantScores = async (req, res) => {
});
}
// 삭제 전 memberId 조회 (캐시 무효화용)
const ep = await EventParticipant.findOne({
where: { id: participantId },
attributes: ['memberId']
});
// 점수 삭제
await EventScore.destroy({
where: {
@@ -1139,6 +1173,23 @@ exports.deleteParticipantScores = async (req, res) => {
}
});
// 캐시 무효화: 해당 참가자의 회원 평균 캐시 제거 및 워밍업
try {
if (ep && ep.memberId) {
await averageService.invalidateMemberAverageCache(ep.memberId);
try {
const ev = await Event.findOne({ where: { id: eventId }, attributes: ['clubId'] });
if (ev && ev.clubId) {
await averageService.calculateMemberAverageByClubSetting(ep.memberId, ev.clubId);
}
} catch (e2) {
console.error('에버리지 워밍업 오류(deleteParticipantScores):', e2);
}
}
} catch (e) {
console.error('에버리지 캐시 무효화 오류(deleteParticipantScores):', e);
}
res.json({
message: '점수가 삭제되었습니다.'
});