initrajs
Version:
⚡ InitraJS - JavaScript CLI Toolkit | Lightning-fast scaffolding for React, Next.js, Node.js with TypeScript | The future of JavaScript development | 10x faster than create-react-app | Ultimate developer productivity tool
96 lines (85 loc) • 2.16 kB
JavaScript
export default `import { Schema, Document, model } from 'mongoose';
export interface I{{name}} extends Document {
name: string;
description?: string;
status: 'active' | 'inactive';
createdBy?: Schema.Types.ObjectId;
updatedBy?: Schema.Types.ObjectId;
createdAt: Date;
updatedAt: Date;
// Virtual properties
isActive: boolean;
}
const {{nameLower}}Schema = new Schema<I{{name}}>({
name: {
type: String,
required: [true, 'Name is required'],
trim: true,
unique: true
},
description: {
type: String,
trim: true
},
status: {
type: String,
enum: ['active', 'inactive'],
default: 'active'
},
createdBy: {
type: Schema.Types.ObjectId,
ref: 'User'
},
updatedBy: {
type: Schema.Types.ObjectId,
ref: 'User'
}
}, {
timestamps: true,
toJSON: {
virtuals: true,
transform: function(doc, ret) {
delete ret._id;
delete ret.__v;
return ret;
}
}
});
// Indexes
{{nameLower}}Schema.index({ name: 1 });
{{nameLower}}Schema.index({ status: 1 });
{{nameLower}}Schema.index({ createdAt: -1 });
// Virtual properties
{{nameLower}}Schema.virtual('isActive').get(function() {
return this.status === 'active';
});
// Instance methods
{{nameLower}}Schema.methods.toJSON = function() {
const obj = this.toObject();
delete obj.__v;
return obj;
};
// Static methods
{{nameLower}}Schema.statics.findActive = function() {
return this.find({ status: 'active' });
};
{{nameLower}}Schema.statics.findByName = function(name: string) {
return this.findOne({ name: new RegExp(name, 'i') });
};
// Pre-save middleware
{{nameLower}}Schema.pre('save', function(next) {
// Add pre-save logic here
if (this.isModified('name')) {
this.name = this.name.trim();
}
next();
});
// Pre-update middleware
{{nameLower}}Schema.pre('findOneAndUpdate', function(next) {
// Add pre-update logic here
this.set({ updatedAt: new Date() });
next();
});
export const {{name}} = model<I{{name}}>('{{name}}', {{nameLower}}Schema);
export default {{name}};
`;