< Summary

Information
Class: Chronicis.Client.Services.CampaignApiService
Assembly: Chronicis.Client
File(s): /home/runner/work/chronicis/chronicis/src/Chronicis.Client/Services/CampaignApiService.cs
Line coverage
100%
Covered lines: 3
Uncovered lines: 0
Coverable lines: 3
Total lines: 67
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/CampaignApiService.cs

#LineLine coverage
 1using Chronicis.Shared.DTOs;
 2
 3namespace Chronicis.Client.Services;
 4
 5/// <summary>
 6/// Service for Campaign API operations.
 7/// Uses HttpClientExtensions for consistent error handling and logging.
 8/// </summary>
 9public class CampaignApiService : ICampaignApiService
 10{
 11    private readonly HttpClient _http;
 12    private readonly ILogger<CampaignApiService> _logger;
 13
 14    public CampaignApiService(HttpClient http, ILogger<CampaignApiService> logger)
 15    {
 216        _http = http;
 217        _logger = logger;
 218    }
 19
 20    public async Task<CampaignDetailDto?> GetCampaignAsync(Guid campaignId)
 21    {
 22        return await _http.GetEntityAsync<CampaignDetailDto>(
 23            $"campaigns/{campaignId}",
 24            _logger,
 25            $"campaign {campaignId}");
 26    }
 27
 28    public async Task<CampaignDto?> CreateCampaignAsync(CampaignCreateDto dto)
 29    {
 30        return await _http.PostEntityAsync<CampaignDto>(
 31            "campaigns",
 32            dto,
 33            _logger,
 34            "campaign");
 35    }
 36
 37    public async Task<CampaignDto?> UpdateCampaignAsync(Guid campaignId, CampaignUpdateDto dto)
 38    {
 39        return await _http.PutEntityAsync<CampaignDto>(
 40            $"campaigns/{campaignId}",
 41            dto,
 42            _logger,
 43            $"campaign {campaignId}");
 44    }
 45
 46    public async Task<bool> ActivateCampaignAsync(Guid campaignId)
 47    {
 48        try
 49        {
 50            var response = await _http.PostAsync($"campaigns/{campaignId}/activate", null);
 51            return response.IsSuccessStatusCode;
 52        }
 53        catch (Exception ex)
 54        {
 55            _logger.LogError(ex, "Error activating campaign {CampaignId}", campaignId);
 56            return false;
 57        }
 58    }
 59
 60    public async Task<ActiveContextDto?> GetActiveContextAsync(Guid worldId)
 61    {
 62        return await _http.GetEntityAsync<ActiveContextDto>(
 63            $"worlds/{worldId}/active-context",
 64            _logger,
 65            $"active context for world {worldId}");
 66    }
 67}