aboutsummaryrefslogtreecommitdiffstats
path: root/docs/command-interface.puml
blob: 4c0319a5c8b84ba1a82a6d354ae7f6f823057642 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
@startuml command-interface
!theme plain
title Command-Based Interface Flow

participant "Karuta" as K
participant "domino:execute/2" as API
participant "Command Validator" as V
participant "operations.erl" as Ops
database "Mnesia" as DB

K -> API: execute(DB0, {create, relation, employee, Schema})
activate API
API -> V: validate({create, relation, ...})
activate V
V -> V: check schema format
V -> V: verify types
V --> API: ok
deactivate V

API -> Ops: create_relation(DB0, employee, Schema)
activate Ops
Ops -> DB: transaction(fn -> ... end)
activate DB
DB -> DB: insert relation record
DB -> DB: update database tree
DB --> Ops: {atomic, {NewDB, Hash}}
deactivate DB
Ops --> API: {NewDB, Hash}
deactivate Ops

API --> K: {ok, DB1, {relation_created, employee, Hash}}
deactivate API

K -> API: execute(DB1, {insert, tuple, employee, Data})
activate API
API -> V: validate({insert, tuple, ...})
activate V
V -> V: check schema compliance
V -> V: verify constraints
V --> API: ok
deactivate V

API -> Ops: create_tuple(DB1, employee, Data)
activate Ops
Ops -> DB: transaction(fn -> ... end)
activate DB
DB -> DB: store attribute values
DB -> DB: create tuple record
DB -> DB: update merkle tree
DB --> Ops: {atomic, {NewDB2, TupleHash}}
deactivate DB
Ops --> API: {NewDB2, TupleHash}
deactivate Ops

API --> K: {ok, DB2, {tuple_inserted, TupleHash}}
deactivate API

@enduml