Use class for questionnaire model
This commit is contained in:
parent
0d74573c30
commit
49ce629956
3 changed files with 23 additions and 18 deletions
|
@ -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")
|
||||
|
|
|
@ -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)))
|
||||
|
|
|
@ -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))
|
||||
|
|
Loading…
Add table
Reference in a new issue