const mongoose = require('mongoose'); /** * 拼音内容模型 * 存储拼音字母的基础信息、音频、口型图、关联词语等 */ const pinyinContentSchema = new mongoose.Schema({ // 拼音符号,如 "b" symbol: { type: String, required: true, unique: true, trim: true }, // 拼音类型:initial(声母)/final(韵母)/overall(整体认读) type: { type: String, required: true, enum: ['initial', 'final', 'overall'] }, // 拼音名称,如 "玻" name: { type: String, required: true, trim: true }, // 发音音频URL audioUrl: { type: String, default: '' }, // 口型示意图URL mouthImage: { type: String, default: '' }, // 发音方法描述 pronunciation: { type: String, default: '' }, // 显示顺序 order: { type: Number, default: 0 }, // 是否免费 isFree: { type: Boolean, default: true }, // 状态:active(启用)/inactive(禁用) status: { type: String, enum: ['active', 'inactive'], default: 'active' }, // 相关词语 words: [{ word: { type: String, required: true }, // 汉字 pinyin: { type: String, required: true }, // 拼音 image: { type: String, default: '' }, // 图片URL audioUrl: { type: String, default: '' }, // 音频URL meaning: { type: String, default: '' } // 释义 }], // 关联游戏配置 games: [{ type: { type: String, enum: ['match', 'tone', 'find', 'puzzle', 'mimic', 'runner'] }, config: { type: mongoose.Schema.Types.Mixed, default: {} }, isEnabled: { type: Boolean, default: true } }], // 探索区域配置 exploreAreas: { audio: { type: Boolean, default: true }, // 声音发现 mouth: { type: Boolean, default: true }, // 口型观察 speak: { type: Boolean, default: true }, // 语音互动 write: { type: Boolean, default: true }, // 书写体验 game: { type: Boolean, default: true }, // 趣味互动 words: { type: Boolean, default: true } // 词语发现 }, // 创建时间 createdAt: { type: Date, default: Date.now }, // 更新时间 updatedAt: { type: Date, default: Date.now } }); // 索引 pinyinContentSchema.index({ type: 1, order: 1 }); pinyinContentSchema.index({ status: 1 }); pinyinContentSchema.index({ isFree: 1 }); // 更新中间件 pinyinContentSchema.pre('save', function(next) { this.updatedAt = Date.now(); next(); }); module.exports = mongoose.model('PinyinContent', pinyinContentSchema);