public ScenesController ( SceneDescriptorRepository sceneDescriptorRepository, IGameSceneService gameSceneService ) { SceneDescriptorRepository = sceneDescriptorRepository; GameSceneService = gameSceneService; }
public GameSceneService ( IOptions <S3Configuration> s3Configuration, SceneDescriptorRepository sceneDescriptorRepository, ICloudStorageService cloudStorageService ) { S3Configuration = s3Configuration.Value; SceneDescriptorRepository = sceneDescriptorRepository; CloudStorageService = cloudStorageService; }
public async Task <SceneDescriptor> AddScene(Scene scene) { var key = await UploadScene(scene, $"scenes/{Guid.NewGuid()}.json").ConfigureAwait(false); if (key == null) { return(null); } var descriptor = new SceneDescriptor { StorageKey = key, Name = scene.Name }; await SceneDescriptorRepository.Add(descriptor); return(descriptor.Id == null ? null : descriptor); }
public async Task <bool> DeleteScene(string id) { var descriptor = await SceneDescriptorRepository.Get(id).ConfigureAwait(false); if (descriptor == null) { return(false); } var key = WebUtility.UrlDecode(descriptor.StorageKey); var deleted = await CloudStorageService.DeleteFile(S3Configuration.BucketName, key).ConfigureAwait(false); if (deleted) { await SceneDescriptorRepository.Delete(descriptor.Id).ConfigureAwait(false); } return(deleted); }
public async Task <bool> UpdateScene(Scene scene) { var descriptor = await SceneDescriptorRepository.GetByStorageKey(scene.StorageKey).ConfigureAwait(false); if (descriptor == null) { return(false); } var key = await UploadScene(scene, scene.StorageKey).ConfigureAwait(false); if (key != null) { descriptor.Name = scene.Name; await SceneDescriptorRepository.Replace(descriptor).ConfigureAwait(false); } return(key != null); }
public async Task <Scene> GetScene(string id) { var descriptor = await SceneDescriptorRepository.Get(id).ConfigureAwait(false); if (descriptor == null) { return(null); } var key = WebUtility.UrlDecode(descriptor.StorageKey); var file = await CloudStorageService.GetFile(S3Configuration.BucketName, key).ConfigureAwait(false); using (var reader = new StreamReader(file)) { var option = new JsonSerializerOptions { PropertyNamingPolicy = JsonNamingPolicy.CamelCase }; var scene = JsonSerializer.Deserialize <Scene>(reader.ReadToEnd(), option); scene.StorageKey = key; return(RenewPreSignedUrls(scene)); } }
public async Task <IEnumerable <SceneDescriptor> > GetSceneDescriptors([FromQuery] int limit = 0) { return(await SceneDescriptorRepository.Get(limit).ConfigureAwait(false)); }