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);