(ns chef.utils (:require [chef.database :as cdb] [honey.sql :as sql] [next.jdbc :as jdbc] [ring.util.response :as ruresp] [clojure.string :as cstr])) (defn gen-page [title & content] [:html [:head [:meta {:name "viewport" :content "width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0"}] [:title title] [:link {:rel :stylesheet :href "/static/style.css"}] [:meta {:http-equiv "content-type" :content "text/html; charset=utf-8"}]] (apply conj [:body] content [[:script {:src "/static/htmx.js"}]])]) (defmacro auth-only [request & body] `(if (some? (get-in ~request [:session :oauth-token])) (do ~@body) ~(-> (ruresp/response "Unauthorized.") (ruresp/status 302) (ruresp/header "Location" "/auth")))) (defn category-path [category] (cstr/join " > " (loop [path (list) category category] (let [new-path (conj path (:categories/name category))] (if (some? (:categories/parent category)) (recur new-path (->> {:select [:*] :from [:categories] :where [:= :id (:categories/parent category)]} sql/format (jdbc/execute! @cdb/db) first)) new-path)))))