< Summary

Information
Class: Chronicis.Client.Services.ResourceProviderApiService
Assembly: Chronicis.Client
File(s): /home/runner/work/chronicis/chronicis/src/Chronicis.Client/Services/ResourceProviderApiService.cs
Line coverage
100%
Covered lines: 3
Uncovered lines: 0
Coverable lines: 3
Total lines: 102
Line coverage: 100%
Branch coverage
N/A
Covered branches: 0
Total branches: 0
Branch coverage: N/A
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.ctor(...)100%11100%

File(s)

/home/runner/work/chronicis/chronicis/src/Chronicis.Client/Services/ResourceProviderApiService.cs

#LineLine coverage
 1using System.Net.Http.Json;
 2using Chronicis.Shared.DTOs;
 3
 4namespace Chronicis.Client.Services;
 5
 6/// <summary>
 7/// Service for managing resource providers via the API.
 8/// </summary>
 9public class ResourceProviderApiService : IResourceProviderApiService
 10{
 11    private readonly HttpClient _httpClient;
 12    private readonly ILogger<ResourceProviderApiService> _logger;
 13
 14    public ResourceProviderApiService(
 15        HttpClient httpClient,
 16        ILogger<ResourceProviderApiService> logger)
 17    {
 618        _httpClient = httpClient;
 619        _logger = logger;
 620    }
 21
 22    /// <summary>
 23    /// Gets all resource providers with their enabled status for a specific world.
 24    /// </summary>
 25    /// <param name="worldId">The world ID</param>
 26    /// <returns>List of providers with enabled status</returns>
 27    public async Task<List<WorldResourceProviderDto>?> GetWorldProvidersAsync(Guid worldId)
 28    {
 29        try
 30        {
 31            var response = await _httpClient.GetAsync($"api/worlds/{worldId}/resource-providers");
 32
 33            if (response.IsSuccessStatusCode)
 34            {
 35                return await response.Content.ReadFromJsonAsync<List<WorldResourceProviderDto>>();
 36            }
 37
 38            _logger.LogWarning(
 39                "Failed to get providers for world {WorldId}. Status: {StatusCode}",
 40                worldId,
 41                response.StatusCode);
 42            return null;
 43        }
 44        catch (Exception ex)
 45        {
 46            _logger.LogError(ex, "Error getting providers for world {WorldId}", worldId);
 47            return null;
 48        }
 49    }
 50
 51    /// <summary>
 52    /// Enables or disables a resource provider for a specific world.
 53    /// </summary>
 54    /// <param name="worldId">The world ID</param>
 55    /// <param name="providerCode">The provider code</param>
 56    /// <param name="enabled">Whether to enable or disable</param>
 57    /// <param name="lookupKey">
 58    /// Optional lookup key update. Null means "leave existing value unchanged".
 59    /// Empty/whitespace resets to default (provider code).
 60    /// </param>
 61    /// <returns>True if successful, false otherwise</returns>
 62    public async Task<bool> ToggleProviderAsync(Guid worldId, string providerCode, bool enabled, string? lookupKey = nul
 63    {
 64        try
 65        {
 66            var request = new ToggleResourceProviderRequestDto
 67            {
 68                Enabled = enabled,
 69                LookupKey = lookupKey
 70            };
 71            var response = await _httpClient.PostAsJsonAsync(
 72                $"api/worlds/{worldId}/resource-providers/{providerCode}/toggle",
 73                request);
 74
 75            if (response.IsSuccessStatusCode)
 76            {
 77                _logger.LogDebug(
 78                    "Successfully {Action} provider {ProviderCode} for world {WorldId}",
 79                    enabled ? "enabled" : "disabled",
 80                    providerCode,
 81                    worldId);
 82                return true;
 83            }
 84
 85            _logger.LogWarning(
 86                "Failed to toggle provider {ProviderCode} for world {WorldId}. Status: {StatusCode}",
 87                providerCode,
 88                worldId,
 89                response.StatusCode);
 90            return false;
 91        }
 92        catch (Exception ex)
 93        {
 94            _logger.LogError(
 95                ex,
 96                "Error toggling provider {ProviderCode} for world {WorldId}",
 97                providerCode,
 98                worldId);
 99            return false;
 100        }
 101    }
 102}