diff of 42f99b308ba587dba2e9b30a9d19740ca3f3a25a

42f99b308ba587dba2e9b30a9d19740ca3f3a25a
diff --git a/src/main.lisp b/src/main.lisp
index f00a89b..7e1af8a 100644
--- a/src/main.lisp
+++ b/src/main.lisp
@@ -9,8 +9,6 @@
   (log:info "Starting murja server~%")
   (with-db
       (migrate))
-  (with-db
-      (murja.model.settings:setup-settings))
   (let ((server (make-instance 'easy-routes:easy-routes-acceptor :port port)))    
     (when (equalp 3010 port)
       (setf *server* server))
diff --git a/src/model/settings.lisp b/src/model/settings.lisp
index ece53ea..e1965ca 100644
--- a/src/model/settings.lisp
+++ b/src/model/settings.lisp
@@ -60,40 +60,22 @@
      (assert *inside-defsetting?* nil "Please wrap `(defsetting ~a ~a)` inside a define-settings macro" ,(prin1-to-string name) ,(prin1-to-string default-value))
      (quote ,name)))
 
-(defun setup-settings ()
-  (setf *settings*
-	(murja.middleware.db:with-db
-	    (make-instance 'Settings))))
-
 (defmacro create-settings ()
   `(progn
-     (defclass Settings ()
-       (,@(map 'list
-	       (lambda (setting)
-		 (with-slots (setting-name default-value) setting
-		   `(,(kw-to-sym setting-name) :initarg ,(read-from-string (format nil ":~a" setting-name))
-				   :initform (or (caar (postmodern:query "SELECT value FROM blog.settings WHERE key = $1" ,(prin1-to-string setting-name)))
-						 ,default-value)
-				   ;; :accessor ,(kw-to-sym setting-name)
-				   )))
-	       *setting-fields*)))
-
-     (defparameter *settings* nil)
-
      ,@(map 'list
 	    (lambda (setting)
 	      (with-slots (setting-name default-value) setting
 		`(progn
 		   (defun ,(kw-to-sym setting-name) (&optional value)
 		     ,(format nil "If called without parameters, returns current value of ~a. If with parameters, update's setting's value both in-app and in db" setting-name)
-		     (with-slots (,(kw-to-sym setting-name)) *settings*
+		     (murja.middleware.db:with-db
+		       (postmodern:execute "INSERT INTO blog.settings VALUES ($1, $2) ON CONFLICT DO NOTHING" ,(prin1-to-string (kw-to-sym setting-name)) ,(format nil "~s" default-value))
 		       (if value
 			   (progn
-			     (setf ,(kw-to-sym setting-name) value)
-			     (murja.middleware.db:with-db
-				 (update-setting ,(prin1-to-string (kw-to-sym setting-name)) value))
+			     (update-setting ,(prin1-to-string (kw-to-sym setting-name)) value)
 			     value)
-			   ,(kw-to-sym setting-name))))
+			   (parse 
+			    (caar (postmodern:query "SELECT value FROM blog.settings WHERE key = $1" ,(prin1-to-string (kw-to-sym setting-name))))))))
 		   (setf (gethash ,(funcall setting-name-kwcleaner setting-name)
 				  *setting->getter*)
 			 (function ,(kw-to-sym setting-name))))))
@@ -115,7 +97,7 @@
 		    (declare (ignore _))
 		    `(defsetting ,name ,value)))
 		body)
-	 (create-settings))))
+       (create-settings))))
   
 
 ;; (defsetting random-size 45)
diff --git a/src/view/settings.lisp b/src/view/settings.lisp
index ad90a63..f78e393 100644
--- a/src/view/settings.lisp
+++ b/src/view/settings.lisp
@@ -13,7 +13,11 @@
 	    (settings (all-setting-names)))
 	(maphash (lambda (key value)
 		   (when (member key settings :test 'equal)
-		     (let ((accessor (setting-getter key)))
+		     (let* ((accessor (setting-getter key))
+			    (old-value (funcall accessor))
+			    (value (if (numberp old-value)
+				       (parse-number:parse-number value)
+				       value)))
 		       (funcall accessor value))))
 		 form)
 	
@@ -31,7 +35,10 @@
 	       (if getter
 		   (progn 
 		     (:label ("~a: " setting))
-		     (:input :type :text :value (funcall getter) :name setting))
+		     (:input :type (if (numberp (funcall getter))
+				       :number 
+				       :text)
+			     :value (funcall getter) :name setting))
 		   (:div.alert ("~s is missing it's getter" setting)))))
 
 	   (:input :type "submit" :value "Save settings"))))