From a71d4f541b10419e46533fba2ceeef80fa4e13c9 Mon Sep 17 00:00:00 2001 From: gered Date: Sat, 30 Jul 2016 17:24:20 -0400 Subject: [PATCH] add routes for basic list CRUD operations --- src/mtgcoll/core.clj | 2 ++ src/mtgcoll/models/lists.clj | 45 ++++++++++++++++++++++++++++++++++++ src/mtgcoll/routes/lists.clj | 32 +++++++++++++++++++++++++ 3 files changed, 79 insertions(+) create mode 100644 src/mtgcoll/models/lists.clj create mode 100644 src/mtgcoll/routes/lists.clj diff --git a/src/mtgcoll/core.clj b/src/mtgcoll/core.clj index 3c62f92..d02b19a 100644 --- a/src/mtgcoll/core.clj +++ b/src/mtgcoll/core.clj @@ -21,6 +21,7 @@ [mtgcoll.routes.main-page :refer [main-page-routes]] [mtgcoll.routes.images :refer [image-routes]] [mtgcoll.routes.collection :refer [collection-routes]] + [mtgcoll.routes.lists :refer [list-routes]] [mtgcoll.routes.auth :refer [auth-routes]])) (defn init @@ -50,6 +51,7 @@ (-> (routes auth-routes collection-routes + list-routes image-routes main-page-routes (route/resources "/") diff --git a/src/mtgcoll/models/lists.clj b/src/mtgcoll/models/lists.clj new file mode 100644 index 0000000..d3e03b9 --- /dev/null +++ b/src/mtgcoll/models/lists.clj @@ -0,0 +1,45 @@ +(ns mtgcoll.models.lists + (:require + [views.sql.core :refer [vexec! with-view-transaction]] + [mtgcoll.db :refer [db]] + [mtgcoll.views.core :refer [view-system]])) + +(defn add-list! + [name public? requires-qualities?] + (vexec! view-system db + ["insert into lists + (name, is_public, require_qualities) + values + (?, ?, ?)" + (str name) (boolean public?) (boolean requires-qualities?)])) + +(defn remove-list! + [list-id] + (vexec! view-system db + ["delete from lists + where id = ?" + (int list-id)])) + +(defn update-list-name! + [list-id name] + (vexec! view-system db + ["update lists + set name = ? + where id = ?" + (str name) (int list-id)])) + +(defn update-list-note! + [list-id note] + (vexec! view-system db + ["update lists + set notes = ? + where id = ?" + (str note) (int list-id)])) + +(defn update-list-visibility! + [list-id public?] + (vexec! view-system db + ["update lists + set is_public = ? + where id = ?" + (boolean public?) (int list-id)])) diff --git a/src/mtgcoll/routes/lists.clj b/src/mtgcoll/routes/lists.clj new file mode 100644 index 0000000..ef8cef4 --- /dev/null +++ b/src/mtgcoll/routes/lists.clj @@ -0,0 +1,32 @@ +(ns mtgcoll.routes.lists + (:require + [compojure.core :refer [routes GET POST]] + [webtools.response :as response] + [webtools.routes.core :refer [wrap-middleware]] + [mtgcoll.middleware :refer [wrap-authenticated]] + [mtgcoll.models.lists :as lists])) + +(def list-routes + (wrap-middleware + (routes + (POST "/lists/add" [name public? requires-qualities? :as request] + (lists/add-list! name public? requires-qualities?) + (response/json {:status "ok"})) + + (POST "/lists/remove" [list-id :as request] + (lists/remove-list! list-id) + (response/json {:status "ok"})) + + (POST "/lists/update-name" [list-id name :as request] + (lists/update-list-name! list-id name) + (response/json {:status "ok"})) + + (POST "/lists/update-note" [list-id note :as request] + (lists/update-list-note! list-id note) + (response/json {:status "ok"})) + + (POST "/lists/update-visibility" [list-id public? :as request] + (lists/update-list-visibility! list-id public?) + (response/json {:status "ok"}))) + + (wrap-authenticated))) \ No newline at end of file