2.0.6 • Published 2 years ago

sendit-mongoose-repository v2.0.6

Weekly downloads
275
License
MIT
Repository
github
Last release
2 years ago

Mongoose-Repository

A mongoose Repository based Include Plugin:

  • mongoose
  • mongoose-delete (default options: { deletedAt: true, indexFields: true, overrideMethods: true })
  • mongoose-history
  • mongoose-paginate
  • mongoose-timestamp Deprecated version 1.1.10 change use mongoose provide timestamps
  • mongoose-aggregate-paginate
  • rascal

install

npm install sendit-mongoose-repository --save

publish (maintainer permission required)

npm version x.y.z
git push --follow-tags

Create repo Example

bar.repository.js file

import mongoose from 'mongoose'
import RepositoryBuilder from 'sendit-mongoose-repository'

const schemaDefinition = {
  name: {
    type: String,
    require: true
  },
  foos: {
    type: [Number],
    require: true
  },
  company: { type: Mongoose.Schema.Types.ObjectId, ref: 'Company' },
}

export const builder = RepositoryBuilder('Bar', schemaDefinition)
export default builder.Repository
// builder provides:
//  {
//      Model,
//      Schema,
//      Repository,
//      schemaDefinition
//  }

BaseRepostory provides functions

.findOne(query: any, options: any)
.find(query: any = {}, options: any = {})
.create(data: any)
.update(query: any, data: any)
.upsert(query: any, data: any)
  (default options: {upsert: true, new: true})
.delete(data: any)
.aggregate(data: any)
.aggregatePaginate(query: any, options)

Usage Example

Find one

import BarRepository from './bar.repository.js'
export default async function list() {
  var filter = {
    name: 'default'
  }
  var options = {
    populate: 'company' //optional
  }
  return BarRepository.findOne(filter, options)
}

Find all

import BarRepository from './bar.repository.js'

export default async function list() {
  var filter = {
    name: 'default'
  }
  var options = {
    populate: 'company' //optional
  }
  return BarRepository.find(filter, options)
}

Find with Paginate (required options.limit and options.page)

var filter = {
  name: 'default'
}
var options = {
  limit: 10, // required
  page: 1, // required, start 1
  sort: {name: -1}, // optional, default: {_id: 1}, (ex. sort descending name)
  populate: 'company', // optional
  select: '-_id -__v -password' // optional omit _id, __v, password
}
return BarRepository.find(filter, options)

Create

await BarRepository.create({ name: 'default' })

Update

await BarRepository.update({ name: 'default' }, { foos: [12, 69] })

Delete

await BarRepository.delete({ name: 'default' })

Aggregate

import BarRepository from './bar.repository.js'

export default async function list() {
  var filter = {
    name: 'default'
  }
  var options = {
    populate: 'company' //optional
  }
  return BarRepository.find(filter, options)
}

Aggregate Paginate

var aggregateQuery = [
  { $match : { name: 'default' } },
  { $project: { foos: 1 } }
]
var options = {
  limit: 10, // required
  page: 1, // required, start 1
  sort: {name: -1}
}
return BarRepository.aggregatePaginate(filter, options)

AMQP Feature

The feature will connect to a message broker (RabbitMQ) using AMQP Protocol. When you enable this feature, it will create queues automatically from the base repository from your custom

🔥 Version 2.x.x 🔥

From version 2.x.x onward, `We deprecated the configuration environment of MONGOOSE_AMQP_PORT`. We would like to change how to connect to RabbitMQ to increase the flexibility of cluster connection, `In addition, initialize function is also deprecated`

In Additional

  • Configuration Environment

    MONGOOSE_ENABLE_AMQP=true # default false, If you want to enable setting to true
    MONGOOSE_AMQP_URI=amqp://localhost:5672//staging?heartbeat=5,amqp://localhost:5673//staging?heartbeat=5,amqp://   localhost:5674//staging?heartbeat=5
    MONGOOSE_AMQP_USERNAME=admin
    MONGOOSE_AMQP_PASSWORD=admin
    MONGOOSE_AMQP_SERVICE=users-management-api # Application Name
    MONGOOSE_AMQP_MODEL=user,address,cars # Name of Schema Model on Base Repository
    MONGOOSE_AMQP_EXCHANGE=elasticsearch.caller # Name of Exchange on RabbitMQ
  • Generate Pattern Queue Name

    Deprecated environment NODE_ENV By we use virtual hosts of RabbitMQ In case separate NODE_ENV

    # Pattern
    SERVICE_NAME.create.MODEL_NAME
    SERVICE_NAME.update.MODEL_NAME
    SERVICE_NAME.delete.MODEL_NAME
    
    # Example
    user-management-api.create.user
    user-management-api.update.user
    user-management-api.delete.user

⛔️ Version 1.x.x ⛔️

Old Version not support new cluster

  • Configuration Environment

    MONGOOSE_ENABLE_AMQP=true # default false, If you want to enable setting to true
    MONGOOSE_AMQP_URI=127.0.0.1
    MONGOOSE_AMQP_USERNAME=admin
    MONGOOSE_AMQP_PASSWORD=admin
    MONGOOSE_AMQP_SERVICE=users-management-api # Application Name
    MONGOOSE_AMQP_PORT=5672
    MONGOOSE_AMQP_MODEL=user,address,cars # Name of Schema Model on Base Repository
    MONGOOSE_AMQP_EXCHANGE=elasticsearch.caller # Name of Exchange on RabbitMQ
    MONGOOSE_AMQP_TTL=50000000000000000 #  x-message-ttl or Time-To-Live and Expiration
  • Generate Pattern Queue Name

    # Pattern
    ENV.SERVICE_NAME.create.MODEL_NAME
    ENV.SERVICE_NAME.update.MODEL_NAME
    ENV.SERVICE_NAME.delete.MODEL_NAME
    
    # Example
    staging.user-management-api.create.user
    staging.user-management-api.update.user
    staging.user-management-api.delete.user
  • Initialize Connection with RabbitMQ

    import { init } from 'sendit-mongoose-repository'
    
    init({
      exchange: 'exchange-name',
      models: ['model'],
      ttl: 50000000000000, //millisecond
      service: 'serviceName',
      vhosts: 'local',
      connection: {
        slashes: true,
        protocol: 'amqp',
        hostname: '127.0.0.1',
        user: 'guest',
        password: 'guest',
        vhost: `//local`,
        port: 5672,
        options: {
          heartbeat: 5,
        },
        socketOptions: {
          timeout: 1000,
        },
      },
    })
  • Example For cluster connections

    connections: [
            "amqp://guest:guest@example1.com:5672/v1?heartbeat=10",
            "amqp://guest:guest@example2.com:5672/v1?heartbeat=10",
            "amqp://guest:guest@example3.com:5672/v1?heartbeat=10"
    ]
2.0.6

2 years ago

2.0.5

3 years ago

2.0.4

4 years ago

2.0.3

4 years ago

2.0.2

4 years ago

2.0.1

4 years ago

2.0.0

4 years ago

1.1.13

4 years ago

1.1.12

4 years ago

1.1.11

4 years ago

1.1.10

4 years ago

1.1.9

5 years ago

1.1.8

5 years ago

1.1.7

5 years ago

1.1.6

5 years ago

1.1.5

5 years ago

1.1.4

5 years ago

1.1.3

5 years ago

1.1.2

5 years ago

1.1.1

6 years ago

1.0.13

6 years ago

1.0.12

6 years ago

1.0.11

6 years ago

1.0.10

6 years ago

1.0.9

6 years ago

1.0.8

6 years ago

1.0.7

6 years ago

1.0.6

6 years ago

1.0.5

6 years ago

1.0.4

6 years ago

1.0.3

6 years ago

1.0.2

6 years ago

1.0.1

6 years ago

1.0.0

6 years ago