summaryrefslogtreecommitdiff
path: root/src/endpoints.lisp
diff options
context:
space:
mode:
Diffstat (limited to 'src/endpoints.lisp')
-rw-r--r--src/endpoints.lisp45
1 files changed, 38 insertions, 7 deletions
diff --git a/src/endpoints.lisp b/src/endpoints.lisp
index f1151cf..e78c9fe 100644
--- a/src/endpoints.lisp
+++ b/src/endpoints.lisp
@@ -66,6 +66,25 @@ functions in url parameters in endpoint definitions."
;;; VALIDATOR TRANSFORMS
+(defmacro define-id-plucker (class)
+ (let ((function-name
+ (intern (format nil "~a-~a-WITH-ID"
+ (if (starts-with-vowel-p (symbol-name class))
+ "AN" "A")
+ class)
+ :dnd)))
+ `(defun ,function-name (id)
+ (let ((object (object-with-uid (string-upcase id))))
+ (unless (typep object ',class)
+ (lzb:http-err 404))
+ object))))
+
+(define-id-plucker adventure)
+
+(define-id-plucker hero)
+
+(define-id-plucker quest)
+
(defun a-valid-nick (name)
"Errors with 400 if the name is not a valid hero name."
(unless (valid-nick-p name)
@@ -149,14 +168,26 @@ functions in url parameters in endpoint definitions."
:description description
:seers possible-seers)))))))
-(defun an-adventure-with-id (id)
- (let ((object (object-with-uid (string-upcase id))))
- (unless (typep object 'adventure)
- (lzb:http-err 404))
- object))
-
(defendpoint* :get "/adventure/:adventure an-adventure-with-id:/:title:" () ()
(with-session (player)
(render (page-render-mode)
- adventure))) ;; for now, render raw adventure.
+ (make-instance 'adventure-page
+ :player player
+ :adventure adventure)))) ;; for now, render raw adventure.
+
+(defendpoint* :get "/hero/:hero a-hero-with-id:/:name:" () ()
+ (with-session (player)
+ (render (page-render-mode)
+ (make-instance 'hero-page
+ :player player
+ :hero hero))))
+
+(defendpoint* :get "/quest/:quest a-quest-with-id:/:name:" () ()
+ (with-session (player)
+ (render (page-render-mode)
+ (make-instance 'quest-page
+ :player player
+ :hero quest))))
+
+