aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--data.lisp37
-rw-r--r--scrumli.lisp9
2 files changed, 26 insertions, 20 deletions
diff --git a/data.lisp b/data.lisp
index 03b9dcb..7d7b3a2 100644
--- a/data.lisp
+++ b/data.lisp
@@ -98,30 +98,37 @@
(defun story-set-state (type id state)
(execute (:update type :set 'state state :where (:= 'id id))))
-(defun story-change-priority (type id dir)
- (let* ((current-priority (query (:select 'priority :from type
+(defun story-change-priority (id dir)
+ (let* ((current-priority (query (:select 'priority :from 'story
:where (:= 'id id))
:single))
(next-priority (funcall (ecase dir (:up #'-) (:down #'+))
current-priority 1))
(max-priority
- (case type
- ('story (query (:select (:max 'priority) :from type)
- :single))
- ('task
- (query (:select
- (:max 'priority) :from type
- :where (:= 'story-id
- (:select 'story-id
- :from 'task
- :where (:= 'id id))))
- :single)))))
- (execute (:update type :set 'priority current-priority
+ (query (:select (:max 'priority) :from 'story)
+ :single)))
+ (execute (:update 'story :set 'priority current-priority
:where (:= 'priority next-priority)))
- (execute (:update type :set
+ (execute (:update 'story :set
'priority (max 1 (min next-priority max-priority))
:where (:= 'id id)))))
+(defun task-change-priority (id dir)
+ (destructuring-bind (priority story-id)
+ (query (:select 'priority 'story-id :from 'task
+ :where (:= 'id id)) :list)
+ (let* ((next-priority
+ (funcall (ecase dir (:up #'-) (:down #'+)) priority 1))
+ (max-priority
+ (query (:select (:max 'priority) :from 'task
+ :where (:= 'story-id story-id)) :single)))
+ (execute (:update 'task :set 'priority priority
+ :where (:and (:= 'priority next-priority)
+ (:= 'story-id story-id))))
+ (execute (:update 'task :set
+ 'priority (max 1 (min next-priority max-priority))
+ :where (:= 'id id))))))
+
(defun set-assignee (type id assignee)
(execute (:update type :set 'assignee assignee
:where (:= 'id id))))
diff --git a/scrumli.lisp b/scrumli.lisp
index 18fce1e..a3c5871 100644
--- a/scrumli.lisp
+++ b/scrumli.lisp
@@ -208,17 +208,16 @@
(if (logged-in-p)
(let ((id (getf params :|id|))
(dir (getf params :dir)))
- (story-change-priority
- 'story id (intern (string-upcase dir) :keyword))
+ (story-change-priority id (intern (string-upcase dir) :keyword))
(list 200 '(:content-type "text/json")
(encode-json-to-string '((status . "ok")))))
'(403)))
(defun task-move-json/post (params)
(if (logged-in-p)
- (let ((id (getf params :|id|)))
- (story-change-priority
- 'task id (intern (string-upcase (getf params :dir)) :keyword))
+ (let ((id (getf params :|id|))
+ (dir (getf params :dir)))
+ (task-change-priority id (intern (string-upcase dir) :keyword))
(list 200 '(:content-type "text/json")
(encode-json-to-string '((status . "ok")))))
'(403)))