Skip to content
This repository has been archived by the owner on Jun 15, 2021. It is now read-only.
/ mongo Public archive

A concrete implementation of js-entity-repos for mongo.

License

Notifications You must be signed in to change notification settings

js-entity-repos/mongo

Repository files navigation

mongo

A concrete implementation of js-entity-repos for mongo.

Usage

  1. Install it with npm i @js-entity-repos/mongo.
  2. For each entity you will need to do the following.
    1. Create Entity interfaces.
    2. Construct the facade.
    3. Use the facade.

Entity Interface

import Entity from '@js-entity-repos/core/dist/types/Entity';

export interface TodoEntity extends Entity {
  readonly description: string;
  readonly completed: boolean;
}

Construct the Facade

import factory from '@js-entity-repos/mongo/dist/factory';
import connectToDb from '@js-entity-repos/mongo/dist/utils/connectToDb';
import parseFilterId from '@js-entity-repos/mongo/dist/utils/parseFilterId';
import renameSortId from '@js-entity-repos/mongo/dist/utils/renameSortId';

const todosFacade = factory<TodoEntity>({
  // Optional property. Defaults to entityName.
  collectionName: 'todos',
  // Optional property to convert an entity to a DB document. Defaults to "utils/constructIdDocument".
  constructDocument: ({ id, ...patch}) => {
    return { _id: id, ...patch };
  },
  // Optional property to convert a DB document to an entity. Defaults to "utils/constructIdEntity".
  constructEntity: ({ _id, ...document }) => {
    return { id: _id, ...document };
  },
  // Optional property to convert an entity filter to a DB filter. Defaults to "utils/parseFilterId".
  constructFilter: (filter) => {
    return parseFilterId(filter);
  },
  // Optional property to convert an entity sort to a DB sort. Defaults to "utils/renameSortId".
  constructSort: (sort) => {
    return renameSortId(sort);
  },
  db: connectToDb({
    dbName: 'todoapp',
    url: 'mongodb://localhost:27017',
  }),
  // Optional property. Defaults to 10.
  defaultPaginationLimit: 10,
  entityName: 'todo',
});