< Summary

Class:SVETA.Api.Controllers.UsersController
Assembly:SVETA.Api
File(s):/opt/dev/sveta_api_build/SVETA.Api/Controllers/UsersController.cs
Covered lines:0
Uncovered lines:49
Coverable lines:49
Total lines:163
Line coverage:0% (0 of 49)
Covered branches:0
Total branches:22
Branch coverage:0% (0 of 22)

Metrics

MethodLine coverage Branch coverage
.ctor(...)0%100%
GetUsers()0%0%
GetUsersCount()0%0%
GetUser()0%0%

File(s)

/opt/dev/sveta_api_build/SVETA.Api/Controllers/UsersController.cs

#LineLine coverage
 1using Microsoft.AspNetCore.Authorization;
 2using Microsoft.AspNetCore.Mvc;
 3using Microsoft.Extensions.Logging;
 4using SVETA.Api.Data.DTO;
 5using SVETA.Api.Helpers.Authorize;
 6using Swashbuckle.AspNetCore.Annotations;
 7using System;
 8using SVETA.Api.Data.Domain;
 9using System.Collections.Generic;
 10using System.Linq;
 11using SVETA.Api.Services.Interfaces;
 12using Microsoft.Extensions.Options;
 13using System.Threading.Tasks;
 14using WinSolutions.Sveta.Common;
 15using WinSolutions.Sveta.Server.Data.DataModel.Entities;
 16using WinSolutions.Sveta.Server.Data.DataModel.Kinds;
 17using WinSolutions.Sveta.Server.Domain;
 18using WinSolutions.Sveta.Server.Services.Interfaces;
 19using Microsoft.Extensions.Configuration;
 20using Microsoft.AspNetCore.Hosting;
 21using WinSolutions.Sveta.Common.Extensions;
 22
 23namespace SVETA.Api.Controllers
 24{
 25    [Authorize]
 26    [Route("api/v1/Users")]
 27    [ApiController]
 28    public class UsersController : SvetaController
 29    {
 30        const string _routeUrl = "api/v1/Users";
 31        readonly IUserService _service;
 32        readonly IContragentService _contrService;
 33        readonly IAuthenticationService _authService;
 34        private readonly ICrmSyncWorker _crmSyncWorker;
 35        readonly IControlsAccessService _accessService;
 36        readonly IDirectoriesService _dirService;
 37        private readonly CrmSettings _crmSettings;
 38        readonly ILogger<UsersController> _logger;
 39        readonly IConfiguration _config;
 40        private readonly IWebHostEnvironment _env;
 41
 42        public UsersController(IUserService service, IContragentService contrService, ICrmSyncWorker crmSyncWorker, IOpt
 043            IAuthenticationService authService, IConfiguration config, ILogger<UsersController> logger, IWebHostEnvironm
 044        {
 045            _accessService = accessService;
 046            _authService = authService;
 047            _dirService = dirService;
 048            _contrService = contrService;
 049            _crmSettings = optionsCrm.Value;
 050            _crmSyncWorker = crmSyncWorker;
 051            _config=config;
 052            _service = service;
 053            _logger = logger;
 054            _env = env;
 055        }
 56
 57        /// <summary>
 58        /// Возвращает текущего пользователя с атрибутами и контр агентом
 59        /// </summary>
 60        /// <remarks>author nko</remarks>
 61        [HttpGet("WhoAmI")]
 62        [SwaggerResponse(200, "Успешно", typeof(WhoAmIDTO))]
 63        [SwaggerResponse(500, "Ошибка на стороне сервера", typeof(ErrorDTO))]
 64        [AllowAnonymous]
 65        public async Task<IActionResult> WhoAmI()
 66        {
 67            var user =  await _service.WhoAmI(_authService.UserId);
 068            var accesses = (await _accessService.GetAvailableAccesses()).Where(x => _authService.Roles.Any(p => p.ToLowe
 69            var result = new WhoAmIDTO(user);
 070            result.Can.AddRange(accesses.Select(x => x.Action.Name));
 71            result.Roles = _authService.Roles;
 72            result.Version = _config.GetValue("API_VERSION","0.0");// Environment.GetEnvironmentVariable("svetaConnectio
 73            result.Confirmed = _authService.Confirmed();
 74            result.Registered = _authService.Register();
 75            result.CompanyAssigned = _authService.CompanyAssigned();
 76            result.Environment = _env.EnvironmentName;
 77            return Ok(result);
 78        }
 79
 80        /// <summary>
 81        /// Возвращает всех пользователей на основе id контрагента, роли с фильтром по значимым полям  и сортировкой
 82        /// </summary>
 83        /// <remarks>author i.rebenok</remarks>
 84        /// <param name="page">Любое значение ниже нуля изменится на 1, пагинация: номер страницы</param>
 85        /// <param name="limit">Любое значение ниже нуля изменится на 10, пагинация: размер страницы</param>
 86        /// <param name="filter">фильтр по значимым полям: email, номер телефона, фамилия</param>
 87        /// <param name="sort">сортировать по firstName,firstName|desc, lastName,lastName|desc,  login,login|desc, По ум
 88        /// <param name="contragentId">id контрагента. Если 0, то всех юзеров выводить, если >0,то только по этому контр
 89        /// <param name="roleId">НЕ ИСПОЛЬЗОВАТЬ. id роли. если 0 (по умолчанию), то возвращать по всем ролям</param>
 90        /// <param name="blocked">НЕ ИСПОЛЬЗОВАТЬ. Выводить заблокированных - true or false</param>
 91        [HttpGet("")]
 92        [SwaggerResponse(200, "Успешно", typeof(BaseResponseDTO<UsersResponseDTO>))]
 93        [SwaggerResponse(500, "Ошибка на стороне сервера", typeof(string))]
 94        [SwaggerResponse(403, "Не разрешено для этого пользователя", typeof(ErrorDTO))]
 95        [Authorize (Roles = Role.SystemAdmin + "," + Role.SystemOperator + "," +Role.SupplierOwner + "," +Role.SupplierO
 96        public async Task<IActionResult> GetUsers(int page = 1, int limit = 10, string filter = null, string sort = "", 
 097        {
 098            filter = filter.NormalizeName();
 099            page = page < 1 ? 1 : page;
 0100            limit = limit < 1 ? 10 : limit;
 0101            contragentId = _authService.IsUserPlatform() ? contragentId : _authService.ContragentId;
 102            //делаем отдельный трай на это, так как в случае эксепшена нам не надо прерывать выполнение метода. Мы прост
 103            try
 0104            {
 0105                await _crmSyncWorker.SyncAllUsersByContragent(contragentId);
 0106            }
 0107            catch (Exception ex)
 0108            {
 0109                _logger.LogError("Ошибка синхронизации с CRM. " + ex.Message);
 0110            }
 0111            var result = await _service.GetUsers(page - 1, limit, filter, sort, contragentId);
 0112            var param = $"contragentId={contragentId}&roleId={roleId}&blocked={blocked}";
 0113            var response = new BaseResponseDTO<UsersResponseDTO>(_routeUrl, page, limit, result.TotalFilteredCount, resu
 0114            {
 0115                Data = result.Result.Select(x => new UsersResponseDTO(x)).ToList()
 0116            };
 0117            return Ok(response);
 0118        }
 119
 120        /// <summary>
 121        /// Возвращает количество всех пользоватлей на основе  id контрагента, роли с фильтром по значимым полям
 122        /// </summary>
 123        /// <remarks>author i.rebenok</remarks>
 124        /// <param name="filter">фильтр по значимым полям: email, номер телефона, фамилия</param>
 125        /// <param name="contragentId"> id контрагента. Если 0, то всех юзеров выводить, если >0,то только по этому конт
 126        /// <param name="roleId">НЕ ИСПОЛЬЗОВАТЬ.id роли. если 0(по умолчанию), то возвращать по всем ролям</param>[Http
 127        /// <param name="blocked">НЕ ИСПОЛЬЗОВАТЬ.Выводить заблокированных - true (по умолчанию) or false</param>[Swagge
 128        [HttpGet("Count")]
 129        [SwaggerResponse(200, "Успешно", typeof(CountDTO))]
 130        [SwaggerResponse(500, "Ошибка на стороне сервера", typeof(ErrorDTO))]
 131        [SwaggerResponse(403, "Не разрешено для этого пользователя", typeof(ErrorDTO))]
 132        [Authorize(Roles = Role.SystemAdmin + "," + Role.SystemOperator + "," + Role.SupplierOwner + "," + Role.Supplier
 133        public async Task<IActionResult> GetUsersCount(string filter = null, long contragentId = 0, long roleId = 0, boo
 0134        {
 0135            filter = filter.NormalizeName();
 0136            contragentId = _authService.IsUserPlatform() ? contragentId : _authService.ContragentId;
 0137            int result = await Task.FromResult(_service.GetUsers(1, 1, filter, "login", contragentId).Result.TotalFilter
 0138            return Ok(new CountDTO(result));
 0139        }
 140
 141        /// <summary>
 142        /// Получить юзера по ID
 143        /// </summary>
 144        /// <remarks>author i.rebenok</remarks>
 145        /// <param name="id">id юзера</param>
 146        //[MethodAuthorize("GetUser")]
 147        [HttpGet("{id}")]
 148        [SwaggerResponse(200, "Успешно", typeof(UserResponseDTO))]
 149        [SwaggerResponse(404, "Нет записей", typeof(ErrorDTO))]
 150        [SwaggerResponse(403, "Не разрешено для этого пользователя", typeof(ErrorDTO))]
 151        [SwaggerResponse(500, "Ошибка на стороне сервера", typeof(ErrorDTO))]
 152        // [Authorize(Roles = Role.SystemAdmin + "," + Role.SystemOperator + "," + Role.SupplierOwner + "," + Role.Suppl
 153        public async Task<IActionResult> GetUser([SwaggerParameter(Required = true)] long id)
 0154        {
 0155            if (!_authService.IsUserPlatform() && _authService.UserId != id)
 0156                return NotFoundResult($"Пользователь с id={id} не найден");
 0157            var result = await _service.GetUser(id);
 0158            if (result == null)
 0159                return NotFoundResult($"Пользователь с id={id} не найден");
 0160            return Ok(new UserResponseDTO(result));
 0161        }
 162    }
 163}