sanket3280/code-execution
0
1const mongoose = require('mongoose');2const Schema = mongoose.Schema;3 4const SuspiciousActivitySchema = new Schema({5 challengeId: {6 type: Schema.Types.ObjectId,7 ref: 'Challenge',8 required: true,9 index: true10 },11 participantId: {12 type: Schema.Types.ObjectId,13 ref: 'User',14 required: true,15 index: true16 },17 activityType: {18 type: String,19 enum: [20 'large_paste',21 'rapid_switching',22 'code_similarity',23 'external_source',24 'manual_flag'25 ],26 required: true27 },28 severity: {29 type: String,30 enum: ['low', 'medium', 'high'],31 default: 'medium'32 },33 details: {34 type: Schema.Types.Mixed,35 // Stores specific details like similarity percentage, lines pasted, etc.36 },37 detectedAt: {38 type: Date,39 default: Date.now,40 index: true41 },42 reviewedBy: {43 type: Schema.Types.ObjectId,44 ref: 'User'45 },46 reviewNotes: {47 type: String48 },49 status: {50 type: String,51 enum: ['pending', 'reviewed', 'dismissed', 'confirmed'],52 default: 'pending',53 index: true54 }55});56 57// Compound index for efficient queries58SuspiciousActivitySchema.index({ challengeId: 1, status: 1, severity: 1 });59SuspiciousActivitySchema.index({ participantId: 1, detectedAt: -1 });60 61module.exports = mongoose.model('SuspiciousActivity', SuspiciousActivitySchema);62 