Use class for questionnaire model

This commit is contained in:
Marcus Kammer 2025-02-15 09:43:05 +01:00
parent 0d74573c30
commit 49ce629956
Signed by: marcuskammer
GPG key ID: C374817BE285268F
3 changed files with 23 additions and 18 deletions

View file

@ -2,7 +2,7 @@
(defsystem "dev.metalisp.survey"
:description "Create questionnaires and analyze the results."
:version "0.5.11"
:version "0.5.12"
:author "Marcus Kammer <marcus.kammer@mailbox.org>"
:source-control (:git "https://code.metalisp.dev/marcuskammer/dev.metalisp.survey.git")
:licence "MIT"
@ -13,7 +13,8 @@
(:file "survey")
(:module "questionnaire/"
:serial t
:components ((:file "model")
:components ((:file "package")
(:file "model")
(:file "view")
(:file "handler")))
(:file "surveys")

View file

@ -25,16 +25,12 @@
(declare (type questionnaire q))
(view q))
(defun questionnaire-data-structure (post-params q)
(list :type (if (likert-p (questionnaire-name q))
"likert"
"mixed")
:name (questionnaire-name q)
:timestamp (ml-survey/app:today+now)
:post-data post-params))
(defun determine-questionnaire-type (q-name)
"Determine the type of questionnaire based on its name."
(if (likert-p q-name) "likert" "mixed"))
(defun questionnaire-write-to-file (data-file post-params q)
(ml-survey/fileops:write-to-file data-file (questionnaire-data-structure post-params q)))
(ml-survey/fileops:write-to-file data-file (create-questionnaire-data q post-params)))
(defun process-questionnaire-post (post-params survey q)
(declare (type questionnaire q))
@ -50,9 +46,6 @@
(defun create-survey (survey-id)
(make-instance 'ml-survey/survey:survey :id survey-id))
(defun create-questionnaire (lang name)
(make-questionnaire :lang lang :name name))
(defun process-request (survey questionnaire)
(ecase (hunchentoot:request-method*)
(:get (process-questionnaire-get questionnaire))
@ -61,7 +54,11 @@
(define-easy-handler (questionnaire-handler :uri #'questionnaire-uri) ()
(let* ((survey-id (extract-uri-param :survey-id))
(lang (extract-uri-param :lang))
(questionnaire-name (extract-uri-param :questionnaire))
(name (extract-uri-param :questionnaire))
(type (determine-questionnaire-type name))
(survey (create-survey survey-id))
(questionnaire (create-questionnaire lang questionnaire-name)))
(questionnaire (make-instance 'questionnaire
:name name
:type type
:lang lang)))
(process-request survey questionnaire)))

View file

@ -1,6 +1,13 @@
;;; -*- mode: lisp; coding: utf-8; -*-
(in-package :ml-survey/questionnaire)
(defstruct questionnaire
(lang "" :type string)
(name "" :type string))
(defclass questionnaire ()
((name :initarg :name :reader questionnaire-name)
(type :initarg :type :reader questionnaire-type)
(lang :initarg :lang :reader questionnaire-lang)))
(defmethod create-questionnaire-data ((q questionnaire) post-params)
(list :type (questionnaire-type q)
:name (questionnaire-name q)
:timestamp (ml-survey/app:today+now)
:post-data post-params))