UNPKG

@ifit/mongoose-dao

Version:

Mongo helper methods for working with data in a DAO or repository pattern

62 lines (41 loc) 2.94 kB
[![Build Status](https://travis-ci.com/ifit/mongoose-dao.svg?token=ZzExnAp71G9kKpfSRgQw&branch=master)](https://travis-ci.com/ifit/mongoose-dao) [![codecov](https://codecov.io/gh/ifit/mongoose-dao/branch/master/graph/badge.svg?token=axubnLgJYT)](https://codecov.io/gh/ifit/mongoose-dao) # Purpose Mongo helper methods for working with data in a [DAO or repository pattern](https://www.culttt.com/2014/09/08/benefits-using-repositories/). As well as some required misc helper methods for interacting with mongo. ## Breaking changes introduced in v3.0.0 Please see [changelog heading "3.0.0 - 2023-11-10" for details](./CHANGELOG.md#300---2023-11-10) ## DAO/Repository Pattern The primary purpose of this is to abstract the interaction with the Database. This has the following benefits: * Easier to mock and DI throughout the app * Doesn't depend so heavily throughout the app on setting up Mockgoose * Wraps all response objects in a proper class * Avoids the messy nature of Mongoose statics/methods ## Helpers ### Object The pattern requires the following on Mongo objects: * There is a `createdAt` and `updatedAt` field * That `_id` is auto converted to `id` when `toObject()` is called * That `__v` is removed when `toObject()` is called To do that, there is a helper method that sets those up. Simply call `initMongoCleanAndTimestamp()` in the [models](./src/sample/data/models) of the app. ### Connection This pattern requires a connection to Mongo. To do that, there is a helper method that sets those up. Simply call `connectToMongo()` in your app at init time. ### Testing with Jest There are some testing methods available for jest in [@ifit/mongoose-dao/test-utils/jest](./src/test-utils/jest) folder for more details: * [global-setup.ts](./src/test-utils/jest/global-setup.ts) can be used in conjunction with jest.config.js's `config.globalSetup` * [global-teardown.ts](./src/test-utils/jest/global-teardown.ts) can be used in conjunction with jest.config.js's `config.globalTeardown` * [setup-after-env.ts](./src/test-utils/jest/setup-after-env.ts) can be used in an array in conjunction with jest.config.js's `config.setupFilesAfterEnv` ## Examples See the [sample](./src/sample) folder. The file/folder structure and files should be all that you need to get started. ## Contributing See [CONTRIBUTING.md](./.github/CONTRIBUTING.md) ## Installing dependencies for the project locally * `yarn install` - Installs all the dependencies * `yarn prepare` - Installs in the peer dependencies for local development ## Scripts * `clean` - Cleans the project build directories * `build` - Cleans and compiles the code to the `out` dir * `watch` - Builds and watches for changes, on changes builds * `lint` - Runs TypeScript linting * `test` - Runs all the test marked with `.test.ts` * `test-cov` - Runs code coverage, generates an HTML report, and opens it in the browser * `prepare` - Installs local peer dependencies