CrowdHailer / pachyderm

Virtual actors for elixir
103 stars 4 forks source link

Partition on entity #2

Closed CrowdHailer closed 5 years ago

CrowdHailer commented 7 years ago
PUT /users/12345/register
last_entity_version
idempotency_key

{username: "bob"}

Users.find_actor(store, 1234, Actor, User) start with state nil

A user can have two usernames but a username cannot have two users.

PUT roster/reserve
or
PUT roster/reservation/5463-4321-1234-12354 # idempotency via url

{
  "username": "bob"
  "user_id": "12345678"
}
register:username_reserved - from session/portal/device/key
user:created - 
user:verified_email -

or with loose data dumps that users have access too PUT user/12345

foo: "bar", just merge in against last version. this is a replication protocol for local stuff.

Try replicating the global register of usernames

state machines for objects, allowed commands per state, a command that is allowed for a state should always succeed??

for updating username. send command to user user updates user name and gets state pending. register is listening to username events and approves. user is listening to register events

updated in browser, first spins until backed up state spins more till globally unique state, each replica has its own uniqueness constraints on users. receive event {user, version, data-center-region}