aboutsummaryrefslogblamecommitdiffstats
path: root/docs/karuta-interface-layers.puml
blob: cd5443e0ebfcbed5fc67d5dac997bb3b7e7bc941 (plain) (tree)
































































                                          
@startuml karuta-interface-layers
!theme plain
title Karuta Interface Architecture Layers

actor "Karuta Program" as Karuta

package "Language Bindings" {
  [Karuta FFI] as FFI
  [Erlang Ports] as Ports
  [NIF (Native)] as NIF
}

package "Stable Contract Layer" {
  component "domino.erl" as DominoAPI {
    [create_database/1]
    [execute/2]
    [query/2]
    [transaction/2]
  }
}

package "Command Processor" {
  [Command Parser] as CmdParser
  [Validator] as Validator
  [Executor] as Executor
}

package "Implementation Layer" {
  component "operations.erl" as Ops {
    [create_relation/3]
    [create_tuple/3]
    [get_tuples_iterator/2]
    [etc...]
  }
}

database "Mnesia Storage" as Storage

Karuta --> FFI
Karuta --> Ports
Karuta --> NIF

FFI --> DominoAPI
Ports --> DominoAPI
NIF --> DominoAPI

DominoAPI --> CmdParser
CmdParser --> Validator
Validator --> Executor

Executor --> Ops
Ops --> Storage

note right of DominoAPI
  Stable, versioned interface
  Command format:
  {Verb, Entity, Name, Parameters}

  Examples:
  {create, relation, employee, Schema}
  {insert, tuple, employee, Data}
  {query, relation, employee, Constraints}
end note

@enduml