public async Task <Response> PublishMultipleRepositories(List <PublishInfo> publishInfos, List <Publication> duplicates, PublishInfo bundlePublishInfo) { List <PublishingSystemPublication> publications = new List <PublishingSystemPublication>(); List <Response> responses = new List <Response>(); for (int i = 0; i < publishInfos.Count; i++) { FigshareMetaData figshareMetaData = publishInfos[i].metaData.ToFigshareMetaData(); HttpResponseMessage response = await CreateArticle(figshareMetaData, publishInfos[i].token); if (!response.IsSuccessStatusCode) { for (int j = 0; j < i; j++) { // Delete all drafts to ensure transactional nature of request await DeleteArticle(int.Parse(publications[j].publicationId), publishInfos[j].token); } return(await PublishErrorResponse(response)); } FigshareCreateResponse figshareCreateResponse = await response.ToFigshareCreateResponse(); int articleId = int.Parse(figshareCreateResponse.location.Split('/').Last()); response = await CreateFile(publishInfos[i].repoName, publishInfos[i].snapshot.zippedBytes.Length, articleId, publishInfos[i].token); if (!response.IsSuccessStatusCode) { for (int j = 0; j < i; j++) { // Delete all drafts to ensure transactional nature of request await DeleteArticle(int.Parse(publications[j].publicationId), publishInfos[j].token); } return(await PublishErrorResponse(response)); } figshareCreateResponse = await response.ToFigshareCreateResponse(); int fileId = int.Parse(figshareCreateResponse.location.Split('/').Last()); response = await GetFileInfo(articleId, fileId, publishInfos[i].token); if (!response.IsSuccessStatusCode) { for (int j = 0; j < i; j++) { // Delete all drafts to ensure transactional nature of request await DeleteArticle(int.Parse(publications[j].publicationId), publishInfos[j].token); } return(await PublishErrorResponse(response)); } FigshareFile file = await response.ToFigshareFile(); response = await UploadBytesToFile(publishInfos[i].snapshot.zippedBytes, file.upload_url, publishInfos[i].token); if (!response.IsSuccessStatusCode) { for (int j = 0; j < i; j++) { // Delete all drafts to ensure transactional nature of request await DeleteArticle(int.Parse(publications[j].publicationId), publishInfos[j].token); } return(await PublishErrorResponse(response)); } response = await CompleteFileUpload(articleId, fileId, publishInfos[i].token); if (!response.IsSuccessStatusCode) { for (int j = 0; j < i; j++) { // Delete all drafts to ensure transactional nature of request await DeleteArticle(int.Parse(publications[j].publicationId), publishInfos[j].token); } return(await PublishErrorResponse(response)); } if (!publishInfos[i].metaData.open_access) { response = await MakeArticleConfidential(articleId, publishInfos[i].token); if (!response.IsSuccessStatusCode) { for (int j = 0; j < i; j++) { // Delete all drafts to ensure transactional nature of request await DeleteArticle(int.Parse(publications[j].publicationId), publishInfos[j].token); } return(await PublishErrorResponse(response)); } } publications.Add(new PublishingSystemPublication() { publicationId = articleId.ToString(), publishInfo = publishInfos[i] }); } for (int i = 0; i < publications.Count; i++) { HttpResponseMessage response = await PublishArticle(int.Parse(publications[i].publicationId), publications[i].publishInfo.token); if (!response.IsSuccessStatusCode) { for (int j = 0; j < i; j++) { // Delete all drafts to ensure transactional nature of request await DeleteArticle(int.Parse(publications[j].publicationId), publishInfos[j].token); } return(await PublishErrorResponse(response)); } else { FigshareCreateResponse figshareCreateResponse = await response.ToFigshareCreateResponse(); publications[i].publicationUrl = figshareCreateResponse.location; } } FigshareMetaData bundleFigshareMetaData = bundlePublishInfo.metaData.ToFigshareMetaData(); bundleFigshareMetaData.references = publications.Select(x => x.publicationUrl) .Union(duplicates.Select(x => x.PublicationUrl)) .ToArray(); HttpResponseMessage bundleResponse = await CreateArticle(bundleFigshareMetaData, bundlePublishInfo.token); if (!bundleResponse.IsSuccessStatusCode) { return(await PublishErrorResponse(bundleResponse)); } FigshareCreateResponse figshareBundleCreateResponse = await bundleResponse.ToFigshareCreateResponse(); int bundleArticleId = int.Parse(figshareBundleCreateResponse.location.Split('/').Last()); bundleResponse = await PublishArticle(bundleArticleId, bundlePublishInfo.token); if (!bundleResponse.IsSuccessStatusCode) { await DeleteArticle(bundleArticleId, bundlePublishInfo.token); return(await PublishErrorResponse(bundleResponse)); } return(await bundleResponse.ToMultiplePublishResponse(publications, figshareBundleCreateResponse.location)); }
public async Task <Response> PublishRepository(byte[] repoBytes, PublishInfo publishInfo) { FigshareMetaData figshareMetaData = publishInfo.metaData.ToFigshareMetaData(); HttpResponseMessage response = await CreateArticle(figshareMetaData, publishInfo.token); if (!response.IsSuccessStatusCode) { return(await PublishErrorResponse(response)); } FigshareCreateResponse figshareCreateResponse = await response.ToFigshareCreateResponse(); int articleId = int.Parse(figshareCreateResponse.location.Split('/').Last()); response = await CreateFile(publishInfo.repoName, repoBytes.Length, articleId, publishInfo.token); if (!response.IsSuccessStatusCode) { await DeleteArticle(articleId, publishInfo.token); return(await PublishErrorResponse(response)); } figshareCreateResponse = await response.ToFigshareCreateResponse(); int fileId = int.Parse(figshareCreateResponse.location.Split('/').Last()); response = await GetFileInfo(articleId, fileId, publishInfo.token); if (!response.IsSuccessStatusCode) { await DeleteArticle(articleId, publishInfo.token); return(await PublishErrorResponse(response)); } FigshareFile file = await response.ToFigshareFile(); response = await UploadBytesToFile(repoBytes, file.upload_url, publishInfo.token); if (!response.IsSuccessStatusCode) { await DeleteArticle(articleId, publishInfo.token); return(await PublishErrorResponse(response)); } response = await CompleteFileUpload(articleId, fileId, publishInfo.token); if (!response.IsSuccessStatusCode) { await DeleteArticle(articleId, publishInfo.token); return(await PublishErrorResponse(response)); } if (!publishInfo.metaData.open_access) { response = await MakeArticleConfidential(articleId, publishInfo.token); if (!response.IsSuccessStatusCode) { await DeleteArticle(articleId, publishInfo.token); return(await PublishErrorResponse(response)); } } response = await PublishArticle(articleId, publishInfo.token); if (!response.IsSuccessStatusCode) { await DeleteArticle(articleId, publishInfo.token); return(await PublishErrorResponse(response)); } figshareCreateResponse = await response.ToFigshareCreateResponse(); return(new PublishResponse() { message = "Repository succesfully published.", publishUrl = figshareCreateResponse.location }); }