public bool UpdateColumnPosition(int userId, ColumnModelWithPosition column) { using IDbConnection db = new SqlConnection(_connectionString); Debug.Assert(column.Id != null, "column.Id != null"); if (!IsAllowed(db, userId, (int)column.Id)) { return(false); } int?boardId = db.Query <int?>( @"SELECT B.Id FROM ColumnTable AS C JOIN BoardTable AS B ON B.Id = C.BoardId WHERE C.Id = @columnId;" , new { columnId = column.Id }).FirstOrDefault(); if (boardId == null) { return(false); } int maxColumnPosition = GetColumnsCount(db, (int)boardId) - 1; if (column.Position < 0 || column.Position > maxColumnPosition) { return(false); } return(db.Query( @"DECLARE @OldColumnPosition INT; SET @OldColumnPosition = (SELECT Position FROM ColumnTable WHERE Id = @columnId); UPDATE ColumnTable SET Position = C.Position - 1 FROM ColumnTable AS C JOIN BoardTable AS B ON B.Id = C.BoardId WHERE B.Id = @boardId AND C.Position > @OldColumnPosition; UPDATE ColumnTable SET Position = C.Position + 1 FROM ColumnTable AS C JOIN BoardTable AS B ON B.Id = C.BoardId WHERE B.Id = @boardId AND C.Position >= @newPosition; UPDATE ColumnTable SET Position = @newPosition OUTPUT DELETED.Id WHERE Id = @columnId;", new { boardId, columnId = column.Id, newPosition = column.Position }).Any()); }
public ActionResult MoveColumn(ColumnModelWithPosition column) { int?userId; if ((userId = AuthHelper.GetUserId(HttpContext)) == null) { return(Unauthorized()); } if (column.Id == null) { return(BadRequest()); } bool result = _columnRepository.UpdateColumnPosition((int)userId, column); if (result) { return(Ok()); } return(StatusCode(403)); }