41 lines
1.2 KiB
JavaScript
41 lines
1.2 KiB
JavaScript
const mongoose = require('mongoose');
|
|
|
|
const knowledgeSourceSchema = new mongoose.Schema(
|
|
{
|
|
eventId: {
|
|
type: mongoose.Schema.Types.ObjectId,
|
|
ref: 'Event',
|
|
required: true,
|
|
index: true,
|
|
},
|
|
type: {
|
|
type: String,
|
|
enum: ['url', 'pdf', 'event', 'food', 'places'],
|
|
required: true,
|
|
},
|
|
sourcePath: { type: String, required: true },
|
|
displayName: { type: String, required: true },
|
|
status: {
|
|
type: String,
|
|
enum: ['PENDING', 'PROCESSING', 'READY', 'FAILED'],
|
|
default: 'PENDING',
|
|
},
|
|
errorMessage: { type: String, default: null },
|
|
lastSyncedAt: { type: Date, default: Date.now },
|
|
/** URL sources: domain-wide or path-prefix crawl */
|
|
crawlScope: { type: String, enum: ['domain', 'path'], default: null },
|
|
crawlPathPrefix: { type: String, default: null },
|
|
lastCrawlStats: {
|
|
pages: { type: Number, default: 0 },
|
|
assets: { type: Number, default: 0 },
|
|
skipped: { type: Number, default: 0 },
|
|
failed: { type: Number, default: 0 },
|
|
},
|
|
},
|
|
{ timestamps: true },
|
|
);
|
|
|
|
knowledgeSourceSchema.index({ eventId: 1, type: 1 });
|
|
|
|
module.exports = mongoose.model('KnowledgeSource', knowledgeSourceSchema);
|