Skip to content

Commit 2e2e816

Browse files
committed
Update Storage Blob SDK to Track2.
1 parent da129fc commit 2e2e816

File tree

4 files changed

+196
-157
lines changed

4 files changed

+196
-157
lines changed

audio/src/ContentReactor.Audio/ContentReactor.Audio.Services/AudioService.cs

Lines changed: 50 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,14 @@
1-
using System;
2-
using System.IO;
3-
using System.Linq;
4-
using System.Threading.Tasks;
1+
using Azure.Storage.Sas;
52
using ContentReactor.Audio.Services.Models.Responses;
63
using ContentReactor.Audio.Services.Models.Results;
74
using ContentReactor.Shared;
85
using ContentReactor.Shared.BlobRepository;
96
using ContentReactor.Shared.EventSchemas.Audio;
10-
using Microsoft.WindowsAzure.Storage.Blob;
7+
using System;
8+
using System.Collections.Generic;
9+
using System.IO;
10+
using System.Linq;
11+
using System.Threading.Tasks;
1112

1213
namespace ContentReactor.Audio.Services
1314
{
@@ -32,7 +33,7 @@ public class AudioService : IAudioService
3233
protected internal const string CategoryIdMetadataName = "categoryId";
3334
protected internal const string UserIdMetadataName = "userId";
3435
protected internal const int TranscriptPreviewLength = 100;
35-
36+
3637
public AudioService(IBlobRepository blobRepository, IAudioTranscriptionService audioTranscriptionService, IEventGridPublisherService eventGridPublisherService)
3738
{
3839
BlobRepository = blobRepository;
@@ -46,39 +47,46 @@ public AudioService(IBlobRepository blobRepository, IAudioTranscriptionService a
4647
var audioId = Guid.NewGuid().ToString();
4748

4849
// create a blob placeholder (which will not have any contents yet)
49-
var blob = BlobRepository.CreatePlaceholderBlob(AudioBlobContainerName, userId, audioId);
50+
var blob = BlobRepository.CreatePlaceholderBlob(AudioBlobContainerName, audioId);
5051

5152
// get a SAS token to allow the client to write the blob
52-
var writePolicy = new SharedAccessBlobPolicy
53+
BlobSasBuilder sasBuilder = new BlobSasBuilder
5354
{
54-
SharedAccessStartTime = DateTime.UtcNow.AddMinutes(-5), // to allow for clock skew
55-
SharedAccessExpiryTime = DateTime.UtcNow.AddHours(24),
56-
Permissions = SharedAccessBlobPermissions.Create | SharedAccessBlobPermissions.Write
55+
StartsOn = DateTime.UtcNow.AddMinutes(-5),
56+
ExpiresOn = DateTime.UtcNow.AddHours(24),
5757
};
58-
var url = BlobRepository.GetSasTokenForBlob(blob, writePolicy);
58+
59+
sasBuilder.SetPermissions(BlobSasPermissions.Create);
60+
sasBuilder.SetPermissions(BlobSasPermissions.Write);
61+
62+
var url = BlobRepository.GetSasTokenForBlob(blob, sasBuilder);
5963

6064
return (audioId, url);
6165
}
6266

6367
public async Task<CompleteAddAudioNoteResult> CompleteAddAudioNoteAsync(string audioId, string userId, string categoryId)
6468
{
65-
var imageBlob = await BlobRepository.GetBlobAsync(AudioBlobContainerName, userId, audioId, true);
69+
var imageBlob = await BlobRepository.GetBlobAsync(AudioBlobContainerName, audioId);
6670
if (imageBlob == null || !await BlobRepository.BlobExistsAsync(imageBlob))
6771
{
6872
// the blob hasn't actually been uploaded yet, so we can't process it
6973
return CompleteAddAudioNoteResult.AudioNotUploaded;
7074
}
71-
72-
// if the blob already contains metadata then that means it has already been added
73-
if (imageBlob.Metadata.ContainsKey(CategoryIdMetadataName))
75+
76+
var response = await imageBlob.GetPropertiesAsync();
77+
if (response.Value.Metadata.ContainsKey(CategoryIdMetadataName))
7478
{
7579
return CompleteAddAudioNoteResult.AudioAlreadyCreated;
7680
}
7781

7882
// set the blob metadata
79-
imageBlob.Metadata.Add(CategoryIdMetadataName, categoryId);
80-
imageBlob.Metadata.Add(UserIdMetadataName, userId);
81-
await BlobRepository.UpdateBlobMetadataAsync(imageBlob);
83+
var metaData = new Dictionary<string, string>
84+
{
85+
{ CategoryIdMetadataName, categoryId },
86+
{ UserIdMetadataName, userId }
87+
};
88+
89+
await BlobRepository.UpdateBlobMetadataAsync(imageBlob, metaData);
8290

8391
// publish an event into the Event Grid topic
8492
var subject = $"{userId}/{audioId}";
@@ -90,39 +98,41 @@ public async Task<CompleteAddAudioNoteResult> CompleteAddAudioNoteAsync(string a
9098
public async Task<AudioNoteDetails> GetAudioNoteAsync(string id, string userId)
9199
{
92100
// get the blob, if it exists
93-
var audioBlob = await BlobRepository.GetBlobAsync(AudioBlobContainerName, userId, id, true);
101+
var audioBlob = await BlobRepository.GetBlobAsync(AudioBlobContainerName, id);
94102
if (audioBlob == null)
95103
{
96104
return null;
97105
}
98106

99107
// get a SAS token for the blob
100-
var readPolicy = new SharedAccessBlobPolicy
108+
BlobSasBuilder sasBuilder = new BlobSasBuilder
101109
{
102-
SharedAccessStartTime = DateTime.UtcNow.AddMinutes(-5), // to allow for clock skew
103-
SharedAccessExpiryTime = DateTime.UtcNow.AddHours(24),
104-
Permissions = SharedAccessBlobPermissions.Read
110+
StartsOn = DateTime.UtcNow.AddMinutes(-5),
111+
ExpiresOn = DateTime.UtcNow.AddHours(24),
105112
};
106-
var audioUrl = BlobRepository.GetSasTokenForBlob(audioBlob, readPolicy);
113+
114+
sasBuilder.SetPermissions(BlobSasPermissions.Read);
115+
var audioUrl = BlobRepository.GetSasTokenForBlob(audioBlob, sasBuilder);
107116

108117
// get the transcript out of the blob metadata
109-
audioBlob.Metadata.TryGetValue(TranscriptMetadataName, out var transcript);
110-
111-
return new AudioNoteDetails
118+
var response = await audioBlob.GetPropertiesAsync();
119+
response.Value.Metadata.TryGetValue(TranscriptMetadataName, out var transcript);
120+
121+
return new AudioNoteDetails
112122
{
113-
Id = id,
114-
AudioUrl = audioUrl,
123+
Id = id,
124+
AudioUrl = audioUrl,
115125
Transcript = transcript
116126
};
117127
}
118128

119129
public async Task<AudioNoteSummaries> ListAudioNotesAsync(string userId)
120130
{
121-
var blobs = await BlobRepository.ListBlobsInFolderAsync(AudioBlobContainerName, userId);
131+
var blobs = await BlobRepository.ListBlobsAsync(AudioBlobContainerName);
122132
var blobSummaries = blobs
123133
.Select(b => new AudioNoteSummary
124134
{
125-
Id = b.Name.Split('/')[1],
135+
Id = b.Name.Split('/')[1],
126136
Preview = b.Metadata.ContainsKey(TranscriptMetadataName) ? b.Metadata[TranscriptMetadataName].Truncate(TranscriptPreviewLength) : string.Empty
127137
})
128138
.ToList();
@@ -136,7 +146,7 @@ public async Task<AudioNoteSummaries> ListAudioNotesAsync(string userId)
136146
public async Task DeleteAudioNoteAsync(string id, string userId)
137147
{
138148
// delete the blog
139-
await BlobRepository.DeleteBlobAsync(AudioBlobContainerName, userId, id);
149+
await BlobRepository.DeleteBlobAsync(AudioBlobContainerName, id);
140150

141151
// fire an event into the Event Grid topic
142152
var subject = $"{userId}/{id}";
@@ -146,7 +156,7 @@ public async Task DeleteAudioNoteAsync(string id, string userId)
146156
public async Task<string> UpdateAudioTranscriptAsync(string id, string userId)
147157
{
148158
// get the blob
149-
var audioBlob = await BlobRepository.GetBlobAsync(AudioBlobContainerName, userId, id, true);
159+
var audioBlob = await BlobRepository.GetBlobAsync(AudioBlobContainerName, id);
150160
if (audioBlob == null)
151161
{
152162
return null;
@@ -161,11 +171,14 @@ public async Task<string> UpdateAudioTranscriptAsync(string id, string userId)
161171
// send to Cognitive Services and get back a transcript
162172
transcript = await AudioTranscriptionService.GetAudioTranscriptFromCognitiveServicesAsync(audioBlobStream);
163173
}
164-
174+
165175
// update the blob's metadata
166-
audioBlob.Metadata[TranscriptMetadataName] = transcript;
167-
await BlobRepository.UpdateBlobMetadataAsync(audioBlob);
176+
var metaData = new Dictionary<string, string>
177+
{
178+
{ TranscriptMetadataName, transcript }
179+
};
168180

181+
await audioBlob.SetMetadataAsync(metaData);
169182
// create a preview form of the transcript
170183
var transcriptPreview = transcript.Truncate(TranscriptPreviewLength);
171184

0 commit comments

Comments
 (0)