< Summary

Information
Class: Chronicis.Api.Controllers.SearchController
Assembly: Chronicis.Api
File(s): /home/runner/work/chronicis/chronicis/src/Chronicis.Api/Controllers/SearchController.cs
Line coverage
100%
Covered lines: 8
Uncovered lines: 0
Coverable lines: 8
Total lines: 43
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.Api/Controllers/SearchController.cs

#LineLine coverage
 1using Chronicis.Api.Infrastructure;
 2using Chronicis.Api.Services;
 3using Chronicis.Shared.DTOs;
 4using Microsoft.AspNetCore.Authorization;
 5using Microsoft.AspNetCore.Mvc;
 6
 7namespace Chronicis.Api.Controllers;
 8
 9/// <summary>
 10/// API endpoints for Global Search operations.
 11/// </summary>
 12[ApiController]
 13[Route("search")]
 14[Authorize]
 15public class SearchController : ControllerBase
 16{
 17    private readonly ISearchReadService _searchReadService;
 18    private readonly ICurrentUserService _currentUserService;
 19    private readonly ILogger<SearchController> _logger;
 20
 221    public SearchController(
 222        ISearchReadService searchReadService,
 223        ICurrentUserService currentUserService,
 224        ILogger<SearchController> logger)
 25    {
 226        _searchReadService = searchReadService;
 227        _currentUserService = currentUserService;
 228        _logger = logger;
 229    }
 30
 31    /// <summary>
 32    /// GET /api/search?query={query}
 33    /// Searches across all article content the user has access to.
 34    /// </summary>
 35    [HttpGet]
 36    public async Task<ActionResult<GlobalSearchResultsDto>> Search([FromQuery] string query)
 37    {
 38        var user = await _currentUserService.GetRequiredUserAsync();
 39        _logger.LogTraceSanitized("Searching for '{Query}' for user {UserId}", query, user.Id);
 40        var response = await _searchReadService.SearchAsync(query, user.Id);
 41        return Ok(response);
 42    }
 43}