< Summary

Information
Class: OzonOrdersWeb.Areas.Studio2.Controllers.Directories.BaseDirectoryController<T>
Assembly: OzonOrdersWeb
File(s): /home/runner/work/Studio2Prod/Studio2Prod/OzonOrdersWeb/Areas/Studio2/Controllers/Directories/BaseDirectoryController.cs
Line coverage
0%
Covered lines: 0
Uncovered lines: 19
Coverable lines: 19
Total lines: 95
Line coverage: 0%
Branch coverage
0%
Covered branches: 0
Total branches: 10
Branch coverage: 0%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
get_PageSize()100%210%
GetSortStateCookie()0%2040%
SaveSortStateCookie(...)0%620%
DelSortStateCookie()100%210%
GetFilterDataFromCookie(...)0%2040%
SaveFilterDataToCookie(...)100%210%

File(s)

/home/runner/work/Studio2Prod/Studio2Prod/OzonOrdersWeb/Areas/Studio2/Controllers/Directories/BaseDirectoryController.cs

#LineLine coverage
 1using Microsoft.AspNetCore.Authorization;
 2using Microsoft.AspNetCore.Mvc;
 3using Newtonsoft.Json;
 4
 5namespace OzonOrdersWeb.Areas.Studio2.Controllers.Directories
 6{
 7    /// <summary>
 8    /// Базовый класс для всех контроллеров справочников
 9    /// Предоставляет общую функциональность для работы с cookies фильтрации и сортировки
 10    /// </summary>
 11    /// <typeparam name="TSortState">Тип состояния сортировки</typeparam>
 12    [Authorize]
 13    [Area("Studio2")]
 14    public abstract class BaseDirectoryController<TSortState> : Controller
 15        where TSortState : struct, Enum
 16    {
 17        /// <summary>
 18        /// Имя cookie для хранения состояния сортировки
 19        /// </summary>
 20        protected abstract string SortStateCookieName { get; }
 21
 22        /// <summary>
 23        /// Стандартное состояние сортировки
 24        /// </summary>
 25        protected abstract TSortState StandardSortState { get; }
 26
 27        /// <summary>
 28        /// Размер страницы для пагинации (по умолчанию 15)
 29        /// </summary>
 030        protected virtual int PageSize => 15;
 31
 32        #region Cookie Management
 33
 34        /// <summary>
 35        /// Получает состояние сортировки из cookie
 36        /// </summary>
 37        protected TSortState GetSortStateCookie()
 38        {
 039            var sortStateCookie = Request.Cookies[SortStateCookieName];
 040            if (!string.IsNullOrEmpty(sortStateCookie) && Enum.TryParse<TSortState>(sortStateCookie, out var savedSortSt
 41            {
 042                return savedSortState;
 43            }
 044            return StandardSortState;
 45        }
 46
 47        /// <summary>
 48        /// Сохраняет состояние сортировки в cookie
 49        /// </summary>
 50        public virtual void SaveSortStateCookie(TSortState sortState)
 51        {
 052            if (!sortState.Equals(StandardSortState))
 53            {
 054                Response.Cookies.Delete(SortStateCookieName);
 055                Response.Cookies.Append(SortStateCookieName, sortState.ToString());
 56            }
 057        }
 58
 59        /// <summary>
 60        /// Удаляет cookie состояния сортировки
 61        /// </summary>
 62        [HttpPost]
 63        public virtual Task<IActionResult> DelSortStateCookie()
 64        {
 065            Response.Cookies.Delete(SortStateCookieName);
 066            Response.Cookies.Append(SortStateCookieName, StandardSortState.ToString());
 067            return Task.FromResult<IActionResult>(RedirectToAction("Index"));
 68        }
 69
 70        /// <summary>
 71        /// Получает данные фильтра из cookie по имени cookie
 72        /// </summary>
 73        protected TFilterModel GetFilterDataFromCookie<TFilterModel>(string cookieName) where TFilterModel : class, new(
 74        {
 075            var filterDataString = HttpContext.Request.Cookies[cookieName];
 076            if (!string.IsNullOrEmpty(filterDataString))
 77            {
 078                return JsonConvert.DeserializeObject<TFilterModel>(filterDataString) ?? new TFilterModel();
 79            }
 080            return new TFilterModel();
 81        }
 82
 83        /// <summary>
 84        /// Сохраняет данные фильтра в cookie
 85        /// </summary>
 86        protected void SaveFilterDataToCookie<TFilterModel>(string cookieName, TFilterModel filterData) where TFilterMod
 87        {
 088            var serializedFilterData = JsonConvert.SerializeObject(filterData);
 089            HttpContext.Response.Cookies.Append(cookieName, serializedFilterData);
 090        }
 91
 92        #endregion
 93    }
 94}
 95