< 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
100%
Covered lines: 8
Uncovered lines: 0
Coverable lines: 8
Total lines: 68
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/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
 121    public UsersController(
 122        IUserService userService,
 123        ICurrentUserService currentUserService,
 124        ILogger<UsersController> logger)
 25    {
 126        _userService = userService;
 127        _currentUserService = currentUserService;
 128        _logger = logger;
 129    }
 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    {
 37        var user = await _currentUserService.GetRequiredUserAsync();
 38        _logger.LogTraceSanitized("Getting profile for user {UserId}", user.Id);
 39
 40        var profile = await _userService.GetUserProfileAsync(user.Id);
 41
 42        if (profile == null)
 43        {
 44            return NotFound(new { error = "User profile not found" });
 45        }
 46
 47        return Ok(profile);
 48    }
 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    {
 56        var user = await _currentUserService.GetRequiredUserAsync();
 57        _logger.LogTraceSanitized("Completing onboarding for user {UserId}", user.Id);
 58
 59        var success = await _userService.CompleteOnboardingAsync(user.Id);
 60
 61        if (!success)
 62        {
 63            return BadRequest(new { error = "Failed to complete onboarding" });
 64        }
 65
 66        return NoContent();
 67    }
 68}