# mongoose-data-seed

Seed mongodb with data using mongoose models

## Install

    npm install --save mongoose-data-seed
    md-seed init

`md-seed init` will ask you to choose a folder for your seeders.

`md-seed init` will create the `seeders` folder, generate `md-seed-config.js` and update your `package.json`.

## Use

Generate seeder file

    md-seed g users

Run all seeders

    md-seed run

Or run specific seeders

    md-seed run users posts comments

## Options

Drop the database before seeding

    md-seed run --dropdb

## Seeder Example

    import { Seeder } from 'mongoose-data-seed';
    import { User } from '../server/models';

    const data = [
      {
        email: 'user1@gmail.com',
        password: '123123',
        passwordConfirmation: '123123',
        isAdmin: true
      },
      {
        email: 'user2@gmail.com',
        password: '123123',
        passwordConfirmation: '123123',
        isAdmin: false
      }
    ];

    class UsersSeeder extends Seeder {
      async shouldRun() {
        return User.countDocuments()
          .exec()
          .then(count => count === 0);
      }

      async run() {
        return User.create(data);
      }
    }

    export default UsersSeeder;

### md-seed-config.js

`md-seed` excepting to get 3 values from `md-seed-config.js`

1. `seedersList` - A key/value list of all your seeders, `md-seed` will run your seeders as they ordered in the list.
2. `connect` - Connect to mongodb implementation (should return promise).
3. `dropdb` - Drop/Clear the database implementation (should return promise).

#### Example

    import mongoose from 'mongoose';

    import Users from './seeders/users.seeder';
    import Posts from './seeders/posts.seeder';
    import Comments from './seeders/comments.seeder';

    const mongoURL = process.env.MONGO_URL || 'mongodb://localhost:27017/dbname';

    /**
     * Seeders List
     * order is important
     * @type {Object}
     */
    export const seedersList = {
      Users,
      Posts,
      Comments,
    };
    /**
     * Connect to mongodb implementation
     * @return {Promise}
     */
    export const connect = async () => await mongoose.connect(mongoURL, { useNewUrlParser: true });
    /**
     * Drop/Clear the database implementation
     * @return {Promise}
     */
    export const dropdb = async () => mongoose.connection.db.dropDatabase();

### Configurations

`mongoose-data-seed` configurations will get loaded from the `mdSeed` field in your `package.json` file.

Field | Default Value | Description
--- | --- | ---
`seedersFolder` | `'./seeders'` | Path for your seeders-folder, seeders will be generated into this folder.
`customSeederTemplate` | `undefined` | Path to a custom template file to generate your seeders from.

## Examples

1. md-seed-example

## License

MIT