diff of 0eb4eb277a6700647b024b2a2a25187b4b1863ab
0eb4eb277a6700647b024b2a2a25187b4b1863ab
diff --git a/resources/sql/media-fns.sql b/resources/sql/media-fns.sql
index d31bc10..796780a 100644
--- a/resources/sql/media-fns.sql
+++ b/resources/sql/media-fns.sql
@@ -1,6 +1,5 @@
-- name: insert-media
--- returns: :array-hash
-insert into blog.media (name, data) values (:name, :data) returning id;
+insert into blog.media (name, data) values ($1, $2) returning id;
-- name: get-media :? :1
-- returns: :array-hash
diff --git a/src/media/media-db.lisp b/src/media/media-db.lisp
index 39c685d..4d1b844 100644
--- a/src/media/media-db.lisp
+++ b/src/media/media-db.lisp
@@ -3,7 +3,7 @@
(:import-from :com.inuoe.jzon :parse)
(:import-from :halisql :defqueries)
(:import-from :lisp-fixup :fix-timestamp)
- (:export))
+ (:export :list-pictures :insert-media))
(in-package :murja.media.media-db)
diff --git a/src/routes/media-routes.lisp b/src/routes/media-routes.lisp
index c0c3d19..8b4ad44 100644
--- a/src/routes/media-routes.lisp
+++ b/src/routes/media-routes.lisp
@@ -1,8 +1,9 @@
(defpackage murja.routes.media-routes
(:use :cl)
+ (:import-from :lisp-fixup :slurp-bytes)
(:import-from :com.inuoe.jzon :stringify)
(:import-from :murja.middleware.db :@transaction)
- (:import-from :murja.media.media-db :list-pictures)
+ (:import-from :murja.media.media-db :list-pictures :insert-media)
(:import-from :murja.middleware.json :@json)
(:import-from :murja.middleware.auth :@authenticated :@can? :*user*)
@@ -10,6 +11,22 @@
(in-package :murja.routes.media-routes)
+(defroute post-pic ("/api/pictures" :method :post
+ :decorators (@transaction
+ @authenticated
+ (@can? "create-post")))
+ (&post file)
+ (destructuring-bind (tmp-file filename mime) file
+ (let* ((bytes (slurp-bytes tmp-file))
+ (result (insert-media filename bytes))
+ (response (make-hash-table)))
+
+ (log:info "Inserting picture ~a of mime ~a" filename mime)
+ (when result
+ (setf (gethash "id" response)
+ (caar result))
+ (stringify response)))))
+
(defroute all-pics ("/api/pictures/list/all" :method :get
:decorators (@transaction
@authenticated