< Summary

Information
Class: OzonOrdersWeb.Areas.Studio2.Controllers.EmailRoutingRulesController
Assembly: OzonOrdersWeb
File(s): /home/runner/work/Studio2Prod/Studio2Prod/OzonOrdersWeb/Areas/Studio2/Controllers/EmailRoutingRulesController.cs
Line coverage
0%
Covered lines: 0
Uncovered lines: 49
Coverable lines: 49
Total lines: 122
Line coverage: 0%
Branch coverage
0%
Covered branches: 0
Total branches: 14
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%
Create()100%210%
Create()0%620%
Edit()0%620%
Edit()0%2040%
Toggle()0%2040%
Delete()0%620%
DryRun()100%210%

File(s)

/home/runner/work/Studio2Prod/Studio2Prod/OzonOrdersWeb/Areas/Studio2/Controllers/EmailRoutingRulesController.cs

#LineLine coverage
 1using Microsoft.AspNetCore.Authorization;
 2using Microsoft.AspNetCore.Mvc;
 3using OzonDomains.Models;
 4using Services.DataServices;
 5using Services.EmailRoutingServices;
 6
 7namespace OzonOrdersWeb.Areas.Studio2.Controllers;
 8
 9[Area("Studio2")]
 10[Authorize(Roles = "Admin")]
 11public class EmailRoutingRulesController : Controller
 12{
 13    private readonly EmailRoutingRuleDataServices _rulesDataServices;
 14    private readonly IEmailAttachmentRoutingService _routingService;
 15
 016    public EmailRoutingRulesController(
 017        EmailRoutingRuleDataServices rulesDataServices,
 018        IEmailAttachmentRoutingService routingService)
 19    {
 020        _rulesDataServices = rulesDataServices;
 021        _routingService = routingService;
 022    }
 23
 24    /// <summary>Все правила для грида AG Grid: фильтры и сортировка — на клиенте.</summary>
 25    public async Task<IActionResult> Index()
 26    {
 027        var rules = (await _rulesDataServices.GetRules()).OrderBy(r => r.Priority).ThenBy(r => r.Id).ToList();
 028        return View(rules);
 029    }
 30
 31    [HttpGet]
 32    public IActionResult Create()
 33    {
 034        return View(new EmailRoutingRule());
 35    }
 36
 37    [HttpPost]
 38    [ValidateAntiForgeryToken]
 39    public async Task<IActionResult> Create(EmailRoutingRule model)
 40    {
 041        if (!ModelState.IsValid)
 42        {
 043            return View(model);
 44        }
 45
 046        await _rulesDataServices.CreateRule(model);
 047        TempData["SuccessMessage"] = "Правило маршрутизации создано.";
 048        return RedirectToAction(nameof(Index));
 049    }
 50
 51    [HttpGet]
 52    public async Task<IActionResult> Edit(int id)
 53    {
 054        var rule = await _rulesDataServices.GetRule(id);
 055        if (rule == null)
 56        {
 057            return NotFound();
 58        }
 59
 060        return View(rule);
 061    }
 62
 63    [HttpPost]
 64    [ValidateAntiForgeryToken]
 65    public async Task<IActionResult> Edit(int id, EmailRoutingRule model)
 66    {
 067        if (id != model.Id)
 68        {
 069            return NotFound();
 70        }
 71
 072        if (!ModelState.IsValid)
 73        {
 074            return View(model);
 75        }
 76
 077        await _rulesDataServices.UpdateRule(model);
 078        TempData["SuccessMessage"] = "Правило маршрутизации обновлено.";
 079        return RedirectToAction(nameof(Index));
 080    }
 81
 82    [HttpPost]
 83    [ValidateAntiForgeryToken]
 84    public async Task<IActionResult> Toggle(int id)
 85    {
 086        var rule = await _rulesDataServices.GetRule(id);
 087        if (rule == null)
 88        {
 089            return NotFound();
 90        }
 91
 092        rule.IsActive = !rule.IsActive;
 093        await _rulesDataServices.UpdateRule(rule);
 094        TempData["SuccessMessage"] = rule.IsActive ? "Правило маршрутизации включено." : "Правило маршрутизации выключен
 095        return RedirectToAction(nameof(Index));
 096    }
 97
 98    [HttpPost]
 99    [ValidateAntiForgeryToken]
 100    public async Task<IActionResult> Delete(int id)
 101    {
 0102        var rule = await _rulesDataServices.GetRule(id);
 0103        if (rule == null)
 104        {
 0105            return NotFound();
 106        }
 107
 0108        await _rulesDataServices.DeleteRule(rule);
 0109        TempData["SuccessMessage"] = "Правило маршрутизации удалено.";
 0110        return RedirectToAction(nameof(Index));
 0111    }
 112
 113    [HttpPost]
 114    [ValidateAntiForgeryToken]
 115    public async Task<IActionResult> DryRun()
 116    {
 0117        var result = await _routingService.ProcessInboxAsync(true);
 0118        var processed = result.MessagesProcessed;
 0119        TempData["TransactionResult"] = $"Dry-run завершен. Обработано писем: {processed}.";
 0120        return RedirectToAction(nameof(Index));
 0121    }
 122}