0.0.11 • Published 5 years ago

pouchdb-model2 v0.0.11

Weekly downloads
4
License
ISC
Repository
github
Last release
5 years ago

pouchdb-model2

Model for pouchdb.

Define methods and validations to subclasses.

Feature

  • custom model class
  • CQRS's saga
  • observable

Install

npm i pouchdb-model2

Gitter

https://gitter.im/pouchdb-model2/community

API

Model

Extends

example:

class User extends Model {
  constructor(name) {
    super();
    this.name = name;
  }
  changeName(name) {
    this.name = name;
  }
}

constructor({ id, rev } = {})

static reg(ModelSubclass) / static getModel(type) / getModel(type)

class User extends Model { ... }

User.reg(); // register Model's subclass

class Book extends Model {
    callUser(id){

        // get UserModel
        const UserModel = this.getModel("User");
        const user = await UserModel.get(id);
        user.changeName("test name");
        user.save();
    }
}
Book.reg();

const BookModel = User.getModel("Book");

const book = new BookModel();

static set db(db) / static get db()

set pouchdb to model class

const DB = require("pouchdb");
DB.plugin(require("pouchdb-adapter-memory"));
DB.plugin(require("pouchdb-find"));
const db = new DB("default", { adapter: "memory" });

const Model = require("pouchdb-model").Model;
Model.db = db; // when Model set db

class User extends Model {}
class Book extends Model {}

User.db; // exist
Book.db; // exist

// or overwrite
const db2 = new DB("default", { adapter: "memory" });
User.db = db2;

static find(req) : Model[]

look https://pouchdb.com/api.html#query_index , but overwrite selector: {type: modeType} and delete fields

const users = await User.find({
  selector: {
    name: { $regex: "^leo" }
  }
});

const user = users[0]; // is exist , then type is User

console.log(user instanceof User); // true

static findRows(req) : any[]

return json[] , see find.

wait continue ...

Observable

Vue example

class User extends Model{...}

const { proxy : user , emitter , json} = new User();

emitter.on("set", ({path,value}) => Vue.set(vm.user,path,value));
emitter.on("apply", ( { cxt, fun, argv } ) =>  );

proxy.changeName("name");
proxy.save();

var vm = new Vue({
    data(){
        return {
            user : json
        }
    }
})

wait continue ...

Saga

CQRS's saga

wait continue ...

License

Apache 2.0

0.0.11

5 years ago

0.0.9

5 years ago

0.0.8

5 years ago

0.0.7

5 years ago

0.0.6

5 years ago

0.0.5

5 years ago

0.0.4

5 years ago

0.0.3

5 years ago

0.0.2

5 years ago

0.0.1

5 years ago

0.0.0

5 years ago