nakama/backend/models/TicketActivity.js

74 lines
1.9 KiB
JavaScript
Raw Permalink Normal View History

2025-12-07 02:20:45 +00:00
const mongoose = require('mongoose');
const TicketActivitySchema = new mongoose.Schema({
user: {
type: mongoose.Schema.Types.ObjectId,
ref: 'User',
required: true,
index: true
},
date: {
type: Date,
required: true,
index: true
},
// Счетчики для разных типов активности
postsCreated: {
type: Number,
default: 0
},
likesGiven: {
type: Number,
default: 0
},
likesReceived: {
type: Number,
default: 0
},
commentsWritten: {
type: Number,
default: 0
},
commentsReceived: {
type: Number,
default: 0
},
// Для отслеживания баллов с реакций на арты (по постам)
// Используем объект вместо Map для совместимости с Mongoose
artReactionsPoints: {
type: mongoose.Schema.Types.Mixed,
default: {}
},
2025-12-07 03:14:27 +00:00
artsModerated: { type: Number, default: 0 }, // Количество артов, прошедших модерацию
2025-12-07 02:20:45 +00:00
createdAt: {
type: Date,
default: Date.now
}
}, {
timestamps: true
});
// Индекс для быстрого поиска по пользователю и дате
TicketActivitySchema.index({ user: 1, date: 1 }, { unique: true });
// Метод для получения или создания активности за сегодня (по московскому времени)
TicketActivitySchema.statics.getOrCreateToday = async function(userId) {
const { getMoscowDate } = require('../utils/moscowTime');
const today = getMoscowDate();
let activity = await this.findOne({ user: userId, date: today });
if (!activity) {
activity = new this({
user: userId,
date: today
});
await activity.save();
}
return activity;
};
module.exports = mongoose.model('TicketActivity', TicketActivitySchema);