public virtual async Task <string> GetMimeTypes(int id)
        {
            var result = await AttachmentTypeService.GetAsync(id);

            if (result.Status != ServiceResponseStatus.Success)
            {
                return(string.Empty);
            }

            var model = _mapper.Map <AttachmentTypeIndexViewModel>(result.Result);

            return(model.MimeTypes);
        }
        public async Task <IActionResult> Delete(int id)
        {
            return(await TryGetActionResultAsync(async() =>
            {
                var result = await AttachmentTypeService.GetAsync(id);

                if (result.Status != ServiceResponseStatus.Success)
                {
                    TempData["Error"] = "Не удалось найти указанный тип вложений.";
                    return RedirectToAction("Index");
                }

                return View(_mapper.Map <AttachmentTypeDeleteViewModel>(result.Result));
            }, OnFault));
        }
        public JsonResult GetAttachmentTypes(string term)
        {
            var attachmentTypes = AttachmentTypeService.GetAll(term);

            return(Json(new
            {
                results = attachmentTypes.Result?
                          .Select(t => new
                {
                    id = t.ID,
                    text = t.Name,
                    exts = t.Extensions,
                    desc = t.Comment
                })
                          .OrderBy(t => t.text)
            }));
        }
        public async Task <IActionResult> Delete(AttachmentTypeDeleteViewModel model)
        {
            return(await TryGetActionResultAsync(async() =>
            {
                var result = await AttachmentTypeService.DeleteAsync(model.ID, UserId);

                if (result.Status == ServiceResponseStatus.Success)
                {
                    TempData["Success"] = $"Тип вложений \"{model.Name}\" был успешно помечен как удалённый.";
                }
                else
                {
                    TempData["Error"] = "Не удалось удалить тип вложений.";
                }

                return RedirectToAction("Index");
            }, OnFault));
        }
        public IActionResult Index()
        {
            return(TryGetActionResult(() =>
            {
                var result = AttachmentTypeService.GetAll(true);

                if (result.Status != ServiceResponseStatus.Success)
                {
                    TempData["Error"] = "Не удалось получить список типов вложений.";
                    return RedirectToAction("Index", "Home");
                }

                return View(_mapper.Map <IEnumerable <AttachmentTypeIndexViewModel> >(result.Result));
            }, ex =>
            {
                TempData["Error"] = ex;
                return RedirectToAction("Index", "Home");
            }));
        }
        public async Task <IActionResult> Update(AttachmentTypeCreateUpdateViewModel model)
        {
            return(await TryGetActionResultAsync(async() =>
            {
                var attachmentType = _mapper.Map <AttachmentTypeDto>(model);

                var result = await AttachmentTypeService.UpdateAsync(attachmentType, UserId);

                switch (result.Status)
                {
                case ServiceResponseStatus.NotFound:
                case ServiceResponseStatus.InvalidOperation:
                    TempData["Error"] = "Не удалось обновить тип вложений.";
                    return RedirectToAction("Index");

                case ServiceResponseStatus.AlreadyExists:
                    ModelState.AddModelError("Name", "Тип вложений с таким названием уже существует.");
                    return View("Create", model);
                }

                TempData["Success"] = $"Тип вложений \"{model.Name}\" был успешно обновлён.";
                return RedirectToAction("Index");
            }, OnFault));
        }