diff options
| author | Marcos Magueta <maguetamarcos@gmail.com> | 2025-12-01 18:34:31 -0300 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-12-01 18:34:31 -0300 |
| commit | 8c8b32d59acc78c7c3e1e8ecae8492a1b728b482 (patch) | |
| tree | b218e550b2b09e4920af6e12db531bfd65f65929 /docs/command-interface.puml | |
| parent | e03b7c75be589d12ddc97d074abd2e3a5c6b7cdf (diff) | |
| download | Sakura-8c8b32d59acc78c7c3e1e8ecae8492a1b728b482.tar.gz Sakura-8c8b32d59acc78c7c3e1e8ecae8492a1b728b482.zip | |
Diagrams (#18)
Diffstat (limited to 'docs/command-interface.puml')
| -rw-r--r-- | docs/command-interface.puml | 58 |
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 |
