{"id":25504347,"url":"https://github.com/lecantaloop/qwiq","last_synced_at":"2025-04-10T10:24:02.859Z","repository":{"id":28073343,"uuid":"31570558","full_name":"LeCantaloop/Qwiq","owner":"LeCantaloop","description":"QWIQ is a Quick Work Item Query library for Team Foundation Server / Visual Studio Online. ","archived":false,"fork":false,"pushed_at":"2022-12-07T17:26:34.000Z","size":15778,"stargazers_count":13,"open_issues_count":33,"forks_count":11,"subscribers_count":22,"default_branch":"develop","last_synced_at":"2025-04-02T05:44:14.979Z","etag":null,"topics":["c-sharp","identity","linq","microsoft","nuget","soap","tfs","tfs-api","vsts","wit","workitem"],"latest_commit_sha":null,"homepage":"","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":"priologic/easyrtc","license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/LeCantaloop.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2015-03-03T00:09:52.000Z","updated_at":"2024-05-13T16:52:09.000Z","dependencies_parsed_at":"2023-01-14T08:04:42.517Z","dependency_job_id":null,"html_url":"https://github.com/LeCantaloop/Qwiq","commit_stats":null,"previous_names":[],"tags_count":28,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/LeCantaloop%2FQwiq","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/LeCantaloop%2FQwiq/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/LeCantaloop%2FQwiq/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/LeCantaloop%2FQwiq/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/LeCantaloop","download_url":"https://codeload.github.com/LeCantaloop/Qwiq/tar.gz/refs/heads/develop","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248199087,"owners_count":21063641,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["c-sharp","identity","linq","microsoft","nuget","soap","tfs","tfs-api","vsts","wit","workitem"],"created_at":"2025-02-19T05:35:25.227Z","updated_at":"2025-04-10T10:24:02.850Z","avatar_url":"https://github.com/LeCantaloop.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":" QWIQ\n=======\n\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://github.com/LeCantaloop/Qwiq/blob/master/LICENSE) [![Build status: DEVELOP](https://ci.appveyor.com/api/projects/status/jfi0nejktfny3dkf/branch/develop?svg=true)](https://ci.appveyor.com/project/LeCantaloop/microsoft-qwiq/branch/develop)\n\n[![MyGet](https://img.shields.io/myget/qwiq/v/Qwiq.Core.svg)](https://myget.org/feed/qwiq/package/nuget/Qwiq.Core) [![MyGet](https://img.shields.io/myget/qwiq/vpre/Qwiq.Core.svg)](https://myget.org/feed/qwiq/package/nuget/Qwiq.Core)\n\nQWIQ is a **Q**uick **W**ork **I**tem **Q**uery library for Team Foundation Server / Visual Studio Online. If you do a lot of reading or writing of work items, this package is for you! \n\n## What can it be used for?\nQuerying Team Foundation Server, of course! Instead of directly using the TFS Client OM, you could use QWIQ! It it made of packages designed to make working with Tfs/Vso a pleasure. Qwiq.Core is the no-frills base package, exposinng the raw types needed to read and write work items. Qwiq.Identity adds methods to simplify converting between your preferred method of identity (display names, user names) and TFS's identity classes. Qwiq.Linq provides a Linq query provider to be able to write Linq to query tfs. Qwiq.Mapper enables converting from IWorkItem, the raw Qwiq.Core type, to your own classes to enable strongly typed access to your WorkItems. Qwiq.Relatives extends Qwiq.Linq to enable slightly more complicated queries allowing for basic queries of related workitems. Qwiq.Mocks provides default implementations for commonly mocked classes within Qwiq, and should allow for getting up and unit testing quickly. Why use this over the Client OM? Glad you asked!\n\n### 1. Easier to consume\nLet's be honest, the TFS libraries are a pain to use. There are a lot of them, several are dynamically loaded, and a few are native. While we can't avoid it, you can! Just install the [`Qwiq.Core`](https://www.nuget.org/packages/Qwiq.Core/) package and everything will be in your \\bin folder when you need it.\n\n### 2. Easier to test\nQwiq makes testing your apps a breeze. Everything has an interface. Everything uses factories (or factory methods) instead of constructors. Install our [`Qwiq.Mocks`](https://www.nuget.org/packages/Qwiq.Mocks/) package for easy to use mocks, or mock what you need from out interfaces for your tests and go. No more messy, temperamental fakes, or adapters cluttering your code.\n\n### 3. Easier to understand\nHow often do you update a work item? How often do you create a new security group? We stripped out the rarely used stuff to make interfaces cleaner and the relationships between types simpler. Missing something you can't live without? Send us a pull request!\n\n## How to install it\nWe have two ways you can install our packages: through NuGet.org which contains our stable packages only, and MyGet.org, which contains vNext and stable packages.\n\n\nIf you want our vNext packages, [add our MyGet feed to your NuGet clients](https://docs.nuget.org/ndocs/tools/package-manager-ui#package-sources):\n\n - v3 (VS 2015+ / NuGet 3.x): `https://www.myget.org/F/qwiq/api/v3/index.json`\n - v2 (VS 2013 / NuGet 2.x): `https://www.myget.org/F/qwiq/api/v2`\n\nOnce the feed is configured, install via the nuget UI or via the nuget package manager console\n\n### Install Core\nFrom the NuGet package manager console\nNuGet\n```\nPM\u003e Install-Package Qwiq.Core\n```\nOr via the UI [Qwiq.Core](https://www.nuget.org/packages/Qwiq.Core/)\n\nMyGet\n```\nPM\u003e Install-Package Qwiq.Core -Source https://www.myget.org/F/qwiq/api/v3/index.json\n```\nOr via the UI [Qwiq.Core](https://www.myget.org/feed/qwiq/package/nuget/Qwiq.Core),\n\n\n### Install Client\nWe now have two clients: one for SOAP, and one for REST\nNuGet\n```\nPM\u003e Install-Package Qwiq.Client.Soap\n```\nOr via the UI [Qwiq.Client.Soap](https://www.nuget.org/packages/Qwiq.Client.Soap/),\n\n\nFrom the NuGet package manager console\nMyGet\n```\nPM\u003e Install-Package Qwiq.Client.Soap -Source https://www.myget.org/F/qwiq/api/v3/index.json\n```\nOr via the UI [Qwiq.Client.Soap](https://www.myget.org/feed/qwiq/package/nuget/Qwiq.Client.Soap),\n\n### Basic Usage\nFor .NET\n\n```csharp\nusing Qwiq;\nusing Qwiq.Credentials;\n\nusing Microsoft.VisualStudio.Services.Client;\n...\n\n// We support\n//  - OAuth2\n//  - Personal Access Token (PAT)\n//  - Username and password (BASIC)\n//  - Windows credentials (NTLM or Federated with Azure Active Directory)\n//  - Anonymous\n\n// Use the full URI, including the collection. Example: https://QWIQ.VisualStudio.com/DefaultCollection\nvar uri = new Uri(\"[Tfs Tenant Uri]\");\nvar options = new AuthenticationOptions(uri, AuthenticationTypes.Windows);\nvar store = WorkItemStoreFactory\n                .Default\n                .Create(options);\n\n// Execute WIQL\nvar items = store.Query(@\"\n    SELECT [System.Id] \n    FROM WorkItems \n    WHERE [System.WorkItemType] = 'Bug' AND State = 'Active'\");\n```\n\nFor PowerShell\n\n```powershell\n[Reflection.Assembly]::LoadFrom(\"E:\\Path\\To\\Qwiq.Core.dll\")\n# Can use SOAP or REST clients here\n[Reflection.Assembly]::LoadFrom(\"E:\\Path\\To\\Qwiq.Client.Soap.dll\")\n\n$uri = [Uri]\"[Tfs Tenant Uri]\"\n$options = New-Object Qwiq.Credentials.AuthenticationOptions $uri,Windows\n$store = [Qwiq.Client.Soap.WorkItemStoreFactory]::Default.Create($options)\n\n$items = $store.Query(@\"\n    SELECT [System.Id] \n    FROM WorkItems \n    WHERE [System.WorkItemType] = 'Bug' AND State = 'Active'\", $false)\n```\n\n## Contributing\n**Getting started with Git and GitHub**\n\n * [Setting up Git for Windows and connecting to GitHub](http://help.github.com/win-set-up-git/)\n * [Forking a GitHub repository](http://help.github.com/fork-a-repo/)\n * [The simple guide to GIT guide](http://rogerdudler.github.com/git-guide/)\n * [Open an issue](https://github.com/MicrosoftEdge/Microsoft.Qwiq/issues) if you encounter a bug or have a suggestion for improvements/features\n\n\nOnce you're familiar with Git and GitHub, clone the repository and start contributing!\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flecantaloop%2Fqwiq","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flecantaloop%2Fqwiq","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flecantaloop%2Fqwiq/lists"}