< Summary

Class:SVETA.Api.Controllers.EventsController
Assembly:SVETA.Api
File(s):/opt/dev/sveta_api_build/SVETA.Api/Controllers/EventsController.cs
Covered lines:0
Uncovered lines:66
Coverable lines:66
Total lines:200
Line coverage:0% (0 of 66)
Covered branches:0
Total branches:16
Branch coverage:0% (0 of 16)

Metrics

MethodLine coverage Branch coverage
.ctor(...)0%100%
GetEvents()0%0%
getResponseParamUrl(...)0%0%
GetEventsCount()0%100%
GetEvent()0%0%
ToDtoMapper()0%0%
DownloadEventsToFile()0%100%

File(s)

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

#LineLine coverage
 1using WinSolutions.Sveta.Common.Extensions;
 2using System;
 3using System.IO;
 4using AutoMapper;
 5using System.Collections.Generic;
 6using System.Linq;
 7using System.Threading.Tasks;
 8using Microsoft.AspNetCore.Http;
 9using Microsoft.AspNetCore.Mvc;
 10using Microsoft.Extensions.Logging;
 11using WinSolutions.Sveta.Server.Data.DataModel.Entities;
 12using WinSolutions.Sveta.Server.Data.DataModel.Kinds;
 13using SVETA.Api.Data.DTO;
 14using WinSolutions.Sveta.Server.Services.Interfaces;
 15using Swashbuckle.AspNetCore.Annotations;
 16using SVETA.Api.Data.Domain;
 17using Microsoft.Extensions.Options;
 18using Microsoft.AspNetCore.Authorization;
 19using SVETA.Api.Helpers;
 20using WinSolutions.Sveta.Common;
 21using SVETA.Api.Services.Interfaces;
 22
 23namespace SVETA.Api.Controllers
 24{
 25    [Authorize]
 26    [Route("api/v1/Events")]
 27    [ApiController]
 28    public class EventsController : SvetaController
 29    {
 30        const string _routeUrl = "api/v1/Events";
 31        private readonly IEventService _service;
 32        private readonly IUploadWorker _uploadWorker;
 33        private readonly IDirectoriesService _dirWorker;
 34        private readonly ILogger<EventsController> _logger;
 35        private readonly ImagesSettings _imageSettings;
 36        IDiskStorageService _diskStorage;
 37
 38        public EventsController(IEventService service, IUploadWorker uploadWorker, ILogger<EventsController> logger, IOp
 39            IDiskStorageService diskStorage, IDirectoriesService dirWorker)
 040            : base(logger)
 041        {
 042            _uploadWorker = uploadWorker;
 043            _dirWorker = dirWorker;
 044            _service = service;
 045            _logger = logger;
 046            _imageSettings = option.Value;
 047            _diskStorage = diskStorage;
 048        }
 49
 50        /// <summary>
 51        /// Возвращает список событий
 52        /// </summary>
 53        /// <remarks>author i.rebenok</remarks>
 54        /// <param name="page">Любое значение ниже нуля изменится на 1, пагинация: номер страницы</param>
 55        /// <param name="limit">Любое значение ниже нуля изменится на 10, пагинация: размер страницы</param>
 56        /// <param name="filter">фильтр по значимым полям: причине или логину</param>
 57        /// <param name="entity">фильтр по имени объекта изменения. Если пусто, выводится по всем</param>
 58        /// <param name="sort">сортировать по entity, entity|desc, user, user|desc,dtcreated, по умолчанию dtcreated|des
 59        /// <param name="dateFrom">дата с</param>
 60        /// <param name="dateTo">дата по</param>
 61        /// <param name="eventKind">тип события, 0 (по умолчанию) если отдавать события всех типов(1-неизвестно,2-создан
 62        [HttpGet]
 63        [SwaggerResponse(200, "Успешно", typeof(BaseResponseDTO<EventResponseDTO>))]
 64        [SwaggerResponse(500, "Ошибка на стороне сервера", typeof(ErrorDTO))]
 65        [SwaggerResponse(403, "Не разрешено для этого пользователя", typeof(ErrorDTO))]
 66        [Authorize (Roles =Role.SystemAdmin + "," + Role.SystemOperator)]
 67        public async Task<IActionResult> GetEvents(int page = 1, int limit = 10, string filter = null, string sort = "",
 68            DateTimeOffset dateFrom = default, DateTimeOffset dateTo = default, int eventKind = 0, string entity = defau
 069        {
 070            filter = filter.NormalizeName();
 071            entity = entity.NormalizeName();
 072            page = page < 1 ? 1 : page;
 073            limit = limit < 1 ? 10 : limit;
 074            var result = await _service.GetEvents(page - 1, limit, filter, sort,
 075                dateFrom.GetStartOfDate(), dateTo.GetEndOfDate(), eventKind, entity);
 076            var param = getResponseParamUrl(dateFrom,
 077                dateTo, eventKind);
 078            var response = new BaseResponseDTO<EventResponseDTO>(_routeUrl, page, limit, result.TotalFilteredCount, resu
 079            {
 080                Data = ToDtoMapper().Map<List<EventResponseDTO>>(result.Result).ToList()
 081            };
 082            return Ok(response);
 083        }
 84
 85        string getResponseParamUrl(DateTimeOffset dateFrom, DateTimeOffset dateTo, int eventKind)
 086        {
 087            var param = "";
 88            //if (dateFrom != null && dateFrom != DateTimeOffset.MinValue)
 089                param += $"&dateFrom={dateFrom.ToISOString()}";
 90            //if (dateTo != null && dateTo != DateTimeOffset.MinValue)
 091                param += $"&dateTo={dateTo.ToISOString()}";
 092            if (eventKind != 0)
 093                param += $"&eventKind={eventKind}";
 94
 095            if (param.StartsWith("&"))
 096                param = param.Trim(new char[] { '&' });
 097            return param;
 098        }
 99
 100        /// <summary>
 101        /// Возвращает количество событий
 102        /// </summary>
 103        /// <remarks>author i.rebenok</remarks>
 104        /// <param name="filter">фильтр по значимым полям: причине или логину</param>
 105        /// <param name="entity">фильтр по имени объекта изменения. Если пусто, выводится по всем</param>
 106        /// <param name="dateFrom">дата с</param>
 107        /// <param name="dateTo">дата по</param>
 108        /// <param name="eventKind">тип события, 0 (по умолчанию) если отдавать события всех типов (1-неизвестно,2-созда
 109        [HttpGet("Count")]
 110        [SwaggerResponse(200, "Успешно", typeof(CountDTO))]
 111        [SwaggerResponse(500, "Ошибка на стороне сервера", typeof(ErrorDTO))]
 112        [SwaggerResponse(403, "Не разрешено для этого пользователя", typeof(ErrorDTO))]
 113        [Authorize(Roles = Role.SystemAdmin + "," + Role.SystemOperator)]
 114        public async Task<IActionResult> GetEventsCount(string filter = null, DateTimeOffset dateFrom = default, DateTim
 0115        {
 0116            filter = filter.NormalizeName();
 0117            entity = entity.NormalizeName();
 0118            int result = await Task.FromResult(_service.GetEvents(0, 1, filter, null, dateFrom.GetStartOfDate()
 0119                , dateTo.GetEndOfDate(), eventKind, entity).Result.TotalFilteredCount);
 0120            return Ok(new CountDTO(result));
 0121        }
 122
 123        /// <summary>
 124        /// Получить событие по ID
 125        /// </summary>
 126        /// <remarks>author i.rebenok</remarks>
 127        /// <param name="id">id события</param>
 128        [HttpGet("{id}")]
 129        [SwaggerResponse(200, "Успешно", typeof(EventResponseDTO))]
 130        [SwaggerResponse(404, "Нет записей", typeof(ErrorDTO))]
 131        [SwaggerResponse(500, "Ошибка на стороне сервера", typeof(ErrorDTO))]
 132        [SwaggerResponse(403, "Не разрешено для этого пользователя", typeof(ErrorDTO))]
 133        [Authorize(Roles = Role.SystemAdmin + "," + Role.SystemOperator)]
 134        public async Task<IActionResult> GetEvent([SwaggerParameter(Required = true)] long id)
 0135        {
 0136            var result = await _service.GetEvent(id);
 0137            if (result == null)
 0138            {
 0139                return NotFoundResult($"Событие с id={id} не найдено");
 140            }
 0141            return Ok(ToDtoMapper().Map<EventResponseDTO>(result));
 0142        }
 143
 144        /// <summary>
 145        /// Возвращает виды событий
 146        /// </summary>
 147        /// <remarks>author i.rebenok</remarks>
 148        [HttpGet("Kind")]
 149        [SwaggerResponse(200, "Успешно", typeof(IEnumerable<EnumDTO>))]
 150        [SwaggerResponse(500, "Ошибка на стороне сервера", typeof(ErrorDTO))]
 151        [SwaggerResponse(403, "Не разрешено для этого пользователя", typeof(ErrorDTO))]
 152        [Authorize(Roles = Role.SystemAdmin + "," + Role.SystemOperator)]
 153        public async Task<IActionResult> GetEventKind()
 154        {
 155            var list = await _dirWorker.GetEventKinds();
 156            return Ok(list.Select(x => new EnumDTO
 157            {
 158                Id = (int)x.Id,
 159                Name = x.Name
 160            }));
 161        }
 162
 163        private static IMapper ToDtoMapper()
 0164        {
 0165            var config = new MapperConfiguration(cfg =>
 0166            {
 0167                cfg.CreateMap<Event, EventResponseDTO>()
 0168                    .ForMember(d => d.KindId, e => e.MapFrom(s => (int)s.EventsKind.Id));
 0169                cfg.CreateMap<User, IdNameDTO>()
 0170                    .ForMember(d => d.Name, e => e.MapFrom(s => s.FirstName + " " + s.LastName));
 0171            });
 0172            IMapper mapper = config.CreateMapper();
 0173            return mapper;
 0174        }
 175
 176        /// <summary>
 177        /// Выгрузка журнала в csv
 178        /// </summary>
 179        /// <remarks>author: obo</remarks>
 180        /// <param name="filter">фильтр по значимым полям: причине или логину</param>
 181        /// <param name="entity">фильтр по имени объекта изменения. Если пусто, выводится по всем</param>
 182        /// <param name="sort">сортировка (entity, entity|desc, user, user|desc, dtcreated, dtcreated|desc)</param>
 183        /// <param name="dateFrom">дата с</param>
 184        /// <param name="dateTo">дата по</param>
 185        /// <param name="eventKind">тип события, 0 если отдавать события всех типов</param>
 186        [HttpGet("DownloadToFile")]
 187        [SwaggerResponse(200, "Успешно", typeof(File))]
 188        [SwaggerResponse(500, "Ошибка на стороне сервера", typeof(ErrorDTO))]
 189        [SwaggerResponse(403, "Не разрешено для этого пользователя", typeof(ErrorDTO))]
 190        [Authorize(Roles = Role.SystemAdmin + "," + Role.SystemOperator)]
 191        public async Task<IActionResult> DownloadEventsToFile(string filter = null, string sort = "", DateTimeOffset dat
 0192        {
 0193            filter = filter.NormalizeName();
 0194            entity = entity.NormalizeName();
 0195            string result = await _uploadWorker.DownloadEventsToFile(filter, sort, dateFrom, dateTo, eventKind, entity);
 0196            var filename = _diskStorage.SaveDownload("events.csv", result.ToString());
 0197            return File(System.Text.Encoding.UTF8.GetBytes(result), "text/csv", filename.Split('/').Last());
 0198        }
 199    }
 200}