using Core.Enumerations; using DataProviders; using DataProviders.Buckets; using DomainResults.Common; using DomainResults.Mvc; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using WeatherForecast.Policies; namespace WeatherForecast.Controllers; /// /// /// [AllowAnonymous] [Route("api/[controller]")] public class FilesController : ControllerBase { private readonly IAuthorizationService _authorizationService; private readonly IImageBucketDataProvider _imageBucketDataProvider; /// /// /// /// public FilesController( IAuthorizationService authorizationService, IImageBucketDataProvider imageBucketDataProvider ) { _authorizationService = authorizationService; _imageBucketDataProvider = imageBucketDataProvider; } /// /// /// /// /// /// /// [HttpPost("{siteId}/{userId}")] public async Task Post([FromRoute] Guid siteId, [FromRoute] Guid userId, List file) { if (file.Any(x => !(x.Length > 0))) return IDomainResult.Failed().ToActionResult(); var newFiles = file.Select(x => { using var ms = new MemoryStream(); x.CopyTo(ms); return new BucketFile(Guid.NewGuid(), siteId, userId, x.FileName, ms.ToArray(), x.ContentType); }).ToList(); if ((await _authorizationService.AuthorizeAsync(User, newFiles, new FileAuthorisationRequirement { Action = CrudActions.Create })).Succeeded) { var result = _imageBucketDataProvider.UploadMany(newFiles); return result.ToActionResult(); } return Unauthorized(); } //[HttpDelete("{siteId}/{userId}")] //public async Task Delete([FromRoute] Guid siteId, [FromRoute] Guid userId, [FromBody] FileRequestModel requestData) { // var (files, fileDownloadResult) = _imageBucketDataProvider.DownloadMany(siteId, userId, requestData.Ids); // if (!fileDownloadResult.IsSuccess || files == null) // return fileDownloadResult.ToActionResult(); // if ((await _authorizationService.AuthorizeAsync(User, files, new FileAuthorisationRequirement { // WhiteListToken = true, // SameAuthor = true, // Action = CrudActions.Delete // })).Succeeded) { // var result = _imageBucketDataProvider.DeletMany(siteId, userId); // return result.ToActionResult(); // } // return Unauthorized(); //} }