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}
Users.find_actor(store, 1234, Actor, User) start with state nil
A user can have two usernames but a username cannot have two users.
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}