@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