const mongoose = require('mongoose') const { Schema } = mongoose /** * 商品模型 */ const ShopItemSchema = new Schema({ // 基本信息 itemId: { type: String, required: true, unique: true, index: true }, name: { type: String, required: true, trim: true }, description: { type: String, trim: true }, // 价格(单位:分) price: { type: Number, required: true, min: 1 }, originalPrice: { type: Number }, // 商品类型 type: { type: String, enum: ['skin', 'noad', 'subscription'], required: true }, // 订阅天数(仅订阅商品) duration: { type: Number, default: 30 }, // 图片 imageUrl: String, previewUrl: String, // 统计 purchaseCount: { type: Number, default: 0 }, // 状态 status: { type: String, enum: ['active', 'inactive', 'discontinued'], default: 'active', index: true }, // 排序 sortOrder: { type: Number, default: 0 }, // 促销 isOnSale: { type: Boolean, default: false }, saleEndTime: Date, // 时间戳 createdAt: { type: Date, default: Date.now }, updatedAt: { type: Date, default: Date.now } }, { timestamps: true, toJSON: { virtuals: true }, toObject: { virtuals: true } }) // 索引 ShopItemSchema.index({ status: 1, sortOrder: 1 }) ShopItemSchema.index({ type: 1 }) // 虚拟字段:是否在促销中 ShopItemSchema.virtual('isOnSaleActive').get(function() { return this.isOnSale && this.saleEndTime && new Date() < this.saleEndTime }) // 中间件:保存前更新 updatedAt ShopItemSchema.pre('save', function(next) { this.updatedAt = Date.now() next() }) module.exports = mongoose.model('ShopItem', ShopItemSchema)