forked from UKSOURCE/cms.hailearning.edu.vn
feat: Remove outdated migration
This commit is contained in:
79
models/recentPost.js
Normal file
79
models/recentPost.js
Normal file
@@ -0,0 +1,79 @@
|
||||
const mongoose = require('mongoose');
|
||||
|
||||
// Recent Post model - có thể là view hoặc collection riêng để optimize performance
|
||||
const recentPostSchema = new mongoose.Schema({
|
||||
title: {
|
||||
type: String,
|
||||
required: true,
|
||||
trim: true
|
||||
},
|
||||
slug: {
|
||||
type: String,
|
||||
required: true,
|
||||
trim: true
|
||||
},
|
||||
thumbnail: {
|
||||
type: String,
|
||||
default: '' // Ảnh nhỏ ở sidebar
|
||||
},
|
||||
publishedAt: {
|
||||
type: String, // "March 26, 2025"
|
||||
required: true
|
||||
},
|
||||
// Reference to original blog post
|
||||
originalPostId: {
|
||||
type: mongoose.Schema.Types.ObjectId,
|
||||
ref: 'Blog',
|
||||
required: true
|
||||
}
|
||||
}, {
|
||||
timestamps: true
|
||||
});
|
||||
|
||||
// Indexes
|
||||
recentPostSchema.index({ createdAt: -1 });
|
||||
recentPostSchema.index({ originalPostId: 1 });
|
||||
|
||||
// Remove __v from JSON output
|
||||
recentPostSchema.set('toJSON', {
|
||||
transform: function(doc, ret) {
|
||||
delete ret.__v;
|
||||
return ret;
|
||||
}
|
||||
});
|
||||
|
||||
// Static method to sync with Blog posts
|
||||
recentPostSchema.statics.syncFromBlogs = async function(limit = 5) {
|
||||
const Blog = require('./blog');
|
||||
|
||||
// Get recent published blogs
|
||||
const recentBlogs = await Blog.find({ status: 'published' })
|
||||
.sort({ createdAt: -1 })
|
||||
.limit(limit)
|
||||
.select('title slug featuredImage publishedAt');
|
||||
|
||||
// Clear existing recent posts
|
||||
await this.deleteMany({});
|
||||
|
||||
// Create new recent posts
|
||||
const recentPosts = recentBlogs.map(blog => ({
|
||||
title: blog.title,
|
||||
slug: blog.slug,
|
||||
thumbnail: blog.featuredImage,
|
||||
publishedAt: blog.publishedAt,
|
||||
originalPostId: blog._id
|
||||
}));
|
||||
|
||||
if (recentPosts.length > 0) {
|
||||
await this.insertMany(recentPosts);
|
||||
}
|
||||
|
||||
return recentPosts;
|
||||
};
|
||||
|
||||
// Static method to get recent posts
|
||||
recentPostSchema.statics.getRecent = function(limit = 5) {
|
||||
return this.find({}).sort({ createdAt: -1 }).limit(limit);
|
||||
};
|
||||
|
||||
module.exports = mongoose.model('RecentPost', recentPostSchema);
|
||||
Reference in New Issue
Block a user