Просмотр исходного кода

added an API endpoint and ping button

Harlan Iverson 5 лет назад
Родитель
Сommit
28a41bda9e
3 измененных файлов с 40 добавлено и 4 удалено
  1. 6 3
      project.clj
  2. 17 0
      src/pos_demo/core.clj
  3. 17 1
      src/pos_demo/core.cljs

+ 6 - 3
project.clj

@@ -4,12 +4,15 @@
   :license {:name "Eclipse Public License"
             :url "http://www.eclipse.org/legal/epl-v10.html"}
 
-  :min-lein-version "2.9.1"
+  ;:min-lein-version "2.9.1"
 
   :dependencies [[org.clojure/clojure "1.10.0"]
                  [org.clojure/clojurescript "1.10.520"]
                  [org.clojure/core.async  "0.4.500"]
-                 [reagent "0.8.1"]]
+                 [reagent "0.8.1"]
+                 [ring "1.7.1"]
+                 [cljs-http "0.1.46"]
+                 [org.clojure/core.async "0.4.500"]]
 
   :plugins [[lein-figwheel "0.5.19"]
             [lein-cljsbuild "1.1.7" :exclusions [[org.clojure/clojure]]]]
@@ -63,7 +66,7 @@
 
              ;; doesn't work for you just run your own server :) (see lein-ring)
 
-             ;; :ring-handler hello_world.server/handler
+             :ring-handler pos-demo.core/web-handler
 
              ;; To be able to open files in your editor from the heads up display
              ;; you will need to put a script on your path.

+ 17 - 0
src/pos_demo/core.clj

@@ -0,0 +1,17 @@
+(ns pos-demo.core
+  (:require [ring.middleware.resource :refer [wrap-resource]]))
+  
+(defn current-date
+  []
+  (java.util.Date.))
+
+(defn api-handler
+  [request]
+  (when (= "/api" (:uri request))
+    {:status 200
+     :content-type "application/json"
+     :body (str "{\"msg\": \"Works. " (current-date) "\"}")}))
+   
+(def web-handler
+  (-> api-handler
+      (wrap-resource "public")))

+ 17 - 1
src/pos_demo/core.cljs

@@ -1,6 +1,9 @@
 (ns pos-demo.core
+    (:require-macros [cljs.core.async.macros :refer [go]])
     (:require [reagent.core :as reagent :refer [atom]]
-              [cljs.reader :refer [read-string]]))
+              [cljs.reader :refer [read-string]]
+              [cljs-http.client :as http]
+              [cljs.core.async :as async]))
 
 (enable-console-print!)
 
@@ -34,6 +37,14 @@
         (swap! app-state assoc :active-order order)))
     ))
 
+(defn ping-api
+  []
+  (go
+    (let [api-response (async/<! (http/get "/api"))]
+      (if (= (:status api-response) 200)
+        (js/alert (str "Oh, hey. Works: " (:body api-response)))
+        (js/alert (str "No good :( " (:status api-response)))))))
+
 ; UI handlers
 
 (defn new-order-clicked
@@ -51,6 +62,10 @@
 (defn load-order-clicked
   []
   (load-order))
+  
+(defn ping-api-clicked
+  []
+  (ping-api))
 
 
 ; UI
@@ -72,6 +87,7 @@
 (defn main-screen []
   [:div
    [:h1 (:shop-name @app-state)]
+   (button "Ping API" ping-api-clicked)
    (when (nil? (:active-order @app-state))
      [:span 
        (button "New Order" new-order-clicked)