using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using RMuseum.Models.Auth.Memory;
using RMuseum.Services;
using System.Net;
using System.Threading.Tasks;
using System.Collections.Generic;
using RMuseum.Models.ExternalFTPUpload;
using RSecurityBackend.Models.Generic;
using Newtonsoft.Json;
namespace RMuseum.Controllers
{
[Produces("application/json")]
[Route("api/ftp")]
public class ExternalFTPController : Controller
{
///
/// queued ftp uploads
///
///
///
[HttpGet]
[Authorize(Policy = RMuseumSecurableItem.QueuedFTPUploadShortName + ":" + RMuseumSecurableItem.ModerateOperationShortName)]
[ProducesResponseType((int)HttpStatusCode.OK, Type = typeof(IEnumerable))]
[ProducesResponseType((int)HttpStatusCode.BadRequest, Type = typeof(string))]
public async Task GetQueuedFTPUploadsAsync([FromQuery] PagingParameterModel paging)
{
RServiceResult<(PaginationMetadata PagingMeta, QueuedFTPUpload[] Items)> itemsInfo = await _ftpService.GetQueuedFTPUploadsAsync(paging);
if (!string.IsNullOrEmpty(itemsInfo.ExceptionString))
{
return BadRequest(itemsInfo.ExceptionString);
}
// Paging Header
HttpContext.Response.Headers.Add("paging-headers", JsonConvert.SerializeObject(itemsInfo.Result.PagingMeta));
return Ok(itemsInfo.Result.Items);
}
///
/// process ftp queue
///
///
[HttpPost("start")]
[Authorize(Policy = RMuseumSecurableItem.QueuedFTPUploadShortName + ":" + RMuseumSecurableItem.ModerateOperationShortName)]
[ProducesResponseType((int)HttpStatusCode.OK)]
[ProducesResponseType((int)HttpStatusCode.BadRequest, Type = typeof(string))]
public async Task ProcessQueueAsync()
{
var res = await _ftpService.ProcessQueueAsync(null);
if (!string.IsNullOrEmpty(res.ExceptionString))
return BadRequest(res.ExceptionString);
return Ok();
}
///
/// reset ftp queue
///
///
[HttpPost("reset")]
[Authorize(Policy = RMuseumSecurableItem.QueuedFTPUploadShortName + ":" + RMuseumSecurableItem.ModerateOperationShortName)]
[ProducesResponseType((int)HttpStatusCode.OK)]
[ProducesResponseType((int)HttpStatusCode.BadRequest, Type = typeof(string))]
public async Task ResetQueueAsync()
{
var res = await _ftpService.ResetQueueAsync();
if (!string.IsNullOrEmpty(res.ExceptionString))
return BadRequest(res.ExceptionString);
return Ok();
}
///
/// FTP Service
///
protected readonly IQueuedFTPUploadService _ftpService;
///
/// constructor
///
///
public ExternalFTPController(IQueuedFTPUploadService ftpService)
{
_ftpService = ftpService;
}
}
}