admin: add common-code crud and business-day rules

This commit is contained in:
2026-07-02 10:27:57 +09:00
parent df4c555dd1
commit 1839c2c3d1
17 changed files with 628 additions and 170 deletions
@@ -10,8 +10,12 @@ using Microsoft.Extensions.Logging;
public interface ICommonCodeBrowserClient
{
Task<List<string>> GetGroupsAsync(CancellationToken ct = default);
Task<List<CommonCode>> GetAllActiveAsync(CancellationToken ct = default);
Task<List<CommonCode>> GetByGroupAsync(string group, CancellationToken ct = default);
Task<CommonCode?> GetAsync(string group, string value, CancellationToken ct = default);
Task<bool> UpsertAsync(CommonCode code, CancellationToken ct = default);
Task<bool> DeleteAsync(string group, string value, CancellationToken ct = default);
}
public class CommonCodeBrowserClient(HttpClient httpClient, ITokenStore tokenStore, ILogger<CommonCodeBrowserClient> logger) : ICommonCodeBrowserClient
@@ -53,4 +57,62 @@ public class CommonCodeBrowserClient(HttpClient httpClient, ITokenStore tokenSto
return [];
}
}
public async Task<List<string>> GetGroupsAsync(CancellationToken ct = default)
{
try
{
EnsureAuthHeader();
return await httpClient.GetFromJsonAsync<List<string>>($"{BaseUrl}/groups", ct) ?? [];
}
catch (Exception ex)
{
logger.LogError(ex, "Failed to get common code groups");
return [];
}
}
public async Task<CommonCode?> GetAsync(string group, string value, CancellationToken ct = default)
{
try
{
EnsureAuthHeader();
return await httpClient.GetFromJsonAsync<CommonCode>($"{BaseUrl}/{group}/{value}", ct);
}
catch (Exception ex)
{
logger.LogError(ex, "Failed to get common code {Group}/{Value}", group, value);
return null;
}
}
public async Task<bool> UpsertAsync(CommonCode code, CancellationToken ct = default)
{
try
{
EnsureAuthHeader();
var response = await httpClient.PostAsJsonAsync(BaseUrl, code, ct);
return response.IsSuccessStatusCode;
}
catch (Exception ex)
{
logger.LogError(ex, "Failed to upsert common code {Group}/{Value}", code.CodeGroup, code.CodeValue);
return false;
}
}
public async Task<bool> DeleteAsync(string group, string value, CancellationToken ct = default)
{
try
{
EnsureAuthHeader();
var response = await httpClient.DeleteAsync($"{BaseUrl}/{group}/{value}", ct);
return response.IsSuccessStatusCode;
}
catch (Exception ex)
{
logger.LogError(ex, "Failed to delete common code {Group}/{Value}", group, value);
return false;
}
}
}