コード例 #1
0
        public async Task <IActionResult> CreateLink([FromBody] PodioSyncItemViewModel model,
                                                     [FromServices] CreateLink createLinkCommand,
                                                     [FromServices] CreateSyncEvent createSyncEventCommand)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            var podio = new Podio(_options.PodioOptions.ClientId, _options.PodioOptions.ClientSecret);
            var app   = _queryDb.PodioApps.SingleOrDefault(x => x.PodioAppId == model.PodioAppId);
            await podio.AuthenticateWithApp(model.PodioAppId, app.AppToken);

            var podioItem = await podio.ItemService.GetItemByAppItemId(model.PodioAppId, model.AppItemId);

            if (_queryDb.Links.Any(x => x.PodioId == podioItem.ItemId))
            {
                return(Ok(new { ok = false }));
            }
            VssConnection connection             = new VssConnection(new Uri(_options.AzureOptions.ProjectUrl), new VssBasicCredential(string.Empty, _options.AzureOptions.AccessToken));;
            WorkItemTrackingHttpClient witClient = connection.GetClient <WorkItemTrackingHttpClient>();
            var azureItem = await witClient.GetWorkItemAsync(model.AzureItemId);

            var link = new PodioAzureItemLink
            {
                AzureId       = azureItem.Id.Value,
                AzureUrl      = azureItem.Url,
                AzureRevision = azureItem.Rev.Value,
                PodioAppId    = app.Id,
                PodioUrl      = podioItem.Link,
                PodioRevision = podioItem.CurrentRevision.Revision,
                PodioId       = podioItem.ItemId
            };

            createLinkCommand.InputModel = link;
            createLinkCommand.Run();

            createSyncEventCommand.InputModel = new SyncEvent
            {
                AzureRevision        = link.AzureRevision,
                Initiator            = Initiator.Manuel,
                PodioAzureItemLinkId = link.Id,
                PodioRevision        = link.PodioRevision,
                SyncDate             = DateTime.UtcNow
            };
            createSyncEventCommand.Run();
            return(Ok(new { ok = true }));
        }
コード例 #2
0
        public async Task <IActionResult> SyncPodioItem([FromBody] PodioSyncItemViewModel model, [FromServices] CreateLink createLinkCommand)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            var podio = new Podio(_options.PodioOptions.ClientId, _options.PodioOptions.ClientSecret);
            var app   = _queryDb.PodioApps.SingleOrDefault(x => x.PodioAppId == model.PodioAppId);
            await podio.AuthenticateWithApp(model.PodioAppId, app.AppToken);

            var item = await podio.ItemService.GetItemByAppItemId(model.PodioAppId, model.AppItemId);

            if (_queryDb.Links.Any(x => x.PodioId == item.ItemId))
            {
                return(Ok(new { ok = false }));
            }
            var azureLink = await _syncService.SyncPodioItemToAzure(createLinkCommand, podio, app, item);

            return(Ok(new { url = azureLink, ok = true }));
        }