Zync NestJS Data Module

1.1.42 · active · verified Wed Apr 22

A comprehensive NestJS data module, `zync-nest-data-module` version 1.1.42 provides opinionated solutions for integrating MongoDB with Mongoose into modern web applications. It offers a robust set of features including complete MongoDB/Mongoose integration with structured repositories, transaction management, and schema utilities built around a `BaseSchema` for common document fields. A key differentiator is its automated database backup service, designed to support cloud storage, along with generic base service and repository classes facilitating common CRUD operations and pagination. The module also includes various database helper functions for operations like unique ID generation. Its continuous development, indicated by its version number, suggests an active maintenance cadence. This package aims to streamline data persistence layers in NestJS projects, focusing specifically on Mongoose.

Common errors

Warnings

Install

Imports

Quickstart

Demonstrates the basic setup of the Zync NestJS Data Module in an AppModule, including how to define a Mongoose schema extending `BaseSchema` and how to implement a custom repository using `AbstractBaseRepository`, showcasing common database patterns.

import { Module } from '@nestjs/common';
import { MongooseModule } from '@nestjs/mongoose';
import { Schema, Prop, SchemaFactory } from '@nestjs/mongoose';
import { Injectable } from '@nestjs/common';
import { SoftDeleteModel } from 'mongoose-delete';

import {
  DatabaseModule,
  BackupModule,
  BaseSchema,
  AbstractBaseRepository,
  IPageParams
} from 'zync-nest-data-module';

// 1. Define your Mongoose Schema extending BaseSchema
@Schema({
  timestamps: true,
  collection: 'my_documents'
})
export class MyDocument extends BaseSchema {
  @Prop({ required: true, unique: true })
  name: string;

  @Prop()
  description?: string;
}

export const MyDocumentSchema = SchemaFactory.createForClass(MyDocument);

// 2. Create your custom repository
@Injectable()
export class MyRepository extends AbstractBaseRepository<MyDocument> {
  constructor(@MongooseInjectModel(MyDocument.name) model: SoftDeleteModel<MyDocument>) {
    super(model);
  }

  protected buildQuery(query: Partial<MyDocument>): any {
    return query;
  }

  public async mapData(data: any, isCreate: boolean): Promise<MyDocument> {
    return data;
  }

  async findByName(name: string): Promise<MyDocument[]> {
    return this.find({ name });
  }
}

// 3. Set up your NestJS AppModule
@Module({
  imports: [
    MongooseModule.forRoot(process.env.MONGODB_URI ?? 'mongodb://localhost/test'),
    MongooseModule.forFeature([{ name: MyDocument.name, schema: MyDocumentSchema }]),
    DatabaseModule, // Integrates core database utilities
    BackupModule,   // Integrates database backup service
  ],
  providers: [MyRepository],
  exports: [MyRepository]
})
export class AppModule {}

// Note: MongooseInjectModel is a placeholder. In a real app, use @nestjs/mongoose's @InjectModel.
// The code above uses a common alias 'MongooseInjectModel' to avoid direct import conflict for example clarity.

view raw JSON →