Skip to content

Instantly share code, notes, and snippets.

@oubiwann
Last active August 29, 2015 14:01
LFE Routes
(defun routes
"Routes for the Volvoshop REST API."
;; /order
(((list "order") method arg-data)
(order-api method arg-data))
;; /order/:id
(((list "order" order-id) method arg-data)
(order-api method order-id arg-data))
;; /orders
(((list "orders") method arg-data)
(orders-api method arg-data))
;; /payment/order/:id
(((list "payment" "order" order-id) method arg-data)
(payment-api method order-id arg-data))
;; When nothing matches, do this
((path method arg)
(io:format
"Unmatched route!~nPath-info: ~p~nmethod: ~p~narg-data: ~p~n~n"
(list path method arg))
(lfest-json-resp:not-found "Unmatched route.")))
(ns volvo-store
(:use compojure.core)
(:require [compojure.route :as route]))
(defroutes handler
;; top-level
(GET "/" []
"Welcome to the Volvo Store!")
;; single order operations
(POST "/order" [attrs]
(json-response (create-order attrs)))
(GET "/order/:id" [id]
(json-response (get-order id)))
(DELETE "/order/:id" [id]
(json-response (delete-order id)))
;; order collection operations
(GET "/orders" []
(json-response (get-orders)))
;; payment operations
(GET "/payment/order/:id" [id]
(get-payment-status id))
(PUT "/payment/order/:id" [id attrs]
(make-payment id attrs))
;; error conditions
; XXX not sure how you'd do this in Compojure ...
; ('ALLOWONLY
; ('GET 'POST 'PUT 'DELETE)
; (lfest-json-resp:method-not-allowed))
(route/not-found
"Bad path: invalid operation."))
(defmodule volvo-store
(export all))
(include-lib "deps/lfest/include/macros.lfe")
(defroutes
;; top-level
('GET "/"
(lfest-html-resp:ok "Welcome to the Volvo Store!"))
;; single order operations
('POST "/order"
(create-order (lfest:get-data arg-data)))
('GET "/order/:id"
(get-order id))
('PUT "/order/:id"
(update-order id (lfest:get-data arg-data)))
('DELETE "/order/:id"
(delete-order id))
;; order collection operations
('GET "/orders"
(get-orders))
;; payment operations
('GET "/payment/order/:id"
(get-payment-status id))
('PUT "/payment/order/:id"
(make-payment id (lfest:get-data arg-data)))
;; error conditions
('ALLOWONLY
('GET 'POST 'PUT 'DELETE)
(lfest-json-resp:method-not-allowed))
('NOTFOUND
(lfest-json-resp:not-found "Bad path: invalid operation.")))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment