@bhudevswayam/blueprint-engine
v1.0.0
Published
Domain-Driven Architectural Store for Node.js and MongoDB.
Downloads
24
Maintainers
Readme
blueprint-engine 🏗️
blueprint-engine is a high-level architectural framework for Node.js and MongoDB. It is designed to eliminate the "90% boilerplate tax" by providing pre-configured, domain-specific backend blueprints.
Instead of writing repetitive logic for authentication, multi-tenancy, or industry-specific workflows, you simply inject your Mongoose models into a blueprint and mount the resulting engine.
🌟 The Vision
This library acts as a Domain-Driven Architectural Store. It allows developers to deploy complex backend structures using standardized "blueprints."
- v1.0.x: Multi-tenant Authentication & Authorization (Current).
🚀 Features (Auth Blueprint)
- Zero-Boilerplate: Fully automated
/loginand/registerroutes. - Security-as-a-Code: Built-in Bcrypt hashing and JWT session management.
- Dynamic Multi-Tenancy: Automated
tenantIdgeneration and logical data isolation. - Inversion of Control: Pass your own Mongoose models; the engine handles the persistence logic.
📦 Installation
npm install blueprint-engineNote: Ensure you have express and mongoose installed in your host project.
🛠️ Quick Start (Auth Blueprint)
1. Define your Models
Your models can contain any custom fields, but the engine requires email, password, and tenantId to function.
User Model
// models/User.js
const mongoose = require("mongoose");
const UserSchema = new mongoose.Schema({
name: { type: String, required: true },
email: { type: String, unique: true, required: true },
password: { type: String, required: true },
role: { type: String, enum: ["superadmin", "business", "user"], default: "user" },
phoneNo: { type: Number },
addressLine1: { type: String },
addressLine2: { type: String },
city: { type: String },
state: { type: String },
zipCode: { type: Number },
tenantId: { type: String, required: true },
// Optional: quick access to bookings (can also just query Booking collection)
bookings: [{ type: mongoose.Schema.Types.ObjectId, ref: "Booking" }]
}, { timestamps: true });
module.exports = mongoose.model("User", UserSchema);Tenant Model
// models/User.js
const mongoose = require('mongoose');
const TenantSchema = new mongoose.Schema({
name: { type: String, required: true },
tenantId: { type: String },
meta: { type: Object, default: {} }
}, { timestamps: true });
module.exports = mongoose.model('Tenant', TenantSchema);
2. Mount the Engine
Inject your models and your JWT secret into the swayamauth blueprint.
const express = require('express');
const mongoose = require('mongoose');
const { swayamauth } = require('blueprint-engine');
const User = require('./models/User');
const Tenant = require('./models/Tenant');
const app = express();
app.use(express.json());
// Database Connection
mongoose.connect('mongodb://localhost:27017/your_db');
// Mount the Blueprint - One line handles all Auth logic
app.use('/api/auth', swayamauth(User, Tenant, 'YOUR_JWT_SECRET_KEY'));
app.listen(4000, () => console.log('Engine running on port 4000'));📡 API Reference
POST /register
Creates a new Tenant and a User account. Automatically hashes the password and generates a unique tenantId.
Body: { "name": "Name",
"email": "[email protected]",
"password": "password123",
...customFields
}POST /login
Authenticates the user and returns a signed JWT.
Body: { "email": "[email protected]",
"password": "password123"
}