示例#1
0
        public bool UpdateTaskPositionAndColumn(int userId, TaskModelWithPositionAndNewColumn task)
        {
            using IDbConnection db = new SqlConnection(_connectionString);
            Debug.Assert(task.Id != null, "task.Id != null");
            if (!IsAllowed(db, userId, (int)task.Id))
            {
                return(false);
            }

            Debug.Assert(task.NewColumnId != null, "task.NewColumnId != null");
            if (!ColumnRepository.IsAllowed(db, userId, (int)task.NewColumnId))
            {
                return(false);
            }

            int maxTaskPosition = GetTasksCount(db, (int)task.NewColumnId);

            if (task.Position < 0 || task.Position > maxTaskPosition)
            {
                return(false);
            }

            return(db.Query(
                       @"DECLARE @OldColumnId INT, @OldTaskPosition INT;
                SET @OldColumnId =
	                (SELECT C.Id
	                FROM TaskTable AS T
	                JOIN ColumnTable AS C ON C.Id = T.ColumnId
	                WHERE T.Id = @taskId);
                SET @OldTaskPosition = 
	                (SELECT Position 
	                FROM TaskTable 
	                WHERE Id = @taskId);

                UPDATE TaskTable
                SET Position = T.Position - 1
                FROM TaskTable AS T
                JOIN ColumnTable AS C ON C.Id = T.ColumnId
                WHERE C.Id = @OldColumnId
                AND T.Position > @OldTaskPosition;

                UPDATE TaskTable
                SET Position = T.Position + 1
                FROM TaskTable AS T
                JOIN ColumnTable AS C ON C.Id = T.ColumnId
                WHERE C.Id = @newColumnId
                AND T.Position >= @newTaskPosition;

                UPDATE TaskTable
                SET Position = @newTaskPosition, ColumnId = @newColumnId
                OUTPUT DELETED.Id
                WHERE Id = @taskId;",
                       new { taskId = task.Id, newTaskPosition = task.Position, newColumnId = task.NewColumnId }).Any());
        }
示例#2
0
        public ActionResult MoveTask(TaskModelWithPositionAndNewColumn task)
        {
            int?userId;

            if ((userId = AuthHelper.GetUserId(HttpContext)) == null)
            {
                return(Unauthorized());
            }

            if (task.Id == null)
            {
                return(BadRequest());
            }

            bool result = _taskRepository.UpdateTaskPositionAndColumn((int)userId, task);

            if (result)
            {
                return(Ok());
            }

            return(StatusCode(403));
        }