aboutsummaryrefslogtreecommitdiffstats
path: root/docs/karuta-interface-layers.puml
blob: cd5443e0ebfcbed5fc67d5dac997bb3b7e7bc941 (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
59
60
61
62
63
64
65
@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