< Summary

Information
Class: Chronicis.Client.Services.AISummaryApiService
Assembly: Chronicis.Client
File(s): /home/runner/work/chronicis/chronicis/src/Chronicis.Client/Services/AISummaryApiService.cs
Line coverage
0%
Covered lines: 0
Uncovered lines: 75
Coverable lines: 75
Total lines: 151
Line coverage: 0%
Branch coverage
0%
Covered branches: 0
Total branches: 16
Branch coverage: 0%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.ctor(...)100%210%
GetTemplatesAsync()0%620%
GetEstimateAsync()100%210%
GenerateSummaryAsync()0%620%
GetSummaryAsync()100%210%
GetSummaryPreviewAsync()0%4260%
ClearSummaryAsync()100%210%
GetEntitySummaryAsync()100%210%
GetEntityEstimateAsync()100%210%
GenerateEntitySummaryAsync()0%620%
ClearEntitySummaryAsync()100%210%
GetEntityRoute(...)0%2040%

File(s)

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

#LineLine coverage
 1using System.Net.Http.Json;
 2using Chronicis.Shared.DTOs;
 3
 4namespace Chronicis.Client.Services;
 5
 6/// <summary>
 7/// Service for AI Summary API operations.
 8/// Uses HttpClientExtensions for consistent error handling and logging.
 9/// </summary>
 10public class AISummaryApiService : IAISummaryApiService
 11{
 12    private readonly HttpClient _http;
 13    private readonly ILogger<AISummaryApiService> _logger;
 14
 015    public AISummaryApiService(HttpClient http, ILogger<AISummaryApiService> logger)
 16    {
 017        _http = http;
 018        _logger = logger;
 019    }
 20
 21    #region Templates
 22
 23    public async Task<List<SummaryTemplateDto>> GetTemplatesAsync()
 24    {
 025        var result = await _http.GetEntityAsync<List<SummaryTemplateDto>>(
 026            "summary/templates",
 027            _logger,
 028            "summary templates");
 029        return result ?? new List<SummaryTemplateDto>();
 030    }
 31
 32    #endregion
 33
 34    #region Article Summary (existing)
 35
 36    public async Task<SummaryEstimateDto?> GetEstimateAsync(Guid articleId)
 37    {
 038        return await _http.GetEntityAsync<SummaryEstimateDto>(
 039            $"articles/{articleId}/summary/estimate",
 040            _logger,
 041            $"summary estimate for article {articleId}");
 042    }
 43
 44    public async Task<SummaryGenerationDto?> GenerateSummaryAsync(Guid articleId, GenerateSummaryRequestDto? request = n
 45    {
 046        request ??= new GenerateSummaryRequestDto();
 47
 048        return await _http.PostEntityAsync<SummaryGenerationDto>(
 049            $"articles/{articleId}/summary/generate",
 050            request,
 051            _logger,
 052            $"summary generation for article {articleId}");
 053    }
 54
 55    public async Task<ArticleSummaryDto?> GetSummaryAsync(Guid articleId)
 56    {
 057        return await _http.GetEntityAsync<ArticleSummaryDto>(
 058            $"articles/{articleId}/summary",
 059            _logger,
 060            $"summary for article {articleId}");
 061    }
 62
 63    public async Task<SummaryPreviewDto?> GetSummaryPreviewAsync(Guid articleId)
 64    {
 65        try
 66        {
 067            var response = await _http.GetAsync($"articles/{articleId}/summary/preview");
 68
 069            if (response.StatusCode == System.Net.HttpStatusCode.NoContent ||
 070                response.StatusCode == System.Net.HttpStatusCode.NotFound)
 71            {
 072                return null;
 73            }
 74
 075            if (response.IsSuccessStatusCode)
 76            {
 077                return await response.Content.ReadFromJsonAsync<SummaryPreviewDto>();
 78            }
 79
 080            return null;
 81        }
 082        catch (Exception ex)
 83        {
 084            _logger.LogError(ex, "Error getting summary preview for article {ArticleId}", articleId);
 085            return null;
 86        }
 087    }
 88
 89    public async Task<bool> ClearSummaryAsync(Guid articleId)
 90    {
 091        return await _http.DeleteEntityAsync(
 092            $"articles/{articleId}/summary",
 093            _logger,
 094            $"summary for article {articleId}");
 095    }
 96
 97    #endregion
 98
 99    #region Entity Summary (Campaign, Arc)
 100
 101    public async Task<EntitySummaryDto?> GetEntitySummaryAsync(string entityType, Guid entityId)
 102    {
 0103        var route = GetEntityRoute(entityType);
 0104        return await _http.GetEntityAsync<EntitySummaryDto>(
 0105            $"{route}/{entityId}/summary",
 0106            _logger,
 0107            $"summary for {entityType} {entityId}");
 0108    }
 109
 110    public async Task<SummaryEstimateDto?> GetEntityEstimateAsync(string entityType, Guid entityId)
 111    {
 0112        var route = GetEntityRoute(entityType);
 0113        return await _http.GetEntityAsync<SummaryEstimateDto>(
 0114            $"{route}/{entityId}/summary/estimate",
 0115            _logger,
 0116            $"summary estimate for {entityType} {entityId}");
 0117    }
 118
 119    public async Task<SummaryGenerationDto?> GenerateEntitySummaryAsync(string entityType, Guid entityId, GenerateSummar
 120    {
 0121        request ??= new GenerateSummaryRequestDto();
 0122        var route = GetEntityRoute(entityType);
 123
 0124        return await _http.PostEntityAsync<SummaryGenerationDto>(
 0125            $"{route}/{entityId}/summary/generate",
 0126            request,
 0127            _logger,
 0128            $"summary generation for {entityType} {entityId}");
 0129    }
 130
 131    public async Task<bool> ClearEntitySummaryAsync(string entityType, Guid entityId)
 132    {
 0133        var route = GetEntityRoute(entityType);
 0134        return await _http.DeleteEntityAsync(
 0135            $"{route}/{entityId}/summary",
 0136            _logger,
 0137            $"summary for {entityType} {entityId}");
 0138    }
 139
 140    private static string GetEntityRoute(string entityType)
 141    {
 0142        return entityType.ToLowerInvariant() switch
 0143        {
 0144            "campaign" => "campaigns",
 0145            "arc" => "arcs",
 0146            _ => throw new ArgumentException($"Unknown entity type: {entityType}")
 0147        };
 148    }
 149
 150    #endregion
 151}