Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 | 2x 2x 2x 2x 2x 2x 2x | const mongoose = require('mongoose');
const certificateSchema = new mongoose.Schema({
userId: {
type: mongoose.Schema.Types.ObjectId,
ref: 'User',
required: true
},
eventId: {
type: mongoose.Schema.Types.ObjectId,
ref: 'Event',
required: true
},
type: {
type: String,
enum: ['participant', 'winner', 'organizer', 'co-organizer'],
required: true
},
status: {
type: String,
enum: ['pending', 'generated', 'failed'],
default: 'pending'
},
certificateURL: {
type: String
},
certificateData: {
// Data sent to ML API for certificate generation
userName: String,
userEmail: String,
eventTitle: String,
eventDescription: String,
eventDate: Date,
eventLocation: String,
organizerName: String,
institutionName: String,
certificateType: String,
// Additional fields for ML processing
userSkills: [String],
eventTags: [String],
attendanceDate: Date,
qrCode: String // For certificate verification
},
mlApiResponse: {
// Response from ML certificate generation API
requestId: String,
generationStatus: String,
errorMessage: String,
generatedAt: Date
},
issuedAt: {
type: Date,
default: Date.now
},
createdAt: {
type: Date,
default: Date.now
},
updatedAt: {
type: Date,
default: Date.now
}
});
// Index for efficient queries
certificateSchema.index({ userId: 1, eventId: 1 });
certificateSchema.index({ status: 1 });
certificateSchema.index({ issuedAt: -1 });
// Update timestamp on save
certificateSchema.pre('save', function(next) {
this.updatedAt = new Date();
next();
});
module.exports = mongoose.model('Certificate', certificateSchema);
|