diff options
-rw-r--r-- | api.lisp | 16 | ||||
-rw-r--r-- | init.lisp | 12 | ||||
-rw-r--r-- | model.lisp | 6 | ||||
-rw-r--r-- | package.lisp | 14 | ||||
-rw-r--r-- | routes.lisp | 12 | ||||
-rw-r--r-- | serialization.lisp | 25 | ||||
-rw-r--r-- | utilities.lisp | 2 |
7 files changed, 37 insertions, 50 deletions
@@ -1,8 +1,8 @@ ;;;; api.lisp -- http routes for dnd -(in-package :dnd.api) +(in-package :dnd) -(lzb:provision-app () +(lzb:provision-app (api) :title "Dungeons & Deadlines" :version "0.1.0" :prefix "/api" @@ -13,11 +13,13 @@ (declare (ignore ignore)) t) -(defendpoint api :get "/heroes" () + + +(defendpoint* :get "/hall-of-legends" ((filter-by identity)) (:auth t) "Get a list of heros sorted by renown" (json:to-json - (list :|heroes| - (sort (copy-seq (db:store-objects-with-class 'hero)) - #'> - :key #'renown)))) + (list :heroes + (sort (copy-seq (db:store-objects-with-class 'hero)) + #'> + :key #'renown)))) @@ -1,6 +1,6 @@ ;;;; init.lisp -(in-package #:dnd.api) +(in-package #:dnd) (defun init-db (&optional config) (if config @@ -9,13 +9,3 @@ 'db:mp-store :directory (merge-pathnames "dnd-store/" (user-homedir-pathname)) :subsystems (list (make-instance 'db:store-object-subsystem))))) - -(defvar *dnd-arena* nil - "The instance of the HTTP server.") - -(defun conjure-arena () - (setf *dnd-arena* (lzb:create-server)) - (lzb:install-app *dnd-arena* 'api) - (lzb:start-server *dnd-arena*)) - - @@ -1,6 +1,8 @@ ;;;; model.lisp -- bknr.datastore class definitions for dnd -(in-package :dnd.api) + + +(in-package :dnd) (deftype title () `(member :noob)) @@ -18,7 +20,7 @@ (experience hero)) (defclass has-uid () - ((uid :reader uid :initform (nuid))) + ((nuid :reader uid :initform (nuid))) (:metaclass db:persistent-class)) (defclass can-equip () diff --git a/package.lisp b/package.lisp index ff06a36..2c7bff8 100644 --- a/package.lisp +++ b/package.lisp @@ -8,20 +8,8 @@ (#:re #:cl-ppcre) (#:json #:jonathan)) (:import-from #:lazybones - #:defendpoint #:defendpoint*) (:import-from #:derrida #:with-plist)) -(defpackage #:dnd.api - (:use #:cl) - (:local-nicknames (#:db #:bknr.datastore) - (#:idx #:bknr.indices) - (#:lzb #:lazybones) - (#:re #:cl-ppcre) - (#:json #:jonathan)) - (:import-from #:lazybones - #:defendpoint - #:defendpoint*) - (:import-from #:derrida - #:with-plist)) + diff --git a/routes.lisp b/routes.lisp new file mode 100644 index 0000000..56b6191 --- /dev/null +++ b/routes.lisp @@ -0,0 +1,12 @@ +;;;; routes.lisp -- http routes for dnd + +(in-package :dnd) + +(lzb:provision-app (api) + :title "Dungeons & Deadlines" + :version "0.1.0" + :prefix "/api" + :content-type "application/json") + + + diff --git a/serialization.lisp b/serialization.lisp index d1689c1..6579b92 100644 --- a/serialization.lisp +++ b/serialization.lisp @@ -1,20 +1,13 @@ ;;;; serialization.lisp -(in-package :dnd.api) -(defmacro with-json-object (&body pairs) - (list* - 'json:with-object - (loop for (key val . more) on pairs by #'cddr - collect `(json:write-key-value ,key ,val)))) -(defmethod json:%to-json ((hero hero)) - (with-slots (name experience chronicle uid equipment-table) hero - (with-json-object - :|name| name - :|experience| experience - :|chronicle| chronicle - :|uid| uid - :|renown| (renown hero) - :|title| (hero-title hero) - :|class| (hero-class hero)))) +(in-package :dnd) + +(defun hall-of-fame-hero-view (hero) + (json:to-json + (list :name (hero-name hero) + :uid (uid hero) + :renown (renown hero) + :title (hero-title hero) + :class (hero-class hero)))) diff --git a/utilities.lisp b/utilities.lisp index 987ddce..b6cf16a 100644 --- a/utilities.lisp +++ b/utilities.lisp @@ -1,6 +1,6 @@ ;;;; utilities -- nuff said -(in-package :dnd.api) +(in-package :dnd) (let ((host (uiop:hostname)) |