< Summary

Information
Class: OzonOrdersWeb.Areas.Studio2.Controllers.Directories.ColumnMappingsController
Assembly: OzonOrdersWeb
File(s): /home/runner/work/Studio2Prod/Studio2Prod/OzonOrdersWeb/Areas/Studio2/Controllers/Directories/ColumnMappingsController.cs
Line coverage
0%
Covered lines: 0
Uncovered lines: 30
Coverable lines: 30
Total lines: 89
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
.ctor(...)100%210%
Index()100%210%
Delete()0%620%
Edit()0%620%
Edit()0%4260%

File(s)

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

#LineLine coverage
 1using Microsoft.AspNetCore.Authorization;
 2using Microsoft.AspNetCore.Mvc;
 3using Microsoft.EntityFrameworkCore;
 4using OzonDomains.Models;
 5using Services.DataServices;
 6
 7namespace OzonOrdersWeb.Areas.Studio2.Controllers.Directories
 8{
 9    [Authorize(Roles = "Admin")]
 10    [Area("Studio2")]
 11    public class ColumnMappingsController : Controller
 12    {
 13        private readonly ColumnMappingDataServices _columnMappingDataServices;
 14
 015        public ColumnMappingsController(ColumnMappingDataServices columnMappingDataServices)
 16        {
 017            _columnMappingDataServices = columnMappingDataServices;
 018        }
 19
 20        /// <summary>Весь список сопоставлений для грида AG Grid: фильтры и сортировка — на клиенте.</summary>
 21        public async Task<IActionResult> Index()
 22        {
 023            var columnMappings = (await _columnMappingDataServices.GetColumnMappings()).OrderBy(m => m.MappingName).ToLi
 024            return View(columnMappings);
 025        }
 26
 27        public async Task<IActionResult> Delete(int id)
 28        {
 029            var columnMapping = await _columnMappingDataServices.GetColumnMappingAsync(id);
 030            if (columnMapping != null)
 31            {
 032                await _columnMappingDataServices.DeleteColumnMapping(columnMapping);
 33            }
 034            return RedirectToAction(nameof(Index));
 035        }
 36
 37        /// <summary>
 38        /// Страница редактирования сопоставления и его полей.
 39        /// </summary>
 40        [HttpGet]
 41        public async Task<IActionResult> Edit(int id)
 42        {
 043            var columnMapping = await _columnMappingDataServices.GetColumnMappingAsync(id);
 044            if (columnMapping == null)
 45            {
 046                return NotFound();
 47            }
 48
 049            return View(columnMapping);
 050        }
 51
 52        /// <summary>
 53        /// Сохранение изменений сопоставления (как с отдельной страницы, так и из списка).
 54        /// </summary>
 55        [HttpPost]
 56        [ValidateAntiForgeryToken]
 57        public async Task<IActionResult> Edit(int id, ColumnMapping columnMapping)
 58        {
 059            if (id != columnMapping.Id)
 60            {
 061                return NotFound();
 62            }
 63
 064            if (!ModelState.IsValid)
 65            {
 066                return View(columnMapping);
 67            }
 68
 69            try
 70            {
 071                await _columnMappingDataServices.UpdateColumnMapping(columnMapping);
 072            }
 073            catch (DbUpdateConcurrencyException)
 74            {
 75                // Если запись была изменена/удалена конкурирующей транзакцией
 076                var existing = await _columnMappingDataServices.GetColumnMappingAsync(id);
 077                if (existing == null)
 78                {
 079                    return NotFound();
 80                }
 81
 082                throw;
 83            }
 84
 085            TempData["SuccessMessage"] = "Сопоставление успешно сохранено.";
 086            return RedirectToAction(nameof(Index));
 087        }
 88    }
 89}