Exciting news!Announcing our $4.6M Series Seed. Learn more
Socket
LoveBlogFAQ
Install
Log in

cqrs

Package Overview
Dependencies
3
Maintainers
2
Versions
174
Issues
File Explorer

Advanced tools

cqrs

cqrs for javascript

    2.10.25latest

Version published
Maintainers
2
Yearly downloads
5,455
decreased by-16.31%

Weekly downloads

Readme

Source

CQRS

DDD-CQRS-Actor framework.

Document [ chinese ]

Version

cqrs@2.10.11

Install

npm install cqrs yarn add cqrs

Consumers

  • Auxo (vue & express & cqrs framework)

EventStore

const {Domain} = require("cqrs"); const MongoStore = require("cqrs-mongo-eventstore").default; const eventstore = new MongoStore("localhost/test"); const domain = new Domain({eventstore});

Roadmap

  • preview core
  • use typescript rewrite core
  • saga rollback
  • join the distributed system
  • DCI support
  • use protobuf message
  • actor GC
  • system time travel

Step

create Actor class

const { Actor } = require("cqrs"); class User extends Actor { /* see example */ } class Transfer extends Actor { /* see example */ }

register Actor class to domain

const { domain } = require("cqrs"); // get default domain. domain.register(User).register(Transfer);

create/get an Actor instance

// only javascript object const user = await domain.create("User", {name:"Leo"}); user.json; // get actor instance data. user.deduct(120.00); // call instance method. const userInstance = await domain.get("User",userId); // get a User instance.

Preview Example

Example

User.js

const { Actor } = require(".."); module.exports = class User extends Actor { constructor(data) { super({ money: data.money || 0, name: data.name, id:data.id }); } changename(name) { this.$.apply("changename", name); } get updater(){ return { changename(data,event){ return { name: event.name } } } } }

Transfer.js

const { Actor } = require("cqrs"); module.exports = class Transfer extends Actor { constructor(data) { super({ finish: false }); } log(event) { // console.log(event,"21121----2"); } async transfe(fromUserId, toUserId, money) { try{ const $ = this.$; $.sagaBegin(); $.lock(); await $.subscribe({ actorType: "User"}, "log"); // await $.unsubscribe({ actorType: "User"}); await $.subscribe({ actorType: "User", actorId:toUserId , type: "add" }, "log"); // await $.unsubscribe({ actorType: "User", actorId:toUserId , type: "add" }); // console.log(fromUserId,toUserId); const fromUser = await $.get("User.payers", fromUserId); const toUser = await $.get("User.charger", toUserId); fromUser.deduct(money); toUser.add(money); if (money > 100) throw new Error("hhhh") $.unlock(); $.sagaEnd(); $("finish", null); }catch(e){ // console.log(e); } } get updater(){ return { finish(data,event) { return { finish: true } } } } }

LICENSE

MIT

Keywords

Socket

Product

Subscribe to our newsletter

Get open source security insights delivered straight into your inbox. Be the first to learn about new features and product updates.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc