mirror of
https://github.com/wassname/talk.git
synced 2026-06-28 13:03:09 +08:00
88 lines
1.7 KiB
JavaScript
88 lines
1.7 KiB
JavaScript
const mongoose = require('../services/mongoose');
|
|
const Schema = mongoose.Schema;
|
|
const uuid = require('uuid');
|
|
const TagLinkSchema = require('./schema/tag_link');
|
|
|
|
const AssetSchema = new Schema({
|
|
id: {
|
|
type: String,
|
|
default: uuid.v4,
|
|
unique: true,
|
|
index: true
|
|
},
|
|
url: {
|
|
type: String,
|
|
unique: true,
|
|
index: true
|
|
},
|
|
type: {
|
|
type: String,
|
|
default: 'assets'
|
|
},
|
|
scraped: {
|
|
type: Date,
|
|
default: null
|
|
},
|
|
closedAt: {
|
|
type: Date,
|
|
default: null
|
|
},
|
|
closedMessage: {
|
|
type: String,
|
|
default: null
|
|
},
|
|
title: String,
|
|
description: String,
|
|
image: String,
|
|
section: String,
|
|
subsection: String,
|
|
author: String,
|
|
publication_date: Date,
|
|
modified_date: Date,
|
|
|
|
// This object is used exclusivly for storing settings that are to override
|
|
// the base settings from the base Settings object. This is to be accessed
|
|
// always after running `rectifySettings` against it.
|
|
settings: {
|
|
type: Schema.Types.Mixed,
|
|
default: null
|
|
},
|
|
|
|
// Tags are added by the self or by administrators.
|
|
tags: [TagLinkSchema],
|
|
|
|
// Additional metadata stored on the field.
|
|
metadata: {
|
|
default: {},
|
|
type: Object
|
|
}
|
|
}, {
|
|
versionKey: false,
|
|
timestamps: {
|
|
createdAt: 'created_at',
|
|
updatedAt: 'updated_at'
|
|
}
|
|
});
|
|
|
|
AssetSchema.index({
|
|
title: 'text',
|
|
url: 'text',
|
|
description: 'text',
|
|
section: 'text',
|
|
subsection: 'text',
|
|
author: 'text'
|
|
}, {
|
|
background: true
|
|
});
|
|
|
|
/**
|
|
* Returns true if the asset is closed, false else.
|
|
*/
|
|
AssetSchema.virtual('isClosed').get(function() {
|
|
return this.closedAt && this.closedAt.getTime() <= new Date().getTime();
|
|
});
|
|
|
|
const Asset = mongoose.model('Asset', AssetSchema);
|
|
|
|
module.exports = Asset;
|