feat: add fnOS packaging, storage workflows and release pipeline
This commit is contained in:
@@ -0,0 +1,75 @@
|
||||
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user