76 lines
3.1 KiB
C#
76 lines
3.1 KiB
C#
using dy.net.model.dto;
|
|
using dy.net.service;
|
|
using Microsoft.AspNetCore.Authorization;
|
|
using Microsoft.AspNetCore.Mvc;
|
|
|
|
namespace dy.net.Controllers
|
|
{
|
|
[Route("api/storage/openlist/directory-repairs")]
|
|
[ApiController]
|
|
[Authorize]
|
|
public sealed class OpenListDirectoryRepairsController : ControllerBase
|
|
{
|
|
private readonly OpenListDirectoryRepairService _service;
|
|
|
|
public OpenListDirectoryRepairsController(OpenListDirectoryRepairService service) => _service = service;
|
|
|
|
[HttpPost("preflight")]
|
|
public Task<IActionResult> Preflight(
|
|
[FromBody] OpenListDirectoryRepairPreflightRequest request,
|
|
CancellationToken cancellationToken) => ExecuteAsync(async () =>
|
|
ApiResult.Success(await _service.PreflightAsync(request, cancellationToken)));
|
|
|
|
[HttpPost]
|
|
public Task<IActionResult> Create(
|
|
[FromBody] CreateOpenListDirectoryRepairRequest request,
|
|
CancellationToken cancellationToken) => ExecuteAsync(async () =>
|
|
ApiResult.Success(await _service.CreateAsync(request, cancellationToken)));
|
|
|
|
[HttpGet("latest")]
|
|
public Task<IActionResult> Latest() => ExecuteAsync(async () =>
|
|
ApiResult.Success(await _service.GetLatestAsync()));
|
|
|
|
[HttpGet("{id}")]
|
|
public Task<IActionResult> Get(string id) => ExecuteAsync(async () =>
|
|
ApiResult.Success(await _service.GetAsync(id)));
|
|
|
|
[HttpGet("{id}/items")]
|
|
public Task<IActionResult> Items(string id, [FromQuery] OpenListDirectoryRepairItemPageRequest request) =>
|
|
ExecuteAsync(async () => ApiResult.Success(await _service.GetItemsAsync(id, request)));
|
|
|
|
[HttpPost("{id}/confirm-cleanup")]
|
|
public Task<IActionResult> Confirm(
|
|
string id,
|
|
[FromBody] ConfirmOpenListDirectoryRepairRequest request) => ExecuteAsync(async () =>
|
|
{
|
|
await _service.ConfirmCleanupAsync(id, request);
|
|
return ApiResult.Success("清理任务已提交");
|
|
});
|
|
|
|
[HttpPost("{id}/cancel")]
|
|
public Task<IActionResult> Cancel(string id) => ExecuteActionAsync(() => _service.CancelAsync(id));
|
|
|
|
[HttpPost("{id}/resume")]
|
|
public Task<IActionResult> Resume(string id) => ExecuteActionAsync(() => _service.ResumeAsync(id));
|
|
|
|
[HttpPost("{id}/retry-failed")]
|
|
public Task<IActionResult> RetryFailed(string id) => ExecuteActionAsync(() => _service.RetryFailedAsync(id));
|
|
|
|
private Task<IActionResult> ExecuteActionAsync(Func<Task> action) => ExecuteAsync(async () =>
|
|
{
|
|
await action();
|
|
return ApiResult.Success("操作已提交");
|
|
});
|
|
|
|
private static async Task<IActionResult> ExecuteAsync(Func<Task<IActionResult>> action)
|
|
{
|
|
try { return await action(); }
|
|
catch (Exception ex) when (ex is InvalidOperationException or KeyNotFoundException
|
|
or HttpRequestException or TimeoutException)
|
|
{
|
|
return ApiResult.Fail(ex.GetBaseException().Message);
|
|
}
|
|
}
|
|
}
|
|
}
|