@inceptools/db
A modular database adapter for MongoDB, SQL (Sequelize), and Redis.
Overview
@inceptools/db
is a powerful database adapter that provides seamless integration with multiple databases, including:
- MongoDB (via Mongoose)
- SQL (via Sequelize)
- Redis
It simplifies database management by offering a unified API for different database types, allowing for efficient and scalable application development.
Features
- Unified Interface: Work with MongoDB, SQL databases, and Redis using a consistent API.
- Multiple Connections: Connect to multiple databases of different types simultaneously.
- Type Safety: Full TypeScript support with proper type inference.
- Migration Support: Built-in migration tools for MongoDB and SQL databases.
- Logging: Configurable logging for all database operations.
Installation
npm install @inceptools/db
or
yarn add @inceptools/db
Quick Start
import { DBService, SUPPORTED_DBS } from "@inceptools/db";
import mongoose from "mongoose";
import { Sequelize, DataTypes } from "sequelize";
const db = {
mongodb: {
users: new mongoose.Schema({
name: String,
email: String,
}),
},
postgres: {
contacts: (sequelize: Sequelize) => {
return sequelize.define("Contact", {
name: {
type: DataTypes.STRING,
allowNull: false,
},
email: {
type: DataTypes.STRING,
allowNull: false,
},
});
},
},
};
const config = {
mongodb: {
type: SUPPORTED_DBS.MONGO_DB,
connectionString: "mongodb://localhost:27017/myapp",
models: db.mongodb,
},
postgres: {
type: SUPPORTED_DBS.SQL,
connectionString: "postgresql://user:password@localhost:5432/myapp",
models: db.postgres,
configOptions: {
dialect: "postgres",
},
},
redis: {
type: SUPPORTED_DBS.REDIS,
connectionString: "redis://localhost:6379",
},
};
const dbService = new DBService(config);
await dbService.connect();
const users = await dbService.mongodb.users.find();
const contacts = await dbService.postgres.contacts.findAll();
await dbService.redis.set("key", "value");
await dbService.closeConnection();
Individual Database Usage
MongoDB
import { MongoService, SUPPORTED_DBS } from "@inceptools/db";
import mongoose from "mongoose";
const schemas = {
users: new mongoose.Schema({
name: String,
email: String,
createdAt: { type: Date, default: Date.now },
}),
};
const mongoService = new MongoService({
type: SUPPORTED_DBS.MONGO_DB,
connectionString: "mongodb://localhost:27017/myapp",
models: schemas,
});
await mongoService.connect();
const newUser = await mongoService.users.create({
name: "John Doe",
email: "john@example.com",
});
const users = await mongoService.users.find();
await mongoService.closeConnection();
Migrations
MongoDB Migrations
const mongoService = dbService.mongodb;
const migrationService = mongoService.migrationService;
await migrationService.init();
await migrationService.generateMigration("add-user-roles");
await migrationService.migrate();
SQL Migrations
const sqlService = dbService.postgres;
const migrationService = sqlService.migrationService;
await migrationService.init();
await migrationService.generateMigration("add-order-status");
await migrationService.migrate();
Support
@inceptools/db
is an open-source project under the MIT license. If you find this package useful, consider supporting it by contributing or reporting issues on GitHub.
Stay in Touch
License
@inceptools/db
is MIT licensed.