< Summary

Information
Class: Chronicis.Api.Controllers.UsersController
Assembly: Chronicis.Api
File(s): /home/runner/work/chronicis/chronicis/src/Chronicis.Api/Controllers/UsersController.cs
Line coverage
0%
Covered lines: 0
Uncovered lines: 22
Coverable lines: 22
Total lines: 68
Line coverage: 0%
Branch coverage
0%
Covered branches: 0
Total branches: 4
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%
GetCurrentUserProfile()0%620%
CompleteOnboarding()0%620%

File(s)

/home/runner/work/chronicis/chronicis/src/Chronicis.Api/Controllers/UsersController.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 User profile management.
 11/// </summary>
 12[ApiController]
 13[Route("users")]
 14[Authorize]
 15public class UsersController : ControllerBase
 16{
 17    private readonly IUserService _userService;
 18    private readonly ICurrentUserService _currentUserService;
 19    private readonly ILogger<UsersController> _logger;
 20
 021    public UsersController(
 022        IUserService userService,
 023        ICurrentUserService currentUserService,
 024        ILogger<UsersController> logger)
 25    {
 026        _userService = userService;
 027        _currentUserService = currentUserService;
 028        _logger = logger;
 029    }
 30
 31    /// <summary>
 32    /// GET /api/users/me - Get the current user's profile.
 33    /// </summary>
 34    [HttpGet("me")]
 35    public async Task<ActionResult<UserProfileDto>> GetCurrentUserProfile()
 36    {
 037        var user = await _currentUserService.GetRequiredUserAsync();
 038        _logger.LogDebug("Getting profile for user {UserId}", user.Id);
 39
 040        var profile = await _userService.GetUserProfileAsync(user.Id);
 41
 042        if (profile == null)
 43        {
 044            return NotFound(new { error = "User profile not found" });
 45        }
 46
 047        return Ok(profile);
 048    }
 49
 50    /// <summary>
 51    /// POST /api/users/me/complete-onboarding - Mark onboarding as complete.
 52    /// </summary>
 53    [HttpPost("me/complete-onboarding")]
 54    public async Task<IActionResult> CompleteOnboarding()
 55    {
 056        var user = await _currentUserService.GetRequiredUserAsync();
 057        _logger.LogDebug("Completing onboarding for user {UserId}", user.Id);
 58
 059        var success = await _userService.CompleteOnboardingAsync(user.Id);
 60
 061        if (!success)
 62        {
 063            return BadRequest(new { error = "Failed to complete onboarding" });
 64        }
 65
 066        return NoContent();
 067    }
 68}