(ns chef.logic.recipes (:require [clojure.java.io :as cjio] [clojure.string :as cstr] [honey.sql :as sql] [next.jdbc :as jdbc] [chef.database :as cdb] [chef.utils :as cutils]) (:import java.io.File)) (defn get-all-recipes [] (cutils/dprintln "get-all-recipes") (->> {:select [:*] :from [:recipes]} sql/format (jdbc/execute! @cdb/db))) (defn get-recipe [id] (cutils/dprintln "get-recipe") (->> {:select [:*] :from [:recipes] :where [:= :id id]} sql/format (jdbc/execute! @cdb/db) first)) (defn create-recipe! [] (cutils/dprintln "create-recipe!") (->> {:insert-into [:recipes] :values [{:title "New recipe"}]} sql/format (jdbc/execute! @cdb/db))) (defn delete-recipe! [id] (cutils/dprintln "delete-recipe!") (->> {:delete-from [:recipes] :where [:= :id id]} sql/format (jdbc/execute! @cdb/db))) (defn update-recipe! [id updates] (cutils/dprintln "update-recipe!") (->> {:update :recipes :set updates :where [:= :id id]} sql/format (jdbc/execute! @cdb/db))) (defn get-recipe-thumbnail [recipe-id] (cutils/dprintln "get-recipe-thumbnail") (let [thumbnails-folder (File. "./thumbnails/")] (->> thumbnails-folder .listFiles (filter #(cstr/starts-with? (.getName ^File %) (str recipe-id "."))) first))) (defn remove-recipe-thumbnail! [id] (cutils/dprintln "remove-recipe-thumbnail!") (when-let [file (get-recipe-thumbnail id)] (.delete ^File file))) (defn set-recipe-thumbnail! [id multipart-param] (cutils/dprintln "set-recipe-thumbnail!") (when-let [existing-thumbnail-file (get-recipe-thumbnail id)] (.delete ^File existing-thumbnail-file)) (cjio/copy (:tempfile multipart-param) (File. (str "./thumbnails/" id "." (-> (:filename multipart-param) (cstr/split #"\.") last)))))