From e2a60e8d2b8e41bcd2c9a39d8e2210f701b92353 Mon Sep 17 00:00:00 2001 From: colin Date: Tue, 7 Mar 2023 18:36:45 -0800 Subject: Add: growing an app skeleton --- src/endpoints.lisp | 45 ++++++++++++++++++++++++++++++++++++++------- 1 file changed, 38 insertions(+), 7 deletions(-) (limited to 'src/endpoints.lisp') 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)))) + + -- cgit v1.2.3