< Summary

Information
Class: Despesas.Backend.Controllers.UsuarioController
Assembly: Despesas.Backend
File(s): /src/Despesas.Backend/Controllers/UsuarioController.cs
Line coverage
100%
Covered lines: 39
Uncovered lines: 0
Coverable lines: 39
Total lines: 108
Line coverage: 100%
Branch coverage
75%
Covered branches: 12
Total branches: 16
Branch coverage: 75%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.ctor(...)100%11100%
Get()100%22100%
Post()50%22100%
Put()50%22100%
Delete()50%22100%
GetProfileImage()100%44100%
PutProfileImage()75%44100%

File(s)

/src/Despesas.Backend/Controllers/UsuarioController.cs

#LineLine coverage
 1using Despesas.Application.Abstractions;
 2using Despesas.Application.Dtos;
 3using Despesas.GlobalException.CustomExceptions;
 4using Despesas.GlobalException.CustomExceptions.Core;
 5using Microsoft.AspNetCore.Authorization;
 6using Microsoft.AspNetCore.Mvc;
 7
 8namespace Despesas.Backend.Controllers;
 9
 10public class UsuarioController : AuthController
 11{
 12    private readonly IUsuarioBusiness<UsuarioDto> _usuarioBusiness;
 13
 1214    public UsuarioController(IUsuarioBusiness<UsuarioDto> usuarioBusiness)
 1215    {
 1216        _usuarioBusiness = usuarioBusiness;
 1217    }
 18
 19    [HttpGet]
 20    [Authorize("Bearer", Roles = "User, Admin")]
 21    [ProducesResponseType(200, Type = typeof(UsuarioDto))]
 22    [ProducesResponseType(400, Type = typeof(string))]
 23    [ProducesResponseType(401)]
 24    [ProducesResponseType(403)]
 25    public async Task<IActionResult> Get()
 226    {
 227        var usuario = await _usuarioBusiness.FindById(UserIdentity)
 228            ?? throw new UsuarioNaoEncontradoException();
 129        return Ok(usuario);
 130    }
 31
 32    [HttpPost]
 33    [Authorize("Bearer", Roles = "Admin")]
 34    [ProducesResponseType(200, Type = typeof(UsuarioDto))]
 35    [ProducesResponseType(400, Type = typeof(string))]
 36    [ProducesResponseType(401)]
 37    [ProducesResponseType(403)]
 38    public async Task<IActionResult> Post([FromBody] UsuarioDto usuarioDto)
 239    {
 240        usuarioDto.UsuarioId = UserIdentity;
 241        usuarioDto = await _usuarioBusiness.Create(usuarioDto)
 242            ?? throw new CustomException("Erro ao cadastrar Usuário!");
 143        return Ok(usuarioDto);
 144    }
 45
 46    [HttpPut]
 47    [Authorize("Bearer", Roles = "User, Admin")]
 48    [ProducesResponseType(200, Type = typeof(UsuarioDto))]
 49    [ProducesResponseType(400, Type = typeof(string))]
 50    [ProducesResponseType(401)]
 51    [ProducesResponseType(403)]
 52    public async Task<IActionResult> Put([FromBody] UsuarioDto usuarioDto)
 253    {
 254        usuarioDto.UsuarioId = UserIdentity;
 255        usuarioDto = await _usuarioBusiness.Update(usuarioDto)
 256            ?? throw new CustomException("Erro ao atualizar dados pessoais do usuário!");
 157        return Ok(usuarioDto);
 158    }
 59
 60    [HttpDelete]
 61    [Authorize("Bearer", Roles = "Admin")]
 62    [ProducesResponseType(200, Type = typeof(bool))]
 63    [ProducesResponseType(400, Type = typeof(string))]
 64    [ProducesResponseType(401)]
 65    [ProducesResponseType(403)]
 66    public async Task<IActionResult> Delete([FromBody] UsuarioDto usuarioDto)
 267    {
 268        usuarioDto.UsuarioId = UserIdentity;
 269        return await _usuarioBusiness.Delete(usuarioDto)
 270            ? Ok(true)
 271            : BadRequest("Erro ao excluir Usuário!");
 172    }
 73
 74    [HttpGet("GetProfileImage")]
 75    [Authorize("Bearer", Roles = "User, Admin")]
 76    [ProducesResponseType(StatusCodes.Status200OK)]
 77    [ProducesResponseType(StatusCodes.Status204NoContent)]
 78    [ProducesResponseType(400, Type = typeof(string))]
 79    [ProducesResponseType(401)]
 80    [ProducesResponseType(403)]
 81    public async Task<IActionResult> GetProfileImage()
 282    {
 283        var image = await _usuarioBusiness.GetProfileImage(UserIdentity);
 84
 285        if (image == null || image.Length == 0)
 186            return NoContent();
 87
 188        return File(image, "image/png");
 289    }
 90
 91    [HttpPut("UpdateProfileImage")]
 92    [Authorize("Bearer", Roles = "User, Admin")]
 93    [ProducesResponseType(StatusCodes.Status200OK)]
 94    [ProducesResponseType(StatusCodes.Status204NoContent)]
 95    [ProducesResponseType(400, Type = typeof(string))]
 96    [ProducesResponseType(401)]
 97    [ProducesResponseType(403)]
 98    public async Task<IActionResult> PutProfileImage(IFormFile file)
 299    {
 2100        var image = await _usuarioBusiness.UpdateProfileImage(UserIdentity, file);
 101
 2102        if (image == null || image.Length == 0)
 1103            return NoContent();
 104
 1105        return File(image, file.ContentType);
 2106    }
 107
 108}