Skip to content

extend ORM to support other connectors #77

@dylanfoster

Description

@dylanfoster

i.e. mongo

  • add connector to model manager with model manager.models
  • db connector
    • define method creates the schema (attrs)
    • defineClassMethods and defineInstanceMethods wrap various ways to define methods on a model (.e.g. native class/instance methods for sequelize, methods and statics for mongoose
    • model operation methods (create, find, etc) need to be wrapped for each connector and return a promise
      • createRecord
        • actions: build(payload), validate(), save()
        • arguments:
          • modelName(String) lowercase model name
          • payload(Object)
      • destroyRecord
        • actions: findOne(modelName, id), destroy()
        • arguments:
          • modelName(String) lowercase model name
          • id(String|Int|ObjectId) primary key for the model
      • findAll
        • actions: findAll(query, options)
        • arguments:
          • query(Object)
          • options(Object)
      • findOne
        • actions: queryRecord(modelName, { id })
        • arguments:
          • id(String|Int|ObjectId) primary key for the model
      • queryRecord, returns a single record
        • actions: queryRecord(modelName, query)
        • arguments:
          • where(Object)
          • options(Object)
      • updateRecord
        • actions: queryRecord
        • arguments:
          • where(Object)
          • options(Object)

store

export class Store extends ParchORM {
  createRecord(modelName, payload) {
    return this.connector.createRecord(modelName, payload);
  }

  destroyRecord(modelName, id, options) {
    const record = await this.connector.findOne(modelName, id);

    return record.destroy();
  }

  findAll(modelName, query, options) {
    return this.connector.findAll(modelName, query, options);
  }

  findOne(modelName, id, options) {
    return this.connector.findOne(modelName, id);
  }

  queryRecord(modelName, query, options) {
    return this.connector.queryRecord(modelName, query, options);
  }

  updateRecord(modelName, updates, options) {
    const record = this.connector.updateRecord(modelName, query, options);

    return record.update(updates);
  }
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions