From ffb5d0b740e3fa23143ad89dab29a44d5b0acd34 Mon Sep 17 00:00:00 2001
From: Tim <contact@bytim.eu>
Date: Sat, 31 May 2025 17:03:51 +0200
Subject: Add real data to home page + add search logic + add recipe pages

---
 src/chef/components/search.clj | 43 ++++++++++++++++++++++++++++++++++++++----
 1 file changed, 39 insertions(+), 4 deletions(-)

(limited to 'src/chef/components')

diff --git a/src/chef/components/search.clj b/src/chef/components/search.clj
index 843f907..e428a23 100644
--- a/src/chef/components/search.clj
+++ b/src/chef/components/search.clj
@@ -1,13 +1,48 @@
 (ns chef.components.search
-  (:require [hiccup2.core :as html]
+  (:require [chef.database :as cdb]
+            [chef.utils :as cutils]
+            [clojure.string :as cstr]
+            [hiccup2.core :as html]
+            [honey.sql :as sql]
+            [next.jdbc :as jdbc]
             [ring.util.response :as ruresp]))
 
-(defn render [query]
-  [:p "Results; Query: " query])
+(defn render [query category]
+  [:table
+   [:tr
+    [:th "Rezept"]
+    [:th "Kategorie"]]
+   (for [recipe (jdbc/execute! @cdb/db
+                               (sql/format {:select [:*]
+                                            :from   [:recipes]}))
+         :let [recipe-category (->> {:select [:*]
+                                     :from   [:categories]
+                                     :where  [:= :id (:recipes/category recipe)]}
+                                    sql/format
+                                    (jdbc/execute! @cdb/db)
+                                    first)]]
+     (when (or (= category -1)
+               (and (cstr/includes? (-> recipe
+                                        :recipes/title
+                                        cstr/lower-case)
+                                    query)
+                    (some #(= (:categories/id %) category)
+                          (cutils/category-parents recipe-category))))
+       [:tr
+        [:td
+         [:b [:a {:href (str "/recipes/" (:recipes/id recipe))} (:recipes/title recipe)]]]
+        [:td
+         (cutils/category-path (->> {:select [:*]
+                                     :from   [:categories]
+                                     :where  [:= :id (:recipes/category recipe)]}
+                                    sql/format
+                                    (jdbc/execute! @cdb/db)
+                                    first))]]))])
 
 (defn handler [req]
   (if-let [query (get-in req [:params "query"])]
-    (-> (render query)
+    (-> (render query (try (Integer/parseInt (get-in req [:params "category"]))
+                           (catch Exception _ -1)))
         html/html
         str
         ruresp/response)
-- 
cgit v1.2.3