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();
//}
}