< Summary

Class:SVETA.Api.Controllers.ControlAccessController
Assembly:SVETA.Api
File(s):/opt/dev/sveta_api_build/SVETA.Api/Controllers/ControlAccessController.cs
Covered lines:0
Uncovered lines:76
Coverable lines:76
Total lines:199
Line coverage:0% (0 of 76)
Covered branches:0
Total branches:30
Branch coverage:0% (0 of 30)

Metrics

MethodLine coverage Branch coverage
.ctor(...)0%100%
GetAccesses()0%0%
GetAccessesCount()0%100%
GetAccess()0%0%
CreateAccess()0%0%
UpdateAccess()0%0%
DeleteAccess()0%100%

File(s)

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

#LineLine coverage
 1using WinSolutions.Sveta.Common.Extensions;
 2using System;
 3using System.Collections.Generic;
 4using System.Linq;
 5using System.Threading.Tasks;
 6using Microsoft.AspNetCore.Mvc;
 7using Microsoft.Extensions.Logging;
 8using WinSolutions.Sveta.Server.Data.DataModel.Entities;
 9using Microsoft.AspNetCore.Authorization;
 10using SVETA.Api.Data.Domain;
 11using WinSolutions.Sveta.Server.Services.Interfaces;
 12using SVETA.Api.Data.DTO;
 13using SVETA.Api.Helpers.Authorize;
 14using WinSolutions.Sveta.Server.Data.DataModel.Kinds;
 15using Swashbuckle.AspNetCore.Annotations;
 16using WinSolutions.Sveta.Server.Domain;
 17using WinSolutions.Sveta.Common;
 18
 19
 20namespace SVETA.Api.Controllers
 21{
 22    [Authorize]
 23    [Route("api/v1/ControlAccess")]
 24    [ApiController]
 25    public class ControlAccessController : SvetaController
 26    {
 27        const string _routeUrl = "api/v1/ControlAccess";
 28        readonly IControlsAccessService _service;
 29        readonly IUserService _userService;
 30        readonly IAuthenticationService _authUserService;
 31        readonly IDirectoriesService _dirService;
 32        readonly ILogger<ControlAccessController> _logger;
 33        public ControlAccessController(IControlsAccessService service, IDirectoriesService dirService, IUserService user
 034            ILogger<ControlAccessController> logger) : base(logger)
 035        {
 036            _service = service;
 037            _authUserService = authUserService;
 038            _userService = userService;
 039            _dirService = dirService;
 040            _logger = logger;
 041        }
 42
 43        /// <summary>
 44        /// Возвращает разрешенные действия для роли
 45        /// </summary>
 46        /// <remarks>author i.rebenok</remarks>
 47        /// <param name="page">Любое значение ниже нуля изменится на 1, пагинация: номер страницы</param>
 48        /// <param name="limit">Любое значение ниже нуля изменится на 10, пагинация: размер страницы</param>
 49        /// <param name="sort">сортировка по одному из полей
 50        /// по action|desc, available,available|desc, roleid,roleid|desc. Сортировка по умолчанию по action</param>
 51        /// <param name="filter">Поиск по идентификатору действия или роли пользователя</param>
 52        [HttpGet("")]
 53        [SwaggerResponse(200, "Успешно", typeof(BaseResponseDTO<ControlAccessResponseDTO>))]
 54        [SwaggerResponse(500, "Ошибка на стороне сервера", typeof(ErrorDTO))]
 55        [SwaggerResponse(403, "Не разрешено для этого пользователя", typeof(ErrorDTO))]
 56        [Authorize (Roles = Role.SystemAdmin + "," + Role.SystemOperator)]
 57        public async Task<IActionResult> GetAccesses(int page = 1, int limit = 10, string sort = default, string filter 
 058        {
 059            filter = filter.NormalizeName();
 060            page = page < 1 ? 1 : page;
 061            limit = limit < 1 ? 10 : limit;
 062            var result = await _service.GetAccesses(page - 1, limit, sort, filter);
 063            var param = $"sort={sort}";
 064            var response = new BaseResponseDTO<ControlAccessResponseDTO>(_routeUrl, page, limit, result.TotalFilteredCou
 065            {
 066                Data = result.Result.Select(x => new ControlAccessResponseDTO(x)).ToList(),
 067            };
 068            return Ok(response);
 069        }
 70
 71        /// <summary>
 72        /// Возвращает количество записей
 73        /// </summary>
 74        /// <remarks>author i.rebenok</remarks>
 75        /// <param name="sort">сортировка по одному из полей
 76        /// по action|desc, available,available|desc, roleid,roleid|desc. Сортировка по умолчанию по action</param>
 77        /// <param name="filter">Поиск по идентификатору род страницы или роли пользователя</param>
 78        [HttpGet("Count")]
 79        [SwaggerResponse(200, "Успешно", typeof(CountDTO))]
 80        [SwaggerResponse(500, "Ошибка на стороне сервера", typeof(ErrorDTO))]
 81        [SwaggerResponse(403, "Не разрешено для этого пользователя", typeof(ErrorDTO))]
 82        [Authorize(Roles = Role.SystemAdmin + "," + Role.SystemOperator)]
 83        public async Task<IActionResult> GetAccessesCount(string sort = default, string filter = null)
 084        {
 085            filter = filter.NormalizeName();
 086            int result = await Task.FromResult(_service.GetAccesses(1, 1, sort, filter).Result.TotalFilteredCount);
 087            return Ok(new CountDTO(result));
 088        }
 89
 90        /// <summary>
 91        /// Возвращает разрешения для роли по id записи
 92        /// </summary>
 93        /// <remarks>author i.rebenok</remarks>
 94        /// <param name="id">Идентификатор записи в БД</param>
 95        [HttpGet("{id}")]
 96        [SwaggerResponse(200, "Успешно", typeof(IEnumerable<ControlAccessResponseDTO>))]
 97        [SwaggerResponse(500, "Ошибка на стороне сервера", typeof(ErrorDTO))]
 98        [SwaggerResponse(403, "Не разрешено для этого пользователя", typeof(ErrorDTO))]
 99        [Authorize(Roles = Role.SystemAdmin + "," + Role.SystemOperator)]
 100        public async Task<IActionResult> GetAccess([SwaggerParameter(Required = true)] long id)
 0101        {
 0102            var result = await _service.GetAccess(id);
 0103            if (result == null)
 0104                return NotFoundResult($"Запись с id={id} не найдена");
 0105            return Ok(new ControlAccessResponseDTO(result));
 0106        }
 107
 108        /// <summary>
 109        /// Создает разрешение для роли
 110        /// </summary>
 111        /// <remarks>author i.rebenok</remarks>
 112        /// <param name="data">ControlAccessRequestDTO</param>
 113        [HttpPost("")]
 114        [SwaggerResponse(201, "Успешно создано", typeof(ControlAccessResponseDTO))]
 115        [SwaggerResponse(404, "Нет записей", typeof(ErrorDTO))]
 116        [SwaggerResponse(500, "Ошибка на стороне сервера", typeof(ErrorDTO))]
 117        [SwaggerResponse(400, "Некорректные входные данные", typeof(ErrorDTO))]
 118        [SwaggerResponse(403, "Не разрешено для этого пользователя", typeof(ErrorDTO))]
 119        [Authorize(Roles = Role.SystemAdmin)]
 120        public async Task<IActionResult> CreateAccess([FromBody] [SwaggerParameter(Required = true)] ControlAccessReques
 0121        {
 0122            if (!ModelState.IsValid)
 0123                return BadRequestResult("");
 0124            var access = new ControlAccess()
 0125            {
 0126                RecState = await _dirService.GetRecordState((long)RecordState.Active),
 0127                Action = await _service.GetAction(data.ActionId),
 0128                Available = data.Available,
 0129                Role = await _userService.GetRole(data.RoleId),
 0130            };
 0131            if (access.RecState == null)
 0132                return NotFoundResult("Служебный тип записи не найден");
 0133            if (access.Role == null)
 0134                return NotFoundResult("Роль пользователя не найдена");
 0135            if (access.Action == null)
 0136                return NotFoundResult("Запись с таким доступом не найдена");
 137
 0138            var exists = await _service.GetAccess(access.Role.Id, access.Action.Id);
 0139            if (exists != null)
 0140                throw new ArgumentException("Запись с такими параметрами уже сущуствует");
 141
 0142            await _service.Create(access);
 0143            return CreatedAtAction("GetAccess", new { id = access.Id }, new ControlAccessResponseDTO(access));
 0144        }
 145
 146        /// <summary>
 147        /// Обновляет разрешение для роли
 148        /// </summary>
 149        /// <remarks>author i.rebenok</remarks>
 150        /// <param name="id">id записи</param>
 151        /// <param name="data">ControlAccessRequestDTO</param>
 152        [HttpPut("{id}")]
 153        [SwaggerResponse(201, "Успешно обновлено", typeof(ControlAccessResponseDTO))]
 154        [SwaggerResponse(404, "Нет записей", typeof(ErrorDTO))]
 155        [SwaggerResponse(500, "Ошибка на стороне сервера", typeof(ErrorDTO))]
 156        [SwaggerResponse(400, "Некорректные входные данные", typeof(ErrorDTO))]
 157        [SwaggerResponse(403, "Не разрешено для этого пользователя", typeof(ErrorDTO))]
 158        [Authorize(Roles = Role.SystemAdmin)]
 159        public async Task<IActionResult> UpdateAccess([SwaggerParameter(Required = true)] long id, [FromBody] [SwaggerPa
 0160        {
 0161            if (!ModelState.IsValid)
 0162                return BadRequestResult("");
 0163            var access = await _service.GetAccess(id);
 0164            if (access == null)
 0165                return NotFoundResult($"Запись с id={id} не найдена");
 0166            access.Action = await _service.GetAction(data.ActionId);
 0167            access.Available = data.Available;
 0168            access.Role = await _userService.GetRole(data.RoleId);
 0169            if (access.Role == null)
 0170                return NotFoundResult("Роль пользователя не найдена");
 0171            if (access.Action == null)
 0172                return NotFoundResult("Запись с таким доступом не найдена");
 0173            var exists = await _service.GetAccess(access.Role.Id, access.Action.Id);
 0174            if (exists != null && exists.Id != id)
 0175                throw new ArgumentException("Запись с такими параметрами уже сущуствует");
 0176            await _service.Update(access);
 0177            return Ok(new ControlAccessResponseDTO(access));
 0178        }
 179
 180        /// <summary>
 181        /// Удаляет разрешение для роли по id
 182        /// </summary>
 183        /// <remarks>author i.rebenok</remarks>
 184        /// <param name="id">id записи</param>
 185        [HttpDelete("{id}")]
 186        [SwaggerResponse(200, "Успешно удалено", typeof(EmptyResult))]
 187        [SwaggerResponse(404, "Нет записей", typeof(ErrorDTO))]
 188        [SwaggerResponse(500, "Ошибка на стороне сервера", typeof(ErrorDTO))]
 189        [SwaggerResponse(403, "Не разрешено для этого пользователя", typeof(ErrorDTO))]
 190        [Authorize(Roles = Role.SystemAdmin)]
 191        public async Task<IActionResult> DeleteAccess([SwaggerParameter(Required = true)] long id)
 0192        {
 0193            await _service.Delete(id);
 0194            return Ok();
 0195        }
 196
 197
 198    }
 199}