diff --git a/backend/utils/tickets.js b/backend/utils/tickets.js index 3b02e25..92a93f4 100644 --- a/backend/utils/tickets.js +++ b/backend/utils/tickets.js @@ -254,6 +254,51 @@ async function awardArtModeration(userId) { return { success: true, points: 40 }; } +/** + * Списывает билеты за модерацию арта при удалении поста + */ +async function deductArtModeration(userId, postCreatedAt) { + try { + const { getMoscowStartOfDay } = require('./moscowTime'); + + // Проверяем, что пост был создан сегодня + const postDate = getMoscowStartOfDay(postCreatedAt); + const today = getMoscowStartOfDay(); + + // Если пост создан не сегодня, не списываем билеты + if (postDate.getTime() !== today.getTime()) { + return { success: false, reason: 'post_not_today' }; + } + + // Получить активность за сегодня + const activity = await TicketActivity.getOrCreateToday(userId); + + // Уменьшить счетчик артов (но не меньше 0) + if (activity.artsModerated > 0) { + activity.artsModerated -= 1; + await activity.save(); + } + + // Списать билеты (но не меньше 0) + const user = await User.findById(userId); + if (user) { + const ticketsToDeduct = Math.min(40, user.tickets || 0); + if (ticketsToDeduct > 0) { + await User.findByIdAndUpdate(userId, { + $inc: { tickets: -ticketsToDeduct } + }); + console.log(`[Tickets ${formatMoscowTime()}] Списано ${ticketsToDeduct} билетов пользователю ${userId} за удаление арта`); + return { success: true, points: -ticketsToDeduct }; + } + } + + return { success: true, points: 0 }; + } catch (error) { + console.error(`[Tickets] Ошибка списания билетов за арт:`, error); + return { success: false, reason: 'error', error: error.message }; + } +} + /** * Списывает билеты за действие (лайк/комментарий) с удаленным постом */ @@ -348,6 +393,11 @@ async function deductPostDeletion(post) { // 1. Списываем билеты за создание поста у автора await deductAction(authorId, 15, 'post_created', postCreatedAt); + // 1.5. Если пост был помечен как арт, списываем билеты за модерацию арта + if (post.isArt) { + await deductArtModeration(authorId, postCreatedAt); + } + // 2. Списываем билеты за полученные лайки у автора if (post.likes && post.likes.length > 0) { for (const likerId of post.likes) {