< Summary

Information
Class: LGDXRobotCloud.API.Areas.Administration.Controllers.UsersController
Assembly: LGDXRobotCloud.API
File(s): /builds/yukaitung/lgdxrobot2-cloud/LGDXRobotCloud.API/Areas/Administration/Controllers/UsersController.cs
Line coverage
0%
Covered lines: 0
Uncovered lines: 33
Coverable lines: 33
Total lines: 89
Line coverage: 0%
Branch coverage
0%
Covered branches: 0
Total branches: 6
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(...)0%2040%
GetUsers()0%620%
GetUser()100%210%
CreateUser()100%210%
UpdateUser()100%210%
UnlockUser()100%210%
DeleteUser()0%620%

File(s)

/builds/yukaitung/lgdxrobot2-cloud/LGDXRobotCloud.API/Areas/Administration/Controllers/UsersController.cs

#LineLine coverage
 1using LGDXRobotCloud.API.Authorisation;
 2using LGDXRobotCloud.API.Configurations;
 3using LGDXRobotCloud.API.Services.Administration;
 4using LGDXRobotCloud.Data.Models.Business.Administration;
 5using LGDXRobotCloud.Data.Models.DTOs.V1.Commands;
 6using LGDXRobotCloud.Data.Models.DTOs.V1.Responses;
 7using LGDXRobotCloud.Utilities.Constants;
 8using Microsoft.AspNetCore.Authentication.JwtBearer;
 9using Microsoft.AspNetCore.Authorization;
 10using Microsoft.AspNetCore.Mvc;
 11using Microsoft.Extensions.Options;
 12using System.Security.Claims;
 13using System.Text.Json;
 14
 15namespace LGDXRobotCloud.API.Areas.Administration.Controllers;
 16
 17[ApiController]
 18[Area("Administration")]
 19[Route("[area]/[controller]")]
 20[Authorize(AuthenticationSchemes = LgdxRobotCloudAuthenticationSchemes.ApiKeyOrCertificationScheme)]
 21[Authorize(AuthenticationSchemes = JwtBearerDefaults.AuthenticationScheme)]
 22[ValidateLgdxUserAccess]
 023public class UsersController(
 024    IOptionsSnapshot<LgdxRobotCloudConfiguration> lgdxRobotCloudConfiguration,
 025    IUserService userService
 026  ) : ControllerBase
 27{
 028  private readonly LgdxRobotCloudConfiguration _lgdxRobotCloudConfiguration = lgdxRobotCloudConfiguration.Value ?? throw
 029  private readonly IUserService _userService = userService ?? throw new ArgumentNullException(nameof(userService));
 30
 31  [HttpGet("")]
 32  [ProducesResponseType(typeof(IEnumerable<LgdxUserListDto>), StatusCodes.Status200OK)]
 33  public async Task<ActionResult<IEnumerable<LgdxUserListDto>>> GetUsers(string? name, int pageNumber = 1, int pageSize 
 034  {
 035    pageSize = (pageSize > _lgdxRobotCloudConfiguration.ApiMaxPageSize) ? _lgdxRobotCloudConfiguration.ApiMaxPageSize : 
 036    var (users, PaginationHelper) = await _userService.GetUsersAsync(name, pageNumber, pageSize);
 037    Response.Headers.Append("X-Pagination", JsonSerializer.Serialize(PaginationHelper));
 038    return Ok(users.ToDto());
 039  }
 40
 41  [HttpGet("{id}", Name = "GetUser")]
 42  [ProducesResponseType(typeof(LgdxUserDto), StatusCodes.Status200OK)]
 43  [ProducesResponseType(StatusCodes.Status404NotFound)]
 44  public async Task<ActionResult<LgdxUserDto>> GetUser(Guid id)
 045  {
 046    var user = await _userService.GetUserAsync(id);
 047    return Ok(user.ToDto());
 048  }
 49
 50  [HttpPost("")]
 51  [ProducesResponseType(typeof(LgdxUserDto), StatusCodes.Status201Created)]
 52  [ProducesResponseType(typeof(ValidationProblemDetails), StatusCodes.Status400BadRequest)]
 53  public async Task<ActionResult> CreateUser(LgdxUserCreateAdminDto lgdxUserCreateAdminDto)
 054  {
 055    var user = await _userService.CreateUserAsync(lgdxUserCreateAdminDto.ToBusinessModel());
 056    return CreatedAtAction(nameof(GetUser), new { id = user.Id }, user.ToDto());
 057  }
 58
 59  [HttpPut("{id}")]
 60  [ProducesResponseType(StatusCodes.Status204NoContent)]
 61  [ProducesResponseType(typeof(ValidationProblemDetails), StatusCodes.Status400BadRequest)]
 62  [ProducesResponseType(StatusCodes.Status404NotFound)]
 63  public async Task<ActionResult> UpdateUser(Guid id, LgdxUserUpdateAdminDto lgdxUserUpdateAdminDto)
 064  {
 065    await _userService.UpdateUserAsync(id, lgdxUserUpdateAdminDto.ToBusinessModel());
 066    return NoContent();
 067  }
 68
 69  [HttpPatch("{id}/Unlock")]
 70  [ProducesResponseType(StatusCodes.Status204NoContent)]
 71  [ProducesResponseType(typeof(ValidationProblemDetails), StatusCodes.Status400BadRequest)]
 72  [ProducesResponseType(StatusCodes.Status404NotFound)]
 73  public async Task<ActionResult> UnlockUser(Guid id)
 074  {
 075    await _userService.UnlockUserAsync(id);
 076    return NoContent();
 077  }
 78
 79  [HttpDelete("{id}")]
 80  [ProducesResponseType(StatusCodes.Status204NoContent)]
 81  [ProducesResponseType(typeof(ValidationProblemDetails), StatusCodes.Status400BadRequest)]
 82  [ProducesResponseType(StatusCodes.Status404NotFound)]
 83  public async Task<ActionResult> DeleteUser(Guid id)
 084  {
 085    var operatorId = User.Claims.FirstOrDefault(c => c.Type == ClaimTypes.NameIdentifier)?.Value;
 086    await _userService.DeleteUserAsync(id, operatorId!);
 087    return NoContent();
 088  }
 89}