nestjs-papr
Description
nestjs-papr is a module that integrates the Papr library with the Nest Framework.
It provides a way to define Papr models and use them in your Nest modules through dependency injection. This integration allows you to easily work with Papr models in your Nest application.
Supports:
- single MongoDB connection
- multiple MongoDD connections
- passing custom mongo client options
- passing custom database options
- passing custom collection options
- sync and async configuration
- automatic indexes creation
Getting started
Instalation
npm install nestjs-papr
pnpm add nestjs-papr
yarn install nestjs-papr
Usage
- Import ParpModule for root
@Module({
imports: [
PaprModule.forRootAsync({
imports: [ConfigModule],
useFactory: (configService: ConfigService) => {
const { MONGODB_URI, MONGODB_DATABASE_NAME } =
configService.getConfig();
return {
uri: MONGODB_URI,
databaseName: MONGODB_DATABASE_NAME,
autoIndex: true,
autoSchema: true,
};
},
inject: [ConfigService],
}),
]
})
- Define your model
import { model, schema, types } from 'nestjs-papr';
export const UserSchema = schema(
{
_id: types.objectId({ required: true }),
firstName: types.string({ required: true }),
},
{
timestamps: true,
},
);
export type UserDoc = (typeof UserSchema)[0];
export type UserProps = Omit<UserDoc, '_id' | 'createdAt' | 'updatedAt'>;
export type UserCollection = 'users'
export const UserModelDef = model(UserCollection, UserSchema, {
indexes: [
],
collectionOptions: {
}
});
- Provide your model for feature
@Module({
imports: [
PaprModule.forFeature([
UserModelDef,
]),
]
})
- Inject model into service and use it's power
import { Injectable } from '@nestjs/common';
import { InjectModel } from 'nestjs-papr';
import { UserModelDef, UserDoc, UserProps } from './models/user.model';
@Injectable()
export class ModuleService {
constructor(
@InjectModel(UserModelDef)
private readonly userModel: typeof UserModelDef.model,
) {}
async createUser(userProps: UserProps): Promise<UserDoc> {
return await this.userModel.insertOne({ ...userProps });
}
}
Decorators
InjectModel = (modelDef: ModelDef, connectionName?: string)
- inject model
InjectPapr = (connectionName: string)
- inject Papr instance
InjectConnection = (name: string)
- inject MongoClient instance
Configuration
export interface PaprModuleOptions {
uri?: string;
connectionName?: string;
databaseName?: string;
mongoClientOptions?: MongoClientOptions;
databaseOptions?: DbOptions;
paprOptions?: ModelOptions;
retryAttempts?: number;
retryDelay?: number;
autoIndex?: boolean;
autoSchema?: boolean;
connectionFactory?: (connection: any, name: string) => any;
connectionErrorFactory?: (error: Error) => Error;
}
License
nestjs-papr is MIT licensed.