81 lines
1.5 KiB
JavaScript
81 lines
1.5 KiB
JavaScript
const mongoose = require('mongoose');
|
|
|
|
const equitySchema = new mongoose.Schema({
|
|
title: {
|
|
type: String,
|
|
required: true,
|
|
trim: true
|
|
},
|
|
description: {
|
|
type: String,
|
|
default: ''
|
|
},
|
|
type: {
|
|
type: String,
|
|
enum: ['coupon', 'membership', 'discount', 'gift', 'other'],
|
|
required: true
|
|
},
|
|
platform: {
|
|
type: String,
|
|
required: true,
|
|
enum: ['taobao', 'jd', 'pdd', 'meituan', 'eleme', 'douyin', 'kuaishou', 'other']
|
|
},
|
|
value: {
|
|
type: Number,
|
|
default: 0
|
|
},
|
|
unit: {
|
|
type: String,
|
|
default: '元'
|
|
},
|
|
validStart: {
|
|
type: Date,
|
|
required: true
|
|
},
|
|
validEnd: {
|
|
type: Date,
|
|
required: true
|
|
},
|
|
status: {
|
|
type: String,
|
|
enum: ['active', 'used', 'expired', 'transferred'],
|
|
default: 'active'
|
|
},
|
|
owner: {
|
|
type: mongoose.Schema.Types.ObjectId,
|
|
ref: 'User',
|
|
required: true
|
|
},
|
|
source: {
|
|
type: String,
|
|
enum: ['manual', 'import', 'purchase', 'transfer'],
|
|
default: 'manual'
|
|
},
|
|
images: [{
|
|
type: String
|
|
}],
|
|
tags: [{
|
|
type: String
|
|
}],
|
|
isTransferable: {
|
|
type: Boolean,
|
|
default: true
|
|
},
|
|
transferPrice: {
|
|
type: Number,
|
|
default: 0
|
|
},
|
|
metadata: {
|
|
type: mongoose.Schema.Types.Mixed,
|
|
default: {}
|
|
}
|
|
}, {
|
|
timestamps: true
|
|
});
|
|
|
|
equitySchema.index({ owner: 1, status: 1 });
|
|
equitySchema.index({ platform: 1, type: 1 });
|
|
equitySchema.index({ validEnd: 1 });
|
|
|
|
module.exports = mongoose.model('Equity', equitySchema);
|