#include #include #include #include void assign_opponents(){ auto const t = get("challengers"); auto const p0 = table_get(t, 0); auto const p1 = table_get(t, 1); record_set(p0, "opponent_id", record_get(p1, "id")); record_set(p1, "opponent_id", record_get(p0, "id")); } config mach(){ return (config) { .resources = {{ {"home", "/", .get = {{ query((d){ .set = "challengers", .db = "pokemon_db", .query = "select id, name, sprite " "from pokemons " "order by random() " "limit 2;" }), invoke((i){assign_opponents}), render((r){.asset = "home"}) }}, .post = {{ validate((v){ .name = "winner", .validation = "^\\d{1,8}$", .message = "must be 1-99999999" }), validate((v){ .name = "loser", .validation = "^\\d{1,8}$", .message = "must be 1-99999999" }), find((d){ .db = "pokemon_db", .query = "begin transaction; " "update pokemons " "set wins = wins + 1 " "where id = {{winner}}; " "update pokemons " "set loses = loses + 1 " "where id = {{loser}}; " "commit;" }), reroute((u){"home"}) }} }, {"result", "/results", .get = {{ query((d){ .set = "results", .db = "pokemon_db", .query = "select id, name, sprite, wins, loses, " "cast(wins as real) / nullif(loses, 0) as ratio_of_wins_to_loses, " "row_number() over (order by (cast(wins as real) / nullif(loses, 0)) desc) as rank " "from pokemons " "order by ratio_of_wins_to_loses desc;" }), render((r){ "{{< home}}" "{{$body}}" "
" "
" "{{#results}}" "
" "
" "{{rank}}" "
" "{{name}}" "
" "
#{{id}}
" "

{{name}}

" "
" "
" "
" "{{ratio_of_wins_to_loses}}" "
" "
" "{{wins}}W - {{loses}}L" "
" "
" "
" "{{/results}}" "
" "
" "{{/body}}" "{{/home}}" }) }} }}, .context = { {"home", "" "" "" "Roundest (MaCH Version)" "{{> htmx_script}}" "{{> tailwind_script}}" "" "" "
" "" "
" "{{$body}}" "
" "

Vote for which is roundest

" "
" "{{#challengers}}" "
" "
" "{{name}}" "
" "#{{id}}" "

{{name}}

" "" "" "" "
" "
" "
" "{{/challengers}}" "
" "
" "{{/body}}" "
" "" "
" "" "" } } }, .databases = {{ .name = "pokemon_db", .engine = sqlite_db, .connect = "file::memory:?cache=shared", .migrations = { "CREATE TABLE IF NOT EXISTS pokemons ( " "id INTEGER PRIMARY KEY AUTOINCREMENT, " "name TEXT NOT NULL, " "sprite TEXT NOT NULL, " "wins INTEGER NOT NULL DEFAULT 0, " "loses INTEGER NOT NULL DEFAULT 0 " ");" } }}, .modules = {htmx, sqlite, tailwind} }; }