Update files
This commit is contained in:
parent
d85ebdfe01
commit
741524e4af
|
|
@ -254,6 +254,51 @@ async function awardArtModeration(userId) {
|
||||||
return { success: true, points: 40 };
|
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. Списываем билеты за создание поста у автора
|
// 1. Списываем билеты за создание поста у автора
|
||||||
await deductAction(authorId, 15, 'post_created', postCreatedAt);
|
await deductAction(authorId, 15, 'post_created', postCreatedAt);
|
||||||
|
|
||||||
|
// 1.5. Если пост был помечен как арт, списываем билеты за модерацию арта
|
||||||
|
if (post.isArt) {
|
||||||
|
await deductArtModeration(authorId, postCreatedAt);
|
||||||
|
}
|
||||||
|
|
||||||
// 2. Списываем билеты за полученные лайки у автора
|
// 2. Списываем билеты за полученные лайки у автора
|
||||||
if (post.likes && post.likes.length > 0) {
|
if (post.likes && post.likes.length > 0) {
|
||||||
for (const likerId of post.likes) {
|
for (const likerId of post.likes) {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue