diff of 49605448805a896023c20e270caf8266fc2a37f2

49605448805a896023c20e270caf8266fc2a37f2
diff --git a/resources/sql/post-fns.sql b/resources/sql/post-fns.sql
index d50a055..8a42efd 100644
--- a/resources/sql/post-fns.sql
+++ b/resources/sql/post-fns.sql
@@ -145,3 +145,18 @@ FROM blog.Post p
 JOIN blog.Users u ON u.ID = p.creator_id
 WHERE p.tags @> :tags AND (NOT p.tags ?? 'hidden' OR (p.tags ?? 'hidden' AND :show-hidden))  	     	
       	     	      and ((NOT p.tags ?? 'unlisted') OR :show-hidden);
+
+-- name: insert-post
+-- (:title, :content, :creator-id, :tags) ==
+-- ($1, $2, $3, $4)
+insert into blog.post (title, content, creator_id, tags)
+values ($1, $2, $3, $4) returning id;
+
+-- name: update-post
+-- (:title, :content, :tags, :creator-id) ==
+-- ($1, $2, $3, $4)
+update blog.post
+set title = $1,
+    content = $2,
+    tags = $3
+where id = $4;
diff --git a/src/posts/post-db.lisp b/src/posts/post-db.lisp
index dbd1c8a..b4698b8 100644
--- a/src/posts/post-db.lisp
+++ b/src/posts/post-db.lisp
@@ -3,7 +3,7 @@
   (:import-from :com.inuoe.jzon :parse)
   (:import-from :halisql :defqueries)
   (:import-from :lisp-fixup :fix-timestamp)
-  (:export :get-page :get-titles-by-year))
+  (:export :get-page :get-titles-by-year :insert-post :update-post))
 
 (in-package :murja.posts.post-db)
 
diff --git a/src/routes/post-routes.lisp b/src/routes/post-routes.lisp
index ac2931d..b2dea06 100644
--- a/src/routes/post-routes.lisp
+++ b/src/routes/post-routes.lisp
@@ -1,7 +1,9 @@
 (defpackage murja.routes.post-routes
   (:use :cl)
-  (:import-from :com.inuoe.jzon :stringify)
+  (:import-from :lisp-fixup :partial)
+  (:import-from :com.inuoe.jzon :stringify :parse)
   (:import-from :murja.middleware.db :@transaction)
+  (:import-from :murja.middleware.auth :@authenticated :*user* :@can?)
   (:import-from :murja.posts.post-db :get-page :get-titles-by-year)
    
   (:import-from :murja.middleware.json :@json)
@@ -33,3 +35,24 @@
     (setf (gethash "last-page?" result) last-page?)
 
     (com.inuoe.jzon:stringify result)))
+
+
+;; routes that write to the db
+(defroute post-creation-route ("/api/posts/post" :method :post
+						 :decorators (@json
+							      @transaction
+							      @authenticated
+							      (@can? "create-post"))) ()
+    (let* ((request-body (parse (hunchentoot:raw-post-data :force-text t)))
+	   (content (gethash "content" request-body))
+	   (title (gethash "title" request-body))
+	   (tags (stringify
+		  (remove-if (partial #'string= "")
+			     (coerce 
+			      (gethash "tags" request-body) 'list))))
+
+	   (creator-id (gethash "id" *user*)))
+      (assert creator-id)
+      (murja.posts.post-db:insert-post title content creator-id tags)
+      ""))
+    
diff --git a/src/routes/root-routes.lisp b/src/routes/root-routes.lisp
index 43a20ad..2adad0a 100644
--- a/src/routes/root-routes.lisp
+++ b/src/routes/root-routes.lisp
@@ -88,6 +88,15 @@
 (defroute root ("/" :method :get) ()
   *root*)
 
+(defroute root-blg ("/blog/" :method :get) ()
+  *root*)
+
+(defroute root-blg ("/blog/new_post" :method :get) ()
+  *root*)
+
+(defroute root-blg ("/blog/new_post/" :method :get) ()
+  *root*)
+
 (defroute mediamgr ("/blog/mediamanager" :method :get) ()
   *root*)