Wondering if anyone has advice on modelling this data structure in Ash resources:
{
"id": "123456",
"name": "Rule - Lionel Messi sighting",
"conditions": {
"all": [
{
"path": "/person/name",
"operator": "equals",
"value": "Lionel"
},
{
"path": "/person/last_name",
"operator": "like",
"value": "mess"
},
{
"any": [
{
"path": "/person/interests",
"operator": "contains",
"value": "sports"
},
{
"path": "/person/interests",
"operator": "contains",
"value": "pizza"
}
]
}
]
},
"action": "collect_signature.exs"
}
Rule:
- id: uuid
- name: string
- conditions: MultiCondition (nested dynamic map)
- action: string
MultiCondition:
- type: one of [all, any]
- list of SimpleConditions and possible nested MultiConditions
SimpleCondition:
- path: string
- operator: one of [equals, contains, greater_than, less_than, like]
- value: string or int
Schema notes:
- A Rule must have only one top level MultiCondition
- A MultiCondition is allowed to have any number of SimpleConditions and nested MultiConditions
challenges:
Dynamic nested data (like MultiCondition) doesn’t work well with SQL (a known issue). I am targeting SQLite for persistence layer.
rough ideas:
a.) model it all as one ‘Rule’ resource and everything else as attributes: id, name, condtions, action. Then the ‘conditions’ attribute stays as json string in DB for easy dynamic nesting.
b.) break them all out into individual resources but then manage complex relationships between them all? Not sure how the MultiCondition would work with nesting.