andersonjoseph / papr-nest

MongoDB TypeScript-aware Models for NestJS

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Papr-Nest

Papr

  • TypeScript-safe schemas
  • JSON Schema MongoDB validation
  • 🎉 Lightweight library
  • 🚀 Blazing fast

papr is a lightweight library built around the MongoDB NodeJS driver, written in TypeScript.

papr uses MongoDB's JSON Schema validation feature to enable validation of document writes at runtime (requires MongoDB 3.6+).

papr has a familiar API - if you have used the raw mongodb methods to query and change documents before, then you already know how to use papr.

Sample code

//user.module.ts
import {Field, Model} from 'papr-nest';

@Model()
export default class User {
  @Field()
  age: number

  @Field({required: true})
  firstName: string

  @Field({required: true})
  lastName: string
}
// app.model.ts
import { PaprModule } from 'papr-nest';
import User from './user/user.model';

@Module({
  imports: [
    PaprModule.forRoot({
      connectionString: process.env.MONGO_URI,
      models: [User],
      // you can also use a glob:
      models: 'src/**/*.model.ts',
    }),
    UserModule,
  ],
})
export class ApplicationModule {}
//user.module.ts
import { PaprModule } from 'papr-nest';
import { UserService } from './user.service';
import User from './user.model';

@Module({
  imports: [PaprModule.forFeature(User)],
  providers: [UserService],
})
export class UserModule {}
// user.service.ts
import { getPaprRepositoryToken, PaprRepository } from 'papr-nest';
import User from './user.model';

@Injectable()
export class UserService {
  constructor(
    @Inject(getPaprRepositoryToken(User))
    private readonly userRepository: PaprRepository<User>,
  ) {}
  async findAll(): Promise<User[]> {
    return await this.userRepository.find({});
  }

  async create(): Promise<User> {
    const newUser = await this.userRepository.insertOne({
      age: 18,
      firstName: 'Elliot',
      lastName: 'Alderson'
    });

    return newUser;
  }
}

Inspiration

About

MongoDB TypeScript-aware Models for NestJS

License:MIT License


Languages

Language:TypeScript 97.2%Language:JavaScript 2.8%