mirror of
https://github.com/taobataoma/meanTorrent.git
synced 2026-01-13 19:02:23 +01:00
163 lines
2.6 KiB
JavaScript
163 lines
2.6 KiB
JavaScript
'use strict';
|
|
|
|
/**
|
|
* Module dependencies
|
|
*/
|
|
var mongoose = require('mongoose'),
|
|
Schema = mongoose.Schema,
|
|
path = require('path'),
|
|
CommonSchema = require(path.resolve('./modules/core/server/models/common.server.model'));
|
|
|
|
/**
|
|
* setNumberValueToZero
|
|
* @param v
|
|
* @returns {number}
|
|
*/
|
|
var setNumberValueToZero = function (v) {
|
|
return v < 0 ? 0 : v;
|
|
};
|
|
|
|
/**
|
|
* Sub Attach Schema
|
|
*/
|
|
var AttachSchema = new Schema({
|
|
filename: {
|
|
type: String,
|
|
default: '',
|
|
trim: true
|
|
},
|
|
filesize: {
|
|
type: Number,
|
|
default: 0
|
|
},
|
|
downCount: {
|
|
type: Number,
|
|
set: setNumberValueToZero,
|
|
default: 0
|
|
},
|
|
createdAt: {
|
|
type: Date,
|
|
default: Date.now
|
|
}
|
|
}, {usePushEach: true});
|
|
|
|
/**
|
|
* Sub Reply Schema
|
|
*/
|
|
var ReplySchema = new Schema({
|
|
user: {
|
|
type: Schema.Types.ObjectId,
|
|
ref: 'User'
|
|
},
|
|
content: {
|
|
type: String,
|
|
default: '',
|
|
trim: true
|
|
},
|
|
|
|
_attach: [AttachSchema],
|
|
_thumbs: [CommonSchema.ThumbSchema],
|
|
|
|
updatedAt: {
|
|
type: Date
|
|
},
|
|
updatedBy: {
|
|
type: Schema.Types.ObjectId,
|
|
ref: 'User'
|
|
},
|
|
createdAt: {
|
|
type: Date,
|
|
default: Date.now
|
|
}
|
|
}, {usePushEach: true});
|
|
|
|
|
|
/**
|
|
* Topic Schema
|
|
*/
|
|
var TopicSchema = new Schema({
|
|
forum: {
|
|
type: Schema.Types.ObjectId,
|
|
ref: 'Forum'
|
|
},
|
|
user: {
|
|
type: Schema.Types.ObjectId,
|
|
ref: 'User'
|
|
},
|
|
title: {
|
|
type: String,
|
|
default: '',
|
|
trim: true
|
|
},
|
|
content: {
|
|
type: String,
|
|
default: '',
|
|
trim: true
|
|
},
|
|
readOnly: {
|
|
type: Boolean,
|
|
default: false
|
|
},
|
|
|
|
viewCount: {
|
|
type: Number,
|
|
set: setNumberValueToZero,
|
|
default: 0
|
|
},
|
|
replyCount: {
|
|
type: Number,
|
|
set: setNumberValueToZero,
|
|
default: 0
|
|
},
|
|
_replies: [ReplySchema],
|
|
_attach: [AttachSchema],
|
|
_thumbs: [CommonSchema.ThumbSchema],
|
|
|
|
isTop: {
|
|
type: Boolean,
|
|
default: false
|
|
},
|
|
isGlobal: {
|
|
type: Boolean,
|
|
default: false
|
|
},
|
|
isHomeHelp: {
|
|
type: Boolean,
|
|
default: false
|
|
},
|
|
isHomeNotice: {
|
|
type: Boolean,
|
|
default: false
|
|
},
|
|
lastUser: {
|
|
type: Schema.Types.ObjectId,
|
|
ref: 'User'
|
|
},
|
|
lastReplyAt: {
|
|
type: Date,
|
|
default: Date.now
|
|
},
|
|
updatedAt: {
|
|
type: Date
|
|
},
|
|
updatedBy: {
|
|
type: Schema.Types.ObjectId,
|
|
ref: 'User'
|
|
},
|
|
pushHomeAt: {
|
|
type: Date
|
|
},
|
|
createdAt: {
|
|
type: Date,
|
|
default: Date.now
|
|
}
|
|
}, {usePushEach: true});
|
|
|
|
TopicSchema.index({forum: 1, isTop: -1, lastReplyAt: -1, createdAt: -1});
|
|
TopicSchema.index({createdAt: -1, isGlobal: 1, forum: -1});
|
|
TopicSchema.index({pushHomeAt: -1});
|
|
|
|
mongoose.model('Topic', TopicSchema);
|
|
mongoose.model('Attach', AttachSchema);
|
|
mongoose.model('Reply', ReplySchema);
|