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)))