Reflex/backend/models/Report.js

80 lines
1.9 KiB
JavaScript
Raw Normal View History

const mongoose = require('mongoose');
const reportSchema = new mongoose.Schema({
// Кто подает жалобу
reporter: {
type: mongoose.Schema.Types.ObjectId,
ref: 'User',
required: true
},
// На кого подается жалоба
reportedUser: {
type: mongoose.Schema.Types.ObjectId,
ref: 'User',
required: true
},
// Причина жалобы
reason: {
type: String,
required: true,
enum: [
'inappropriate_content',
'fake_profile',
'harassment',
'spam',
'offensive_behavior',
'underage',
'other'
]
},
// Дополнительное описание
description: {
type: String,
maxlength: 500
},
// Статус жалобы
status: {
type: String,
enum: ['pending', 'reviewed', 'resolved', 'dismissed'],
default: 'pending'
},
// Администратор, который рассмотрел жалобу
reviewedBy: {
type: mongoose.Schema.Types.ObjectId,
ref: 'User'
},
// Дата рассмотрения
reviewedAt: {
type: Date
},
// Комментарий администратора
adminComment: {
type: String,
maxlength: 500
},
// Действие, предпринятое администратором
actionTaken: {
type: String,
enum: ['none', 'warning', 'temporary_ban', 'permanent_ban', 'profile_removal']
}
}, {
timestamps: true
});
// Индексы для оптимизации запросов
reportSchema.index({ reporter: 1, reportedUser: 1 });
reportSchema.index({ reportedUser: 1, status: 1 });
reportSchema.index({ status: 1, createdAt: -1 });
// Предотвращаем дублирование жалоб от одного пользователя на другого
reportSchema.index({ reporter: 1, reportedUser: 1 }, { unique: true });
module.exports = mongoose.model('Report', reportSchema);