#include #include #include config mach(){ return (config) { .resources = {{ {"home", "/", .get = {{ render((r){ "{{< layout}}" "{{$body}}" "

home

" "{{/body}}" "{{/layout}}" }) }} }, {"about", "/about", .get = {{ render((r){ "{{< layout}}" "{{$body}}" "

about us

" "{{/body}}" "{{/layout}}" }) }} }, {"contact", "/contact", .get = {{ render((r){ "{{< layout}}" "{{$body}}" "

contact us

" "{{/body}}" "{{/layout}}" }) }} }, {"todos", "/todos", .get = {{ query((d){ .set = "todos", .db = "todos_db", .query = "select id, title, finished " "from todos " "where user_id = {{user_id}};" }), render((r){ "{{< layout}}" "{{$body}}" "
" "" "" "
" "{{^todos}}" "

no todos

" "{{/todos}}" "{{#todos}}" "{{#.}}" "{{> todo}}" "{{/.}}" "{{/todos}}" "{{/body}}" "{{/layout}}" }) }}, .post = {{ validate((v){ .name = "title", .validation = "^\\S{1,16}$", .message = "must be 1-16 characters, no spaces" }), query((d){ .db = "todos_db", .query = "insert into todos(user_id, title) " "values({{user_id}}, {{title}});" }), redirect((u){"todos"}) }}, .before = {logged_in()}, .context = { {"todo", "
" "
" "" "{{^finished}}" "" "{{/finished}}" "{{#finished}}" "" "{{/finished}}" "{{title}}" "" "
" "
" "" "" "
" "
" } } }, {"todo", "/todos/:id", .patch = {{ validate((v){ .name = "finished", .optional = true, .validation = "1", .message = "must be 1" }), query((d){ .db = "todos_db", .query = "update todos " "set finished = {{finished}} " "where user_id = {{user_id}} " "and id = {{id}};" }), redirect((u){"todos"}) }}, .delete = {{ query((d){ .db = "todos_db", .query = "delete from todos " "where user_id = {{user_id}} " "and id = {{id}};" }), redirect((u){"todos"}) }}, .before = { logged_in(), validate((v){ .name = "id", .validation = "^\\d{1,10}$", .message = "must be between 1-9999999999" }) } }}, .before = {session()}, .context = { {"layout", "" "" "" "" "" "

" "{{^user}}" "sign in" "{{/user}}" "{{#user}}" "welcome, {{short_name}}" "{{/user}}" "

" "" "{{$body}}" "{{/body}}" "" "" } }, .errors = { {http_error, { render((r){ "{{< layout}}" "{{$body}}" "

error

" "{{/body}}" "{{/layout}}" }) }}, {http_not_found, { render((r){ "{{< layout}}" "{{$body}}" "

not found

" "{{/body}}" "{{/layout}}" }) }} } }, .databases = {{ .engine = sqlite_db, .name = "todos_db", .connect = "file:todo.db?mode=rwc", .migrations = { "CREATE TABLE IF NOT EXISTS todos ( " "id INTEGER PRIMARY KEY AUTOINCREMENT, " "user_id INTEGER NOT NULL, " "title TEXT NOT NULL, " "finished INTEGER CHECK(finished IN (1))" "); " "CREATE INDEX IF NOT EXISTS idx_todos_user_id ON todos(user_id);" } }}, .modules = {sqlite, session_auth} }; }