sometimes giving up control can set us free
https://skji.org/holder
- Elixir 100%
| .vscode | ||
| config | ||
| lib | ||
| priv/repo/migrations | ||
| .formatter.exs | ||
| .gitignore | ||
| .tool-versions | ||
| compose.yml | ||
| license | ||
| mix.exs | ||
| mix.lock | ||
| readme.md | ||
skji/holder
sometimes giving up control can set us free
dev
setup
cp config/config.{example,secret}.exs- fill in
config/config.secret.exs docker compose up -d db
running
mix ecto.migrateiex -S mix
prod
setup
cp config/config.{example,secret}.exscp config/db.{dev,secret}.exs- fill in
config/config.secret.exsandconfig/db.secret.exs mix ecto.create
design
holder is split into 3 main components:
- Schema: We use a classic Ecto + Postgres setup for persistent storage of
data.
priv/repo/migrations/houses the code that modifies the Postgres schema - Actions: Modules under
Holder.Modelcontain the data models and associated higher-level logic which describes each possible Action, e.g. creating a new hold. This is also where permission (or more accurately, consent) checks happen. - Commands: are how users interface with holder. These are contained under
Holder.Command
Commands call upon Actions, Actions modify the data through the Schema.