< 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
0%
Covered lines: 0
Uncovered lines: 32
Coverable lines: 32
Total lines: 67
Line coverage: 0%
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%210%
GetCampaignAsync()100%210%
CreateCampaignAsync()100%210%
UpdateCampaignAsync()100%210%
ActivateCampaignAsync()100%210%
GetActiveContextAsync()100%210%

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
 014    public CampaignApiService(HttpClient http, ILogger<CampaignApiService> logger)
 15    {
 016        _http = http;
 017        _logger = logger;
 018    }
 19
 20    public async Task<CampaignDetailDto?> GetCampaignAsync(Guid campaignId)
 21    {
 022        return await _http.GetEntityAsync<CampaignDetailDto>(
 023            $"campaigns/{campaignId}",
 024            _logger,
 025            $"campaign {campaignId}");
 026    }
 27
 28    public async Task<CampaignDto?> CreateCampaignAsync(CampaignCreateDto dto)
 29    {
 030        return await _http.PostEntityAsync<CampaignDto>(
 031            "campaigns",
 032            dto,
 033            _logger,
 034            "campaign");
 035    }
 36
 37    public async Task<CampaignDto?> UpdateCampaignAsync(Guid campaignId, CampaignUpdateDto dto)
 38    {
 039        return await _http.PutEntityAsync<CampaignDto>(
 040            $"campaigns/{campaignId}",
 041            dto,
 042            _logger,
 043            $"campaign {campaignId}");
 044    }
 45
 46    public async Task<bool> ActivateCampaignAsync(Guid campaignId)
 47    {
 48        try
 49        {
 050            var response = await _http.PostAsync($"campaigns/{campaignId}/activate", null);
 051            return response.IsSuccessStatusCode;
 52        }
 053        catch (Exception ex)
 54        {
 055            _logger.LogError(ex, "Error activating campaign {CampaignId}", campaignId);
 056            return false;
 57        }
 058    }
 59
 60    public async Task<ActiveContextDto?> GetActiveContextAsync(Guid worldId)
 61    {
 062        return await _http.GetEntityAsync<ActiveContextDto>(
 063            $"worlds/{worldId}/active-context",
 064            _logger,
 065            $"active context for world {worldId}");
 066    }
 67}