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