1.0.1 • Published 4 years ago

mongoose-base-repo v1.0.1

Weekly downloads
3
License
MIT
Repository
github
Last release
4 years ago

Mongoose Repository Base

Extensible repository interface for MongoDB powered by Mongoose.

Build Status npm version

Installation

First install Node.js, and MongoDB

$ npm i mongoose-base-repo

or

$ yarn add mongoose-base-repo

Usage

DB Connect

First off we will need to establish a connection with the MongoDB server. Use dbConnect to create that connection.

import { dbConnect } from "mongoose-base-repo";

await dbConnect('mongodb://localhost:27017', 'myDatabaseName');

DbConect can only connect to a single database. If the connection is lost, the base repository will automatically attempt to re-esablish the connection.

See Mongoose for more information on Connection considerations.

Repository Base

Creating a repository is as simple as extending the RepositoryBase<T> class where T is the interface of the app-level model. Here we export an EventRepo as a singleton:

import { RepositoryBase } from "mongoose-base-repo";
import eventRepoConfig from "./config";

// app-level model returned by Get and Save methods
interface IEvent {
  eventId: string;
  eventName: string;
  eventDate: Date;
}

class EventRepo extends RepositoryBase<IEvent> {
  private static exists: boolean = false;
  private static instance: EventRepo;

  constructor() {
    super(eventRepoConfig);
    if (EventRepo.exists) return EventRepo.instance;
    EventRepo.exists = true;
    EventRepo.instance = this;
  }
}

export default new EventRepo();

The RepositoryBase constuctor requires a config object that specifies collection meta data and Schema details.

import { schemaValueTypes as type } from "mongoose-base-repo";

const schemaOptions = {
  eventId: { type: type.String, required: true },
  eventName: { type: type.String, required: true },
  eventDate: { type: type.Date, required: true }
};

// required config object
const config = {
  collectionName: "Events",
  primaryKey: "eventId",
  schemaOptions
};

export default config;

The config defines three fields:

FieldDescription
collectionNameThe name of the collection that will live in MongoDB
primaryKeyThe field that will be set to the auto-generated _id value
schemaOptionsA JSON object used to build the schema. Here type is the only necessary value. The primaryKey is expected to be set to required: true