# Maker & Taker Daemon

Daemon that enables the frontend.
The frontend is just a very thin display layer, the daemon does all the heavy lifting and calculations.

## Database

We use an `sqlite` database managed by `sqlx`.

To make `sqlx` handle the rust types correctly you have to generate `sqlx-data.json` file upon every query change.
So, if you develop on the DB and change queries you will have to update the `sqlx` rust mappings like this:

```bash
# crated temporary DB
DATABASE_URL=sqlite:tempdb cargo sqlx database create

# run the migration scripts to create the tables
DATABASE_URL=sqlite:tempdb cargo sqlx migrate run

# prepare the sqlx-data.json rust mappings
DATABASE_URL=sqlite:./daemon/tempdb cargo sqlx prepare -- --bin taker
```

Currently the database for taker and maker is the same.
The `taker` binary is used as an example to run the `prepare` command above, but it is irrelevant if you run it for taker or maker.
The `tempdb` created can be deleted, it should not be checked into the repo.
You can keep it around and just run the `prepare` statement multiple times when working on the database.

## Logging

`maker` and `taker` both make use of a log library which can be controlled using the environment variable `RUST_LOG`.
By default, logging is set to `debug` for application specific logs only.
If you want to see logs by third party libraries, you need to set `RUST_LOG=`.
For example, to enable logs for rocket, use:

```bash
RUST_LOG=rocket=debug cargo run --bin taker
```

Additionally, logs can be formatted in json format by passing `--json` or `-j`.