Spaces:
Sleeping
Sleeping
File size: 1,502 Bytes
9ff626c 5ccd555 2186eb8 9ff626c |
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 |
const mongoose = require('mongoose');
const culturalElementSchema = new mongoose.Schema({
element: { type: String, required: true },
description: { type: String, required: true },
significance: { type: String, required: true }
});
const sourceTextSchema = new mongoose.Schema({
title: { type: String, required: true },
content: { type: String, required: true },
sourceLanguage: { type: String, required: true },
sourceType: {
type: String,
enum: ['api', 'manual', 'practice', 'tutorial', 'weekly-practice'],
default: 'manual'
},
category: {
type: String,
enum: ['practice', 'tutorial', 'weekly-practice'],
required: true
},
weekNumber: {
type: Number,
required: function() { return this.category !== 'practice'; }
},
translationBrief: { type: String },
imageUrl: { type: String },
imageAlt: { type: String },
imageSize: { type: Number, default: 200 },
imageAlignment: { type: String, enum: ['left', 'center', 'right'], default: 'center' },
culturalElements: [culturalElementSchema],
difficulty: {
type: String,
enum: ['beginner', 'intermediate', 'advanced'],
default: 'intermediate'
},
tags: [String],
targetCultures: [String],
isActive: { type: Boolean, default: true },
usageCount: { type: Number, default: 0 },
averageRating: { type: Number, default: 0 },
ratingCount: { type: Number, default: 0 }
}, {
timestamps: true
});
module.exports = mongoose.model('SourceText', sourceTextSchema); |