@ifit/mongoose-dao
Version:
Mongo helper methods for working with data in a DAO or repository pattern
62 lines (41 loc) • 2.94 kB
Markdown
[](https://travis-ci.com/ifit/mongoose-dao)
[](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