yolo007wizard
Advice on converting data structure into Ash resources
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.
Most Liked
barnabasJ
You might also want to look at embedded resources Embedded Resources — ash v3.29.3 and unions Ash.Type.Union — ash v3.29.3
adw632
I was going to suggest jsonb and some database check constraints at the DB level as the first step, but you’re using sqlite which has poor Json support (it’s basically text).
Ash provides the ability to add any validations you like, a custom validator can enforce your rules.
jimsynz
I just want to point out that Ash doesn’t have a working SQLite datalayer. @zachdaniel started on one but it’s basically just a copy pasta of ash_postgres and needs a ton of work before it’s usable.
Popular in Questions
Other popular topics
Categories:
Sub Categories:
Forums
Popular Tags
- #ecto
- #liveview
- #troubleshooting
- #learning-elixir
- #deployment
- #library
- #erlang
- #testing
- #genserver
- #mix
- #absinthe
- #remote-other
- #otp
- #plug
- #how-to-question
- #macros
- #postgres
- #channels
- #elixirconf
- #exunit
- #discussion
- #code-sync
- #javascript
- #podcasts
- #onsite
- #dialyzer
- #docker
- #authentication
- #umbrella
- #full-time-contract
- #podcasts-by-brainlid
- #ecto-query
- #elixir-ls
- #phoenix_html
- #iex
- #blog-post
- #graphql
- #genstage
- #ai
- #websockets
- #supervisor
- #advent-of-code
- #elixirconf-us
- #distillery
- #processes
- #forms
- #api
- #metaprogramming
- #security
- #performance








