const mongoose = require('mongoose'); const { Schema } = mongoose; const TodoSchema = Schema({ text: { type: String, required: true, }, list: { type: Schema.Types.ObjectId, ref: 'TodoList', required: true }, user: { type: Schema.Types.ObjectId, ref: 'User', required: true }, completed: { type: Boolean, default: false }, }); TodoSchema.pre('save', async function () { const user = await this.model('User').findById(this.user); user.todos.push(this._id); await user.save(); const list = await this.model('TodoList').findById(this.list); list.todos.push(this._id); await list.save(); }); TodoSchema.pre('remove', async function () { const user = await this.model('User').findById(this.user); user.todos.splice(user.todos.indexOf(this._id), 1); await user.save(); const list = await this.model('TodoList').findById(this.list); list.todos.splice(list.todos.indexOf(this._id), 1); await list.save(); }); TodoSchema.methods.toJson = function () { return { id: this._id.toString(), text: this.text, list: this.list.toString(), user: this.user.toString(), completed: this.completed, }; }; mongoose.model('Todo', TodoSchema);