Gerador de Esquemas Mongoose e Modelos TypeScript a partir de JSON
Infira e gere esquemas MongoDB Mongoose, interfaces Document de TypeScript, subdocumentos aninhados, timestamps e exportações de modelos a partir de JSON.
import mongoose, { Schema, Document, Model, Types } from 'mongoose';
// ============================================================================
// Subdocument TypeScript Interfaces
// ============================================================================
IProfile {
firstName: string;
lastName: string;
avatarUrl: string;
bio: string;
website: string;
}
IAddress {
label: string;
street: string;
city: string;
state: string;
zipCode: string;
country: string;
isPrimary: boolean;
}
IPreferences {
theme: string;
receiveNewsletter: boolean;
}
// ============================================================================
// Main Document Interface
// ============================================================================
IUserDocument extends Document {
username: string;
email: string;
passwordHash: string;
roles: string[];
profile: IProfile;
score: number;
isActive: boolean;
addresses: Types.DocumentArray<IAddress>;
preferences: IPreferences;
lastLoginAt: Date;
createdAt: Date;
updatedAt: Date;
}
// ============================================================================
// Nested Child Schemas
// ============================================================================
const ProfileSchema = new Schema<IProfile>(
{
firstName: { type: String, required: true, trim: true },
lastName: { type: String, required: true, trim: true },
avatarUrl: { type: String, required: true, trim: true },
bio: { type: String, required: true, trim: true },
website: { type: String, required: true, trim: true },
},
{ _id: false }
);
const AddressSchema = new Schema<IAddress>(
{
label: { type: String, required: true, trim: true },
street: { type: String, required: true, trim: true },
city: { type: String, required: true, trim: true },
state: { type: String, required: true, trim: true },
zipCode: { type: String, required: true, trim: true },
country: { type: String, required: true, trim: true },
isPrimary: { type: Boolean, required: true },
},
{ _id: false }
);
const PreferencesSchema = new Schema<IPreferences>(
{
theme: { type: String, required: true, trim: true },
receiveNewsletter: { type: Boolean, required: true },
},
{ _id: false }
);
// ============================================================================
// Root Document Schema
// ============================================================================
const UserSchema = new Schema<IUserDocument>(
{
username: { type: String, required: true, unique: true, trim: true },
email: { type: String, required: true, unique: true, trim: true, lowercase: true },
passwordHash: { type: String, required: true, trim: true },
roles: [{ type: String, trim: true }],
profile: { type: ProfileSchema, required: true },
score: { type: Number, required: true },
isActive: { type: Boolean, required: true },
addresses: [AddressSchema],
preferences: { type: PreferencesSchema, required: true },
lastLoginAt: { type: Date, required: true },
},
{
timestamps: true,
versionKey: false
}
);
// ============================================================================
// Model Export (Safe for Next.js Fast Refresh & Node.js Cluster)
// ============================================================================
User: Model<IUserDocument> =
mongoose.models.User || mongoose.model<IUserDocument>('User', UserSchema);
export default User;Inferência 100% no Cliente
Análise de estrutura JSON e geração de código executadas inteiramente no navegador local sem tráfego de rede.
Geração de Código Completa
Gera simultaneamente esquemas Mongoose, interfaces TypeScript tipadas, DTOs e esquemas de validação Zod.
Padrões de Produção Mongoose
Aplica timestamps automáticos, referências de ObjectId, trim em strings e isolamento de subdocumentos.