1.0.0-beta.6 • Published 11 months ago

@linhx/nest-repo-mongodb v1.0.0-beta.6

Weekly downloads
-
License
MIT
Repository
github
Last release
11 months ago

nest-repo-mongodb

Achieve abstraction in repository pattern (NestJs)

Install

npm i @nestjs/mongoose mongoose
npm i @linhx/nest-repo @linhx/nest-repo-mongodb

Example

  1. Import module
import RepositoryMongodbModule from '@linhx/nest-repo-mongodb';
import { Module } from '@nestjs/common';
import { MongooseModule } from '@nestjs/mongoose';
import { ProductModule } from './product/product.module';

@Module({
  imports: [
    MongooseModule.forRoot(process.env.MONGO_DB_URL, {
      dbName: process.env.MONGO_DB_NAME,
      replicaSet: process.env.MONGO_DB_REPLICA,
    }),
    RepositoryMongodbModule.forRoot(),
    ProductModule,
  ],
})
export class AppModule {}
  1. Interface
// product.repository.ts

import { Transaction, Repository } from '@linhx/nest-repo';
import { ObjectId } from 'mongoose';
import { Product } from './entities/product.entity';

export interface ProductRepository extends Repository<Product, ObjectId> {
  findByStore(trx: Transaction, storeId: string): Promise<Product[]>;
}

export const ProductRepositoryProviderName = 'ProductRepository';
  1. Implementation
// product.repository.impl.ts

import {
  ProductRepository,
  ProductRepositoryProviderName,
} from './product.repository';
import { Product, ProductDocument } from './entities/product.entity';
import { ClassProvider, Inject, Injectable } from '@nestjs/common';
import { InjectModel } from '@nestjs/mongoose';
import { Model } from 'mongoose';
import {
  MongoTransaction,
  DbMongo,
  RepositoryImpl,
} from '@linhx/nest-repo-mongodb';
import { DB_PROVIDER } from '@linhx/nest-repo';

@Injectable()
export class ProductRepositoryImpl
  extends RepositoryImpl<Product>
  implements ProductRepository
{
  constructor(
    @Inject(DB_PROVIDER) private readonly db: DbMongo,
    @InjectModel(Product.name) private productModel: Model<ProductDocument>,
  ) {
    super(db, productModel);
  }

  findByStore(trx: MongoTransaction, storeId: string): Promise<Product[]> {
    return this.findAll(trx, {
      storeId,
    });
  }
}

export const ProductRepositoryProvider: ClassProvider = {
  provide: ProductRepositoryProviderName,
  useClass: ProductRepositoryImpl,
};
1.0.0-beta.2

12 months ago

1.0.0-beta.3

11 months ago

1.0.0-beta.4

11 months ago

1.0.0-beta.5

11 months ago

1.0.0-beta.0

1 year ago

1.0.0-beta.1

12 months ago

1.0.0-beta.6

11 months ago

0.0.14

1 year ago

0.0.15

1 year ago

0.0.16

1 year ago

0.0.17

1 year ago

0.0.18

1 year ago

0.0.11

1 year ago

0.0.12

1 year ago

0.0.10

2 years ago

0.0.9

2 years ago

0.0.8

2 years ago

0.0.7

2 years ago

0.0.6

2 years ago

0.0.5

2 years ago

0.0.4

2 years ago

0.0.3

2 years ago

0.0.2

2 years ago

0.0.1

2 years ago