aboutsummaryrefslogtreecommitdiffstats
path: root/docs/command-interface.puml
diff options
context:
space:
mode:
authorMarcos Magueta <maguetamarcos@gmail.com>2025-12-01 18:34:31 -0300
committerGitHub <noreply@github.com>2025-12-01 18:34:31 -0300
commit8c8b32d59acc78c7c3e1e8ecae8492a1b728b482 (patch)
treeb218e550b2b09e4920af6e12db531bfd65f65929 /docs/command-interface.puml
parente03b7c75be589d12ddc97d074abd2e3a5c6b7cdf (diff)
downloadSakura-8c8b32d59acc78c7c3e1e8ecae8492a1b728b482.tar.gz
Sakura-8c8b32d59acc78c7c3e1e8ecae8492a1b728b482.zip
Diagrams (#18)
Diffstat (limited to 'docs/command-interface.puml')
-rw-r--r--docs/command-interface.puml58
1 files changed, 58 insertions, 0 deletions
diff --git a/docs/command-interface.puml b/docs/command-interface.puml
new file mode 100644
index 0000000..4c0319a
--- /dev/null
+++ b/docs/command-interface.puml
@@ -0,0 +1,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