- Remove SendWithRefreshAsync method from AuthServiceBase (now dead code) - Replace all 15 SendWithRefreshAsync call sites in 7 services with direct Client.XxxAsync calls - Remove unused using System.Net from AuthServiceBase - Update AGENTS.md to document JwtTokenRefresher as the sole token refresh mechanism
91 lines
3.2 KiB
C#
91 lines
3.2 KiB
C#
using Butter.Dtos.Folder;
|
|
using Microsoft.Extensions.Options;
|
|
|
|
namespace MilkStream.Client.Services;
|
|
|
|
/// <summary>
|
|
/// Manages file system folders for asset scanning via the API.
|
|
/// </summary>
|
|
public sealed class FoldersService(
|
|
IOptions<ServiceOptions> options,
|
|
IHttpClientFactory httpClientFactory,
|
|
LoginService loginService,
|
|
ILogger<FoldersService> logger
|
|
) : AuthServiceBase(options, httpClientFactory, loginService, logger) {
|
|
/// <summary>
|
|
/// Fired when folders are saved.
|
|
/// </summary>
|
|
public event EventHandler? SaveFolders;
|
|
/// <summary>
|
|
/// Invokes the <see cref="SaveFolders"/> event.
|
|
/// </summary>
|
|
public void OnSaveFolders() => SaveFolders?.Invoke(this, EventArgs.Empty);
|
|
|
|
/// <summary>
|
|
/// Gets all tracked folders.
|
|
/// </summary>
|
|
/// <returns>A list of folders, or null if the request failed.</returns>
|
|
public async Task<List<FolderFullDto>?> GetAllFolders() {
|
|
var response = await Client.GetAsync("/api/folder");
|
|
|
|
if (response.IsSuccessStatusCode) return await response.Content.ReadFromJsonAsync<List<FolderFullDto>>();
|
|
|
|
return null;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Gets a folder by its ID.
|
|
/// </summary>
|
|
/// <param name="id">The folder ID.</param>
|
|
/// <returns>The folder details, or null if not found.</returns>
|
|
public async Task<FolderFullDto?> GetFolderById(Guid id) {
|
|
var response = await Client.GetAsync($"/api/folder/{id}");
|
|
|
|
if (response.IsSuccessStatusCode) return await response.Content.ReadFromJsonAsync<FolderFullDto>();
|
|
|
|
return null;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Creates a new folder.
|
|
/// </summary>
|
|
/// <param name="folder">The folder creation data.</param>
|
|
public async Task CreateFolderAsync(FolderCreateDto folder) {
|
|
var response = await Client.PutAsJsonAsync("/api/folder", folder);
|
|
response.EnsureSuccessStatusCode();
|
|
}
|
|
|
|
/// <summary>
|
|
/// Updates an existing folder.
|
|
/// </summary>
|
|
/// <param name="id">The folder ID.</param>
|
|
/// <param name="folder">The folder update data.</param>
|
|
public async Task UpdateFolderAsync(Guid id, FolderUpdateDto folder) {
|
|
var response = await Client.PostAsJsonAsync($"/api/folder/{id}", folder);
|
|
response.EnsureSuccessStatusCode();
|
|
}
|
|
|
|
/// <summary>
|
|
/// Deletes a folder.
|
|
/// </summary>
|
|
/// <param name="folderId">The folder ID.</param>
|
|
public async Task RemoveFolderAsync(Guid folderId) {
|
|
var response = await Client.DeleteAsync($"/api/folder/{folderId}");
|
|
response.EnsureSuccessStatusCode();
|
|
}
|
|
|
|
/// <summary>
|
|
/// Gets a random sample of asset paths from the folder for testing regex patterns.
|
|
/// </summary>
|
|
/// <param name="folderId">The folder ID.</param>
|
|
/// <param name="count">Number of sample paths to return (default 10).</param>
|
|
/// <returns>A sample paths DTO, or null if the request failed.</returns>
|
|
public async Task<FolderSamplePathsDto?> GetSamplePathsAsync(Guid folderId, int count = 10) {
|
|
var response = await Client.GetAsync($"/api/folder/{folderId}/sample-paths?count={count}");
|
|
|
|
if (response.IsSuccessStatusCode) return await response.Content.ReadFromJsonAsync<FolderSamplePathsDto>();
|
|
|
|
return null;
|
|
}
|
|
}
|