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);