Skip to content
This repository was archived by the owner on Jun 15, 2021. It is now read-only.

js-entity-repos/mongo

Folders and files

NameName
Last commit message
Last commit date

Latest commit

9b96d1b · Mar 20, 2018

History

60 Commits
Dec 24, 2017
Mar 20, 2018
Dec 24, 2017
Dec 24, 2017
Dec 24, 2017
Dec 24, 2017
Dec 24, 2017
Dec 24, 2017
Mar 20, 2018
Mar 20, 2018
Mar 20, 2018
Dec 24, 2017
Dec 24, 2017
Dec 24, 2017

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 connectToCollection from '@js-entity-repos/mongo/dist/utils/connectToCollection';
import parseFilterId from '@js-entity-repos/mongo/dist/utils/parseFilterId';
import renameSortId from '@js-entity-repos/mongo/dist/utils/renameSortId';

const todosFacade = factory<TodoEntity>({
  collection: connectToCollection({
    collectionName: 'todos',
    dbName: 'todoapp',
    url: 'mongodb://localhost:27017',
  }),
  // 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);
  }.
  // Optional property. Defaults to 10.
  defaultPaginationLimit: 10,
  entityName: 'todo',
});