public async Task <Response> PublishRepository(byte[] repoBytes, PublishInfo publishInfo) { B2ShareMetaData b2ShareMetaData = publishInfo.metaData.ToB2ShareMetaData(); HttpResponseMessage response = await CreateDraftRecord(b2ShareMetaData, publishInfo.token); if (!response.IsSuccessStatusCode) { return(await PublishErrorResponse(response)); } B2ShareDraftResponse draftResponse = await response.ToB2ShareDraftResponse(); response = await UploadBytesToDraftRecord(repoBytes, $"{publishInfo.repoName}.zip", draftResponse.fileBucketId, publishInfo.token); if (!response.IsSuccessStatusCode) { // Delete draft to ensure transactional nature of request await DeleteDraftRecord(draftResponse.recordId, publishInfo.token); return(await PublishErrorResponse(response)); } response = await PublishDraftRecord(draftResponse.recordId, publishInfo.token); if (!response.IsSuccessStatusCode) { // Delete draft to ensure transactional nature of request await DeleteDraftRecord(draftResponse.recordId, publishInfo.token); return(await PublishErrorResponse(response)); } B2SharePublishResponse b2SharePublishResponse = await response.ToB2SharePublishResponse(); return(new PublishResponse() { message = "Repository succesfully published.", publishUrl = b2SharePublishResponse.publicationUrl }); }
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++) { B2ShareMetaData b2ShareMetaData = publishInfos[i].metaData.ToB2ShareMetaData(); HttpResponseMessage response = await CreateDraftRecord(b2ShareMetaData, publishInfos[i].token); if (!response.IsSuccessStatusCode) { for (int j = 0; j <= i; i++) { // Delete all drafts to ensure transactional nature of request await DeleteDraftRecord(publications[j].publicationId, publishInfos[j].token); } return(await PublishErrorResponse(response)); } B2ShareDraftResponse draftResponse = await response.ToB2ShareDraftResponse(); response = await UploadBytesToDraftRecord(publishInfos[i].snapshot.zippedBytes, $"{publishInfos[i].repoName}.zip", draftResponse.fileBucketId, publishInfos[i].token); if (!response.IsSuccessStatusCode) { for (int j = 0; j <= i; i++) { // Delete all drafts to ensure transactional nature of request await DeleteDraftRecord(publications[j].publicationId, publishInfos[j].token); } return(await PublishErrorResponse(response)); } publications.Add(new PublishingSystemPublication() { publicationId = draftResponse.recordId, publishInfo = publishInfos[i] }); } for (int i = 0; i < publications.Count; i++) { HttpResponseMessage response = await PublishDraftRecord(publications[i].publicationId, publications[i].publishInfo.token); if (!response.IsSuccessStatusCode) { for (int j = 0; j <= i; i++) { // Delete all drafts to ensure transactional nature of request await DeleteDraftRecord(publications[j].publicationId, publications[j].publishInfo.token); } return(await PublishErrorResponse(response)); } else { B2SharePublishResponse publicationResponse = await response.ToB2SharePublishResponse(); publications[i].publicationUrl = publicationResponse.publicationUrl; } } B2ShareMetaData bundleB2ShareMetaData = bundlePublishInfo.metaData.ToB2ShareMetaData(); bundleB2ShareMetaData.resource_types = publications .Select(p => new B2ShareResourceType() { resource_type = p.publicationUrl, resource_type_general = "Software" }) .Union(duplicates.Select(d => new B2ShareResourceType() { resource_type = d.PublicationUrl, resource_type_general = "Software" })) .ToArray(); HttpResponseMessage bundleResponse = await CreateDraftRecord(bundleB2ShareMetaData, bundlePublishInfo.token); if (!bundleResponse.IsSuccessStatusCode) { return(await PublishErrorResponse(bundleResponse)); } B2ShareDraftResponse bundleDraftResponse = await bundleResponse.ToB2ShareDraftResponse(); bundleResponse = await PublishDraftRecord(bundleDraftResponse.recordId, bundlePublishInfo.token); if (!bundleResponse.IsSuccessStatusCode) { // Delete all drafts to ensure transactional nature of request await DeleteDraftRecord(bundleDraftResponse.recordId, bundlePublishInfo.token); return(await PublishErrorResponse(bundleResponse)); } return(await bundleResponse.ToMultiplePublishResponse(publications)); }