From 275d372b453b21f8b80efba13c8028ea1b436211 Mon Sep 17 00:00:00 2001 From: Marcus Kammer Date: Sun, 23 Jun 2024 13:23:14 +0200 Subject: [PATCH] Use survey api to show survey properties --- src/handlers/surveys.lisp | 8 ++++++-- src/package.lisp | 3 +++ src/survey.lisp | 6 ++++++ src/views/surveys.lisp | 23 ++++++++++++----------- 4 files changed, 27 insertions(+), 13 deletions(-) diff --git a/src/handlers/surveys.lisp b/src/handlers/surveys.lisp index 193506e..4052ded 100644 --- a/src/handlers/surveys.lisp +++ b/src/handlers/surveys.lisp @@ -1,5 +1,9 @@ (in-package :ml-survey/handlers) (define-easy-handler (surveys :uri "/") nil - (let ((stored-surveys (load-response (make-surveys-db-file)))) - (ml-survey/views:surveys stored-surveys))) + (ml-survey/views:surveys (mapcar (lambda (x) + (make-instance 'ml-survey:survey + :id (format nil + "~a" + (first x)))) + (load-response (make-surveys-db-file))))) diff --git a/src/package.lisp b/src/package.lisp index 180c736..354c10d 100644 --- a/src/package.lisp +++ b/src/package.lisp @@ -9,6 +9,9 @@ #:survey-data-dir-p #:survey-data-dir-files #:survey-html + #:survey-properties + #:survey-properties-title + #:survey-properties-description #:ensure-data-dir #:ensure-data-file-exist #:store-response diff --git a/src/survey.lisp b/src/survey.lisp index 5cddaaf..27e4118 100644 --- a/src/survey.lisp +++ b/src/survey.lisp @@ -35,6 +35,12 @@ (defmethod survey-data-dir-p ((survey survey)) (uiop:directory-exists-p (survey-data-dir survey))) +(defmethod survey-properties-title ((survey survey)) + (cdr (assoc "title" (survey-properties survey) :test #'string-equal))) + +(defmethod survey-properties-description ((survey survey)) + (cdr (assoc "description" (survey-properties survey) :test #'string-equal))) + (defun build-questionnaire-link (survey-id resource) (format nil "/survey/~a/questionnaire~a" survey-id resource)) diff --git a/src/views/surveys.lisp b/src/views/surveys.lisp index 80d659b..5351414 100644 --- a/src/views/surveys.lisp +++ b/src/views/surveys.lisp @@ -1,16 +1,17 @@ (in-package :ml-survey/views) -(defun extract-title (list) - (cdr (assoc "title" (second list) :test #'string-equal))) +(defun surveys-p (list) + "Check if all elements in `lst` are instances of the class `survey`." + (every (lambda (item) (typep item 'ml-survey:survey)) list)) -(defun extract-description (list) - (cdr (assoc "description" (second list) :test #'string-equal))) - -(defun extract-id (list) - (first list)) +(deftype surveys-list () + '(and list (satisfies surveys-p))) (defun surveys (surveys) - "Generates the view to show all surveys available." + "Generates the view to show all surveys available. + +SURVEYS: List of survey objects." + (check-type surveys surveys-list) (with-page (:title "Surveys") (body-header "Surveys" (navbar-en)) (:main :id "main-content" @@ -23,9 +24,9 @@ (:h2 :class "mb-3" "Overview") (:ol :class "list-group list-group-numbered" (loop for survey in surveys - for title = (extract-title survey) - for description = (extract-description survey) - for id = (extract-id survey) do + for title = (ml-survey:survey-properties-title survey) + for description = (ml-survey:survey-properties-description survey) + for id = (ml-survey:survey-id survey) do (:li :class "list-group-item d-flex justify-content-between align-items-start" (:div :class "ms-2 me-auto" (:a :class "fw-bold clearfix"